1

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

我有以下代码:

ULONG myret;
PROCESS_BASIC_INFORMATION PRC;
...
NtQueryInformationProcess(hProcess,ProcessBasicInformation,(PVOID)(&PRC),sizeof(PROCESS_BASIC_INFORMATION),(PULONG)(&myret));
...

我收到以下错误消息:

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

问题是什么 ?非常感谢。

4

1 回答 1

7

这是设计使然。微软对必须记录该功能感到很不高兴,因为司法部被迫解决了这个问题。在 MSDN 文章中清楚地说明了这一点:

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

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

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

最后一行告诉你你必须做什么。第一行告诉你为什么不应该这样做。

于 2011-08-13T17:13:21.223 回答