2009-07-31 5 views
2

J'utilise le code suivant (qui est un exemple du MSDN légèrement modifié) pour vérifier si j'ai des privilèges de débogage sur un processus. Si je ne le fais pas, j'essaie de les définir.Ajuster les jetons sur les comptes non privilégiés (C, Windows)

int SetDebugPriv() 
{ 
    HANDLE TokenHandle; 
    LUID lpLuid; 
    TOKEN_PRIVILEGES NewState; 

    if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &TokenHandle)) 
    { 
     //failed 
     return 0; 
    } 

    if(!LookupPrivilegeValue(NULL, "SeDebugPrivilege" , &lpLuid)) 
    { 
     //failed 
     CloseHandle(TokenHandle); 
     return 0; 
    } 

    NewState.PrivilegeCount = 1; 
    NewState.Privileges[0].Luid = lpLuid; 
    NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 

    if(!AdjustTokenPrivileges(TokenHandle, FALSE, &NewState, sizeof(NewState), NULL, NULL)) 
    { 
     //failed 
     CloseHandle(TokenHandle); 
     return 0; 
    } 

    CloseHandle(TokenHandle); 
    return 1; 
} 

Maintenant, sous certains compte sur Windows XP et 2003, je reçois une erreur d'accès refusé lors d'une tentative de mettre le jeton. Je suppose que je ne peux pas définir ce jeton spécifique parce que je n'ai pas la permission de le faire. Comment définir le jeton de débogage sur les comptes non administrateurs ou les comptes disposant de privilèges faibles?

le code est apprécié.

merci

Répondre

6

Vous ne pouvez pas. Si vous le pouviez, ce serait un énorme trou de sécurité (SeDebugPrivilege a plus de mojo que l'administrateur). AdjustTokenPrivileges active un privilège que le jeton a, mais qui n'est pas activé. Par exemple, SeShutdownPrivilege en fait partie.

Vous devez ajouter le privilège au compte d'utilisateur, puis l'utilisateur doit se déconnecter et se reconnecter (pour obtenir un nouveau jeton avec le privilège).

Pour ajouter les privilèges au compte utilisateur par programme, commencez par ceci: http://support.microsoft.com/kb/132958

+0

grand merci – wonderer

Questions connexes