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
прав.