2

我正在枚举所有用户的 iexplore.exe 实例。我能够获得机器上匹配进程的列表,但要识别用户,我需要使用 OpenProcess。这适用于我自己的实例,但即使使用以管理员身份运行和 EnableDebugPriv,我仍然会收到拒绝访问消息。我错过了什么吗?iexplore.exe 是否受到某种保护?

这是我用于调试权限的内容:

void EnableDebugPriv()
{
    HANDLE hToken;
    LUID luid;
    TOKEN_PRIVILEGES tkp;

    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);

    if (!::LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
    {
        wprintf(_T("ERROR %u\n"),GetLastError());
        CloseHandle(hToken); 
        return;
    }

    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Luid = luid;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    if (!::AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL))
    {
        wprintf(_T("ERROR %u\n"),GetLastError());
        CloseHandle(hToken); 
        return;
    }

    CloseHandle(hToken);
    wprintf(_T("Should have worked"));
}

运行此程序时不会发生错误。运行时出现 ACCESS DENIED 错误

hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_TERMINATE , FALSE, pe32.th32ProcessID );

对于不属于我的进程。“其他”用户是从控制面板以正常方式在这台机器上创建的标准和访客帐户。任何想法将不胜感激。我被困住了!最终我想为用户提供关闭应用程序的能力,但即使只有 PROCESS_QUERY_LIMITED_INFORMATION 它也会失败。我仍然需要检查这是否是除 IE 之外的其他应用程序的问题。

更新我最终得到了这个工作。错误出现在 OpenProcessToken 中。我需要不同于我要求的特权。

4

1 回答 1

0

在 Windows Vista 及更高版本上,IE 在保护模式下作为低完整性进程运行。 根据 MSDN,非受保护进程对受保护进程的访问受到限制,包括PROCESS_QUERY_INFORMATIONPROCESS_VM_READ权限。

于 2012-07-19T00:40:19.543 回答