【问题标题】:OpenProcess iexplore.exe on other user accounts fails with Access Denied其他用户帐户上的 OpenProcess iexplore.exe 因拒绝访问而失败
【发布时间】:2012-07-18 03:01:15
【问题描述】:

我正在枚举所有用户的 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 中。而且我需要的特权与我要求的不同。

【问题讨论】:

  • 即使你设法让它工作,你打算用进程句柄做什么?
  • 嗨,我得到了这个工作。我需要它来定位进程的用户。
  • 如果您只想识别拥有该进程的用户,那么您根本不需要打开该进程。使用WTSEnumerateProcesses。它会一次性返回所有流程、它们的名称和所有者。
  • 哇,我什至不知道。太棒了。
  • 等等,显然 WTSEnumerateProcesses 在 XP 中是有限的。

标签: c++ winapi openprocess


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多