【问题标题】:Stuck with OpenProcess, always returns 0卡在 OpenProcess 上,总是返回 0
【发布时间】:2012-12-10 06:30:02
【问题描述】:

当我运行我的程序时发生了一些奇怪的事情。当我在 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;
}

【问题讨论】:

  • 确定你能进入OpenProcess吗?您的代码将错误代码作为 HANDLE 值返回,并返回 INVALID_HANDLE_VALUE 很多。如果您将其作为 HANDLE 传递给函数...
  • INVALID_HANDLE_VALUE == -1,而不是 0。我确定我调用了正确的函数!

标签: c++ winapi openprocess


【解决方案1】:

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

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

详情请查看MSDN doc

【讨论】:

  • 我认为这不准确。首先,他明确表示他在没有调试的情况下运行他的程序,但即使他没有,检查和验证孩子没有启用 SE_DEBUG_PRIVILEGE 也是一件小事。
  • 但是,exe还是从VS2010启动的,这使得exe继承了VS2010的权限
  • 也许;我猜这值得一看。值得我的 VS2010 没有启用 SE_DEBUG_PRIVILEGE。
  • @Nik 没有创建另一个用于调试的进程吗?这就是启动被调试对象的过程。
  • 在我的系统上,正在调试的进程是 VS2010 的直接子进程(我不以管理员身份运行)。
猜你喜欢
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 2015-09-27
  • 2014-03-20
  • 2013-04-13
  • 2013-03-30
  • 2016-07-13
  • 2023-04-09
相关资源
最近更新 更多