其他用户帐户上的OpenProcess iexplore.exe因访问被拒绝而失败

时间:2012-07-19 00:07:01

标签: c++ winapi openprocess

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

这是我正在使用的debug priv:

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中。我需要一个与我要求不同的特权。

1 个答案:

答案 0 :(得分:0)

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