OpenProcess iexplore.exe на других учетных записях пользователей завершается неудачно с отказом в доступе

Я работаю над перечислением экземпляров 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 вместо этого. И мне нужна была другая привилегия, чем я просил.

1 ответ

В Windows Vista и более поздних версиях IE работает в защищенном режиме как процесс с низким уровнем интеграции. Согласно MSDN, незащищенные процессы имеют ограниченный доступ к защищенным процессам, в том числе PROCESS_QUERY_INFORMATION а также PROCESS_VM_READ прав.

Другие вопросы по тегам