Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il privilegio di debug consente a un utente di eseguire il debug di un processo a cui non avrebbe altrimenti accesso. Ad esempio, un processo in esecuzione come utente con il privilegio di debug abilitato nel token può eseguire il debug di un servizio in esecuzione come sistema locale.
Il privilegio di debug è un'impostazione dei criteri di sicurezza che consente agli utenti di collegare un debugger a un processo o al kernel. Un amministratore può modificare un criterio di sicurezza per un gruppo di utenti da includere o rimuovere questa funzionalità. Gli sviluppatori che eseguono il debug delle proprie applicazioni non necessitano di questo privilegio utente. Gli sviluppatori che eseguono il debug di componenti di sistema o che eseguono il debug di componenti remoti avranno bisogno di questo privilegio utente. Questo privilegio utente fornisce l'accesso completo ai componenti sensibili e critici del sistema operativo. Per impostazione predefinita, questa proprietà è abilitata per gli utenti con diritti di amministratore. Un utente con privilegi di amministratore può abilitare questa proprietà per altri gruppi di utenti.
Modifica dei privilegi di debug per un processo
Nell'esempio di codice seguente viene illustrato come abilitare il privilegio di debug nel processo. In questo modo è possibile eseguire il debug di altri processi a cui non si avrebbe accesso in altro modo.
//
// 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;
}
L'esempio seguente illustra come usare questa funzione:
HANDLE hProcess=GetCurrentProcess();
HANDLE hToken;
if (OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken))
{
SetPrivilege(hToken, SE_DEBUG_NAME, TRUE);
CloseHandle(hToken);
}