在
Using the Windows Headers,Microsoft声称_WIN32_WINNT和NTDDI_VERSION可用于防止为较新版本的Windows定义API函数.但是,这似乎并不普遍.
例如,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.
这是一个错误.参考例子
are here和
here.一些次要证据表明Longhorn项目确实是一个非常困难的项目. Windows团队不像DevDiv那样接受反馈,很难修复错误.您可以在MSDN Library页面的底部留下注释.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。