为什么WinBase.h由Mingw32提供排除Windows 7的“SetProcessDEPPolicy”?

时间:2013-03-06 06:46:29

标签: c windows winapi mingw32

我发现只有SetProcessDEPPolicy时才会包含WinBase.h_WIN32_WINNT >= 0x601)中的函数定义。为什么MingW32为Windows 7设置_WIN32_WINNT = 0x400以排除定义?我检查了Windows 7的kernel32.dll,它包含SetProcessDEPPolicy功能。

2 个答案:

答案 0 :(得分:1)

这是正常的,到底是怎么回事。

在您的应用中,您需要将_WIN32_WINNT设置为您要定位的Windows版本,以便获得相应的API。

来自MSDN:

  

要编译调用此函数的应用程序,请将_WIN32_WINNT定义为0x0600或更高版本。

MingW最有可能设置合理的默认值(NT4.0),允许您在需要时增加它。

答案 1 :(得分:1)

  

我发现了SetProcessDEPPolicy的函数定义(in   仅当_WIN32_WINNT> = 0x601时才包含WinBase.h。

但是,在MSDN上,它表示您需要为Windows Vista SP1及更高版本将其定义为_WIN32_WINNT >= 0x6000x601适用于Window 7.了解有关Windows标头here的更多信息。

对于每个新版本的Windows,Windows API都会更改以添加新功能。 Windows头文件告诉编译器哪个版本的Windows可用哪个功能。

  

为什么MingW32为Windows 7设置_WIN32_WINNT = 0x400以排除定义?

因为如果没有,那么使用MingW编译的所有应用程序很可能仅适用于Window 7及更高版本。

在项目中定义_WIN32_WINNT时,您只是告诉编译器您要定位的Windows版本。如果您将其定义为0x0601以便能够调用SetProcessDEPPolicy之类的函数,那么您的应用程序将无法在早期版本的Windows上运行。

要支持尽可能多的Windows版本,您需要将_WIN32_WINNT降级到希望运行应用程序的最低版本的Windows。这将确保您的应用程序使用的API是您所定位的版本以及之后的版本。但这将排除在更高版本的Windows上引入的所有“新”功能。

默认情况下,MingW设置_WIN32_WINNT = 0x400以使您的应用程序适用于所有可能的Windows版本。但是,如果您的应用程序需要调用特定版本的Windows上可用的功能,则需要将_WIN32_WINNT更改为适当的版本才能执行此操作。