Was ist mit WINVER und _WIN32_WINNT Wachen in windows.h passiert?

8

In Verwenden der Windows-Header behauptet Microsoft, dass _WIN32_WINNT und NTDDI_VERSION kann verwendet werden, um die Definition von API-Funktionen für neuere Windows-Versionen zu verhindern. Dies scheint jedoch nicht allgemein wahr zu sein.

Zum Beispiel erfordert CancelSynchronousIo Vista oder höher, aber In den beiden Versionen des Windows SDK, die ich habe (v6.0 und v7.1), ist es überhaupt nicht geschützt.

%Vor%

In der Zwischenzeit wird GetVolumeInformationByHandleW , das auch Vista erfordert, geschützt Sie könnten erwarten:

%Vor%

Ist das nur ein Fehler? Sind _WIN32_WINT Wächter nutzlos? Kann jemand einen zuverlässigen Weg empfehlen, um festzustellen, welche Version von Windows welche API-Funktionen eingeführt hat?

Bearbeitet zum Hinzufügen:

Hier ist ein Test. foo.h enthält:

%Vor%

Dann renne:

%Vor%

Meine Erwartung ist, dass ich keine Ausgabe bekomme, sondern stattdessen CancelSynchronousIo definiert ist.

    
Ross Kinder 22.01.2011, 17:40
quelle

1 Antwort

7

Es ist ein Fehler. Referenzbeispiele sind hier und hier . Einige sekundäre Beweise, dass das Longhorn-Projekt in der Tat sehr beunruhigt war. Das Windows-Team nimmt kein Feedback wie DevDiv, es ist schwer, Fehler zu beheben. Sie können eine Anmerkung am unteren Rand der MSDN Library-Seite hinterlassen.

    
Hans Passant 22.01.2011, 18:46
quelle

Tags und Links