NtQueryInformationProcess 在 Visual Studio 2010 中不起作用

发布于 2024-11-29 13:25:24 字数 467 浏览 0 评论 0原文

我有一个奇怪的问题,我之前没有遇到过,我必须提到我的主要编程语言是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 中引用

有什么问题?非常感谢。

I have a strange problem that i didn't encounter before i must mention that my main programming language is delphi not c++ and i might do a stupid mistake and don't realise it.

I have the following code :

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

I get the following error message :

GetCommandArgs.obj : error LNK2019: unresolved external symbol
_NtQueryInformationProcess@20 referenced in function _wmain

What is the problem ? Thanks very much.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

递刀给你 2024-12-06 13:25:24

这是设计使然。在司法部和解协议的强制下,微软对于必须记录该功能并​​不太高兴。 MSDN 文章中对此说得很清楚:

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

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

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

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

This is by design. Microsoft wasn't very happy about having to document the function, forced to by the Department of Justice settlement. It is clearly spelled out in the MSDN article for it:

The NtQueryInformationProcess function and the structures that it
returns are internal to the operating system and subject to change
from one release of Windows to another. To maintain the compatibility
of your application, it is better to use public functions mentioned in
the description of the ProcessInformationClass parameter instead.

If you do use NtQueryInformationProcess, access the function through
run-time dynamic linking. This gives your code an opportunity to
respond gracefully if the function has been changed or removed from
the operating system. Signature changes, however, may not be
detectable.

This function has no associated import library. You must use the
LoadLibrary and GetProcAddress functions to dynamically link to
Ntdll.dll.

The last line tells you what you have to do. The first line tells you why you shouldn't.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文