Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Med felsökningsprivilegiet kan någon felsöka en process som de annars inte skulle ha åtkomst till. En process som körs som en användare med felsökningsbehörigheten aktiverad på sin token kan till exempel felsöka en tjänst som körs som lokalt system.
Felsökningsprivilegier är en säkerhetsprincipinställning som gör det möjligt för användare att koppla ett felsökningsprogram till en process eller till kerneln. En administratör kan ändra en säkerhetsprincip för en användargrupp för att inkludera eller ta bort den här funktionen. Utvecklare som felsöker sina egna program behöver inte den här användarbehörigheten. Utvecklare som felsöker systemkomponenter eller som felsöker fjärrkomponenter behöver den här användarbehörigheten. Den här användarbehörigheten ger fullständig åtkomst till känsliga och kritiska operativsystemkomponenter. Som standard är den här egenskapen aktiverad för användare med administratörsbehörighet. En användare med administratörsbehörighet kan aktivera den här egenskapen för andra användargrupper.
Ändra felsökningsprivilegier för en process
I följande kodexempel visas hur du aktiverar felsökningsbehörigheten i processen. På så sätt kan du felsöka andra processer som du inte skulle ha åtkomst till annars.
//
// 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;
}
I följande exempel visas hur du använder den här funktionen:
HANDLE hProcess=GetCurrentProcess();
HANDLE hToken;
if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken))
{
SetPrivilege(hToken, SE_DEBUG_NAME, TRUE);
CloseHandle(hToken);
}