Gestione delle autorizzazioni dell'account

LSA fornisce diverse funzioni che le applicazioni possono chiamare per enumerare o impostare privilegi per gli account utente, gruppo e gruppo locale.

Prima di poter gestire le informazioni sull'account, l'applicazione deve ottenere un handle per l'oggetto Criteri locale, come illustrato in Apertura di un handle oggetto Criteri. Inoltre, per enumerare o modificare le autorizzazioni per un account, è necessario disporre dell'identificatore di sicurezza (SID) per tale account. L'applicazione può individuare un SID in base al nome dell'account, come descritto in Traduzione tra nomi e SID.

Per accedere a tutti gli account che dispongono di una determinata autorizzazione, chiamare LsaEnumerateAccountsWithUserRight. Questa funzione popola una matrice con i SID di tutti gli account che dispongono dell'autorizzazione specificata.

Dopo aver ottenuto il SID di un account, è possibile modificarne le autorizzazioni. Chiamare LsaAddAccountRights per aggiungere autorizzazioni all'account. Se l'account specificato non esiste, LsaAddAccountRights lo crea. Per rimuovere le autorizzazioni da un account, chiamare LsaRemoveAccountRights. Se si rimuovono tutte le autorizzazioni da un account, LsaRemoveAccountRights elimina anche l'account.

L'applicazione può controllare le autorizzazioni attualmente assegnate a un account chiamando LsaEnumerateAccountRights. Questa funzione popola una matrice di strutture LSA_UNICODE_STRING . Ogni struttura contiene il nome di un privilegio mantenuto dall'account specificato.

Nell'esempio seguente viene aggiunta l'autorizzazione SeServiceLogonRight a un account. In questo esempio la variabile AccountSID specifica il SID dell'account. Per altre informazioni su come cercare un SID dell'account, vedere Conversione tra nomi e SID.

#include <windows.h>
#include <ntsecapi.h>

void AddPrivileges(PSID AccountSID, LSA_HANDLE PolicyHandle)
{
  LSA_UNICODE_STRING lucPrivilege;
  NTSTATUS ntsResult;

  // Create an LSA_UNICODE_STRING for the privilege names.
  if (!InitLsaString(&lucPrivilege, L"SeServiceLogonRight"))
  {
         wprintf(L"Failed InitLsaString\n");
         return;
  }

  ntsResult = LsaAddAccountRights(
    PolicyHandle,  // An open policy handle.
    AccountSID,    // The target SID.
    &lucPrivilege, // The privileges.
    1              // Number of privileges.
  );                
  if (ntsResult == STATUS_SUCCESS) 
  {
    wprintf(L"Privilege added.\n");
  }
  else
  {
    wprintf(L"Privilege was not added - %lu \n",
      LsaNtStatusToWinError(ntsResult));
  }
} 

Nell'esempio precedente, la funzione InitLsaString converte una stringa Unicode in una struttura LSA_UNICODE_STRING . Il codice per questa funzione è illustrato in Uso di stringhe Unicode LSA.