VC ++ 2008, OpenProcess всегда возвращает ошибку 5 (доступ запрещен) - PullRequest
3 голосов
/ 04 октября 2008

Кто-нибудь знает, почему MSVC ++ 2008 всегда возвращает ошибку 5 в GetLastError (), когда я пытаюсь вызвать OpenProcess с PROCESS_ALL_ACCESS в качестве желаемого доступа? PROCESS_VM_READ работает просто отлично. Я администратор этого компьютера, и он отлично работает в Dev C ++.

Нужно ли где-то установить опцию?

Ответы [ 3 ]

7 голосов
/ 04 октября 2008

Открытие процесса с полными правами доступа может быть высокопривилегированной операцией, если это не процесс, выполняемый под вашими учетными данными или во время сеанса входа в систему - вам нужно следовать этой части документации MSDN:

Чтобы открыть дескриптор другого процесса и получить полные права доступа, вы должен включить SeDebugPrivilege привилегия. Для получения дополнительной информации см. Изменение привилегий в токене.

Помните, что даже если у вас есть привилегия, в большинстве случаев эта привилегия не включена - она ​​должна быть специально включена в коде, который пытается использовать эту привилегию.

3 голосов
/ 04 октября 2008

Еще одна вещь, которая может быть причиной этого, является новой для Vista:

В Windows Vista представлены защищенные процессы для усиления поддержки Управление цифровыми правами. Система ограничивает доступ к защищенным процессы и темы защищены процессы.

Следующие стандартные права доступа не допускаются из процесса в защищенный процесс:

DELETE READ_CONTROL WRITE_DAC WRITE_OWNER

0 голосов
/ 04 октября 2008

Какой это процесс? Открытие службы или процесса в другом сеансе пользователя может привести к отказу в доступе (5). Процесс в другом сеансе откроется для чтения, но вы не сможете его отладить. Это одна из причин, по которой Windbg обладает ненавязчивой привязанностью. Это работает через пользовательские сессии. Вы на самом деле не отлаживаете. Он приостанавливает все потоки и читает память.

...