Anteckning
Å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.
Om du aktiverar en behörighet i en åtkomsttoken kan processen utföra åtgärder på systemnivå som inte kunde utföras tidigare. Din applikation bör noggrant verifiera att privilegiet är lämpligt för kontotypen, särskilt för följande kraftfulla privilegier.
| Behörighetskonstant | Strängvärde | Visningsnamn | 
|---|---|---|
| SE_ASSIGNPRIMARYTOKEN_NAME | SeAssignPrimaryTokenPrivilege | Ersätt en token på processnivå | 
| SE_BACKUP_NAME | SeBackupPrivilege | Säkerhetskopiera filer och kataloger | 
| SE_DEBUG_NAME | SeDebugPrivilege | Felsöka program | 
| SE_INCREASE_QUOTA_NAME | SeÖkaKvantitetsPrivilegium | Justera minneskvoter för en process | 
| SE_TCB_NAME | SeTcbPrivilege | Agera som en del av operativsystemet | 
Innan du aktiverar någon av dessa potentiellt farliga privilegier ska du fastställa att funktioner eller åtgärder i koden faktiskt kräver behörigheterna. Till exempel kräver väldigt få funktioner i operativsystemet faktiskt SeTcbPrivilege. En lista över alla tillgängliga privilegier finns i Privilege Constants.
I följande exempel visas hur du aktiverar eller inaktiverar en behörighet i en åtkomsttoken. I exemplet anropas funktionen LookupPrivilegeValue för att hämta den lokalt unika identifieraren (LUID) som det lokala systemet använder för att identifiera behörigheten. Sedan anropar exemplet funktionen AdjustTokenPrivileges, som antingen aktiverar eller inaktiverar behörigheten som är beroende av värdet för parametern bEnablePrivilege.
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "advapi32.lib")
BOOL SetPrivilege(
    HANDLE hToken,          // access token handle
    LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
    BOOL bEnablePrivilege   // to enable or disable privilege
    ) 
{
    TOKEN_PRIVILEGES tp;
    LUID luid;
    if ( !LookupPrivilegeValue( 
            NULL,            // lookup privilege on local system
            lpszPrivilege,   // privilege to lookup 
            &luid ) )        // receives LUID of privilege
    {
        printf("LookupPrivilegeValue error: %u\n", GetLastError() ); 
        return FALSE; 
    }
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if (bEnablePrivilege)
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].Attributes = 0;
    // Enable the privilege or disable all privileges.
    if ( !AdjustTokenPrivileges(
           hToken, 
           FALSE, 
           &tp, 
           0, 
           (PTOKEN_PRIVILEGES) NULL, 
           (PDWORD) NULL) )
    { 
          printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); 
          return FALSE; 
    } 
    if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
    {
          printf("The token does not have the specified privilege. \n");
          return FALSE;
    } 
    return TRUE;
}