Что случилось с WINVER и _WIN32_WINNT охранниками в windows.h? - PullRequest
8 голосов
/ 22 января 2011

In Используя заголовки Windows , Microsoft заявляет, что _WIN32_WINNT и NTDDI_VERSION могут использоваться для предотвращения определения функций API для более новых версий Windows. Тем не менее, это не кажется универсально верным.

Например, CancelSynchronousIo требует Vista или более позднюю версию, но она вообще не защищена в двух версиях Windows SDK (v6.0 и v7.1).

WINBASEAPI
BOOL
WINAPI
CancelIoEx(
    __in HANDLE hFile,
    __in_opt LPOVERLAPPED lpOverlapped
    );

Между тем, GetVolumeInformationByHandleW , для которого также требуется Vista, охраняется, как и следовало ожидать:

#if(_WIN32_WINNT >= 0x0600)
WINBASEAPI
BOOL
WINAPI
GetVolumeInformationByHandleW(
    __in      HANDLE hFile,
    __out_ecount_opt(nVolumeNameSize) LPWSTR lpVolumeNameBuffer,
    __in      DWORD nVolumeNameSize,
    __out_opt LPDWORD lpVolumeSerialNumber,
    __out_opt LPDWORD lpMaximumComponentLength,
    __out_opt LPDWORD lpFileSystemFlags,
    __out_ecount_opt(nFileSystemNameSize) LPWSTR lpFileSystemNameBuffer,
    __in      DWORD nFileSystemNameSize
    );
#endif /* _WIN32_WINNT >=  0x0600 */

Это что-то вроде ошибки? _WIN32_WINT охранники бесполезны? Кто-нибудь может порекомендовать надежный способ определить, какая версия Windows представила, какие функции API?

Отредактировано, чтобы добавить:

Вот тест. foo.h содержит:

#include <windows.h>

Затем запустите:

cl /E /D_WIN32_WINNT=0x0501 /DNTDDI_VERSION=0x05010000 foo.h | grep CancelSynchronousIo

Я ожидаю, что я не получу вывод, но вместо этого определено CancelSynchronousIo.

1 Ответ

7 голосов
/ 22 января 2011

Это ошибка.Справочные примеры здесь и здесь .Некоторые второстепенные доказательства того, что проект Longhorn действительно был очень проблемным.Команда Windows не принимает отзывы, как DevDiv, трудно исправить ошибки.Вы можете оставить аннотацию внизу страницы библиотеки MSDN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...