OpenProcess 失败(SeDebugPrivilege?)

Posted

技术标签:

【中文标题】OpenProcess 失败(SeDebugPrivilege?)【英文标题】:OpenProcess Failure (SeDebugPrivilege?) 【发布时间】:2015-09-23 12:09:24 【问题描述】:

我正在尝试使用 OpenProcess,但由于某种原因它一直失败。

HANDLE GetProcessPid()

    DWORD pid = 0;
    wchar_t ProcessName[] = L"notepad.exe";

    // Create toolhelp snapshot.
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 process;
    ZeroMemory(&process, sizeof(process));
    process.dwSize = sizeof(process);

    // Walkthrough all processes.
    if (Process32First(snapshot, &process))
    
        do
        
            if (wcscmp(process.szExeFile, ProcessName) == 0)
            
                pid = process.th32ProcessID;
                break;
            
         while (Process32Next(snapshot, &process));
    

    CloseHandle(snapshot);

    if (pid != 0)
    
        return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    

    return NULL;

即使我在调用 OpenProcess 时手动设置了 pid,也总是返回 0xcccccccccccccccc 或 0x0000000000000020。

我尝试在 Visual Studio 内调试之外以管理员身份运行并获得相同的结果,搜索后,我认为我需要启用调试权限 (SeDebugPrivilege),我该如何在 Visual Studio 2013 中执行此操作?

【问题讨论】:

Google 上“SeDebugPrivilege”的前两个链接之一是 MSDN 上用于启用此权限的 C 代码。 现在进程句柄是 0x00000000000000b4 ,求助,process.th32ProcessID 是正确的 pid(我是 6508)。 根据文档,OpenProcess 的唯一错误返回值是NULL,所以如果这是真的,所有这三个结果都是有效的。 【参考方案1】:

你的代码很好,你只需要以管理员身份运行你的可执行文件就可以了,我刚刚测试过。

【讨论】:

以上是关于OpenProcess 失败(SeDebugPrivilege?)的主要内容,如果未能解决你的问题,请参考以下文章

OpenProcess 在 wait_cpu_usage_lower 中失败

c++ 使用 OpenProcess() 提升 .exe 的权限

VC++ 2008,OpenProcess 总是返回错误 5(拒绝访问)

delphi 提升openprocess权限

OpenProcess 错误 87 参数无效

openprocess提升为测试权限