gpt4 book ai didi

c++ - 坚持 OpenProcess,总是返回 0

转载 作者:行者123 更新时间:2023-11-30 04:22:28 30 4
gpt4 key购买 nike

当我运行我的程序时发生了一些奇怪的事情。当我在 VS 2010 中使用“不调试启动”选项运行它时,OpenProcess 照常返回进程句柄,但是当我在 Windows 资源管理器中运行我的程序时,OpenProcess 总是返回 0?!!我调用了 GetLastError,它在两种情况下都返回 6 (INVALID_HANDLE_VALUE)。我使用的是 Windows XP SP3有人可以帮我吗?这是我写的代码:

HANDLE GetProcessHandle(TCHAR* szProcessName)
{
//Get the snapshot of all processes in the system
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
if (hSnap == INVALID_HANDLE_VALUE)
{
return INVALID_HANDLE_VALUE;
}

PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);

//Get the information of the first process
if (!Process32First(hSnap, &pe32))
{
CloseHandle(hSnap);
return INVALID_HANDLE_VALUE;
}

//Loop through all processes
do
{
if (_tcscmp(szProcessName, pe32.szExeFile) == 0)
{
//Got the process ID
CloseHandle(hSnap);
printf("sz = %s; exe = %s; pid = %d\n", szProcessName, pe32.szExeFile, pe32.th32ProcessID);
//Error here, correct PID was found in both case
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
}
}
while (Process32Next(hSnap, &pe32));

CloseHandle(hSnap);
return INVALID_HANDLE_VALUE;
}

最佳答案

要打开另一个本地进程的句柄并获得完全访问权限,您必须启用 SeDebugPrivilege 权限。

VS2010有这个权限,但是explore没有。由于您的程序是子进程,因此它将继承父进程的特权。

有关详细信息,请查看此 MSDN doc .

关于c++ - 坚持 OpenProcess,总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13796059/

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