OpenProcess возвращает access_denied на 64-битной платформе - PullRequest
0 голосов
/ 13 мая 2009

У меня есть функция:

HANDLE snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

...

result=Process32First(snapshot,&pe);
while(result) {
  if(!_stricmp(process_name,pe.szExeFile)) {
    processes.push_back(pe.th32ProcessID);
  }
  result=Process32Next(snapshot,&pe);
}

for(dword_vector::iterator i=processes.begin(); i!=processes.end(); ++i){
  HANDLE hProcess=OpenProcess(PROCESS_TERMINATE, FALSE, *i);
  if(hProcess) {
    TerminateProcess(hProcess, 0);
    CloseHandle(hProcess);
  }
}

Отлично работает на 32-битной платформе, но на 64-битной платформе OpenProcess возвращает Access_denied для некоторых процессов (те же процессы на 32-битных могут быть вычислены нормально). Все процессы, которые я пытаюсь открыть, являются 32-битными.

В чем может быть проблема?

Ответы [ 4 ]

0 голосов
/ 07 ноября 2018

У меня было то же предположение с оп. После многих тестов я знаю, что причина процессов access_denied в том, что они находятся под пользователем SYSTEM, а не потому, что они 64-битные.

0 голосов
/ 13 мая 2009

Возможно, это действительно так, но вы выполняете код с сетевого диска? Я видел, что приложения .NET не могут выполнять очень простые вещи при запуске с сетевого диска.

Если это так, попробуйте переместить исполняемый файл на локальный диск и посмотрите, поможет ли это.

Да, я знаю, что это очень странное предложение, я просто полагаю, что это может помочь: -)

0 голосов
/ 10 ноября 2009

Является ли ваше приложение 64-битным или 32-битным процессом? Вы не можете открыть 64-битный процесс из 32-битного процесса.

Используйте диспетчер задач, чтобы убедиться, что ваше приложение 64-битное. Если нет, исправьте и скомпилируйте его как 64-битный, и вы сможете открыть другие 64-битные и 32-битные процессы.

Если ваше приложение 32-битное, это, вероятно, проблема с разрешениями. Попробуйте запустить его от имени администратора и посмотрите, решит ли это проблему.

0 голосов
/ 13 мая 2009

Может ли быть так, что пользователь, вошедший в систему на 64-битной платформе, не имеет прав для завершения этих процессов? например в Vista UAC активен, вы являетесь администратором, но не работаете с повышенными правами и пытаетесь закрыть системные процессы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...