Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Привилегия отладки позволяет отлаживать процесс, к которому у него в противном случае не было бы доступа. Например, процесс, выполняющийся от имени пользователя с привилегией отладки, включенным для маркера, может отлаживать службу, запущенную от имени локальной системы.
Привилегия отладки — это параметр политики безопасности, который позволяет пользователям подключать отладчик к процессу или ядру. Администратор может изменить политику безопасности для группы пользователей, чтобы включить или удалить эту функцию. Разработчикам, которые выполняют отладку собственных приложений, эта привилегия пользователя не требуется. Разработчикам, которые выполняют отладку системных компонентов или выполняют отладку удаленных компонентов, потребуется эта привилегия пользователя. Эта привилегия пользователя обеспечивает полный доступ к конфиденциальным и критически важным компонентам операционной системы. По умолчанию это свойство включено для пользователей с правами администратора. Пользователь с правами администратора может включить это свойство для других групп пользователей.
Изменение прав отладки для процесса
В следующем примере кода показано, как включить привилегию отладки в процессе. Это позволяет отлаживать другие процессы, к которым в противном случае у вас не было бы доступа.
//
// SetPrivilege enables/disables process token privilege.
//
BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege)
{
LUID luid;
BOOL bRet=FALSE;
if (LookupPrivilegeValue(NULL, lpszPrivilege, &luid))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=luid;
tp.Privileges[0].Attributes=(bEnablePrivilege) ? SE_PRIVILEGE_ENABLED: 0;
//
// Enable the privilege or disable all privileges.
//
if (AdjustTokenPrivileges(hToken, FALSE, &tp, NULL, (PTOKEN_PRIVILEGES)NULL, (PDWORD)NULL))
{
//
// Check to see if you have proper access.
// You may get "ERROR_NOT_ALL_ASSIGNED".
//
bRet=(GetLastError() == ERROR_SUCCESS);
}
}
return bRet;
}
В следующем примере показано, как использовать эту функцию:
HANDLE hProcess=GetCurrentProcess();
HANDLE hToken;
if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken))
{
SetPrivilege(hToken, SE_DEBUG_NAME, TRUE);
CloseHandle(hToken);
}