gpt4 book ai didi

c++ - MFC GetLastError 返回 5(访问被拒绝)

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:02 25 4
gpt4 key购买 nike

我正在构建 MFC 对话框应用程序。
我使用 Visual Studio 2010、MFC 2008/2010。
在我的 cpp 文件中,我有一些代码来获取进程的信息。进程用户名为 SYSTEM

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, 0); // 0 is my process id
DWORD testerror = GetLastError();
// Get the process name.

if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;

if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, namestr,
sizeof(namestr)/sizeof(TCHAR) );
}
}
else
{
MessageBox(L"", L"", MB_OK);
}
CloseHandle();

结果正在显示 MessageBox,因为句柄为 NULL。
我得到 GetLastError() 并返回 5(访问被拒绝)。
我不知道为什么?非常感谢!

最佳答案

系统空闲进程 和其他一些系统进程不允许获取它们的信息。

系统空闲进程 (ID 0) 包含在名为 [System Process] 下的快照中,您无法打开它的句柄,因为 OpenProcess 的文档特别指出:

如果指定的进程是系统进程(0x00000000),函数失败,最后的错误代码是 ERROR_INVALID_PARAMETER。如果指定的进程是空闲进程或 CSRSS 进程之一,则此函数失败并且最后一个错误代码为 ERROR_ACCESS_DENIED,因为它们的访问限制阻止用户级代码打开它们。

关于c++ - MFC GetLastError 返回 5(访问被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23883687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com