NtQueryInformationProcess在Visual Studio 2010中将无法使用

opc*_*0de 0 visual-studio-2010 ntdll

我有一个奇怪的问题,在我不得不提到我的主要编程语言是delphi而不是c ++之前,我没有遇到过,我可能会犯一个愚蠢的错误而没有意识到。

我有以下代码:

ULONG myret;
PROCESS_BASIC_INFORMATION PRC;
...
NtQueryInformationProcess(hProcess,ProcessBasicInformation,(PVOID)(&PRC),sizeof(PROCESS_BASIC_INFORMATION),(PULONG)(&myret));
...
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

GetCommandArgs.obj:错误LNK2019:函数_wmain中引用的未解析的外部符号_NtQueryInformationProcess @ 20

问题是什么 ?非常感谢。

Han*_*ant 6

这是设计使然。微软对必须记录该功能并​​不满意,这是由司法部的和解协议强制执行的。它在MSDN文章中明确说明:

NtQueryInformationProcess函数及其返回的结构在操作系统内部,并且可能会从一个Windows版本更改为另一个Windows版本。为了保持应用程序的兼容性,最好使用ProcessInformationClass参数的描述中提到的公共函数。

如果您确实使用NtQueryInformationProcess,请通过运行时动态链接访问该函数。如果功能已从操作系统中更改或删除,这使您的代码有机会优雅地响应。但是,签名更改可能无法检测到。

此功能没有关联的导入库。您必须使用LoadLibrary和GetProcAddress函数动态链接到Ntdll.dll。

最后一行告诉您必须执行的操作。第一行告诉您为什么不应该这样做。