Freigeben über


Verwalten von Kontoberechtigungen

Der LSA bietet mehrere Funktionen, die Anwendungen aufrufen können, um Berechtigungen für Benutzer-, Gruppen- und lokale Gruppenkonten aufzulisten oder festzulegen.

Bevor Sie Kontoinformationen verwalten können, muss Ihre Anwendung ein Handle für das lokale Policy-Objekt erhalten, wie unter Öffnen eines Richtlinienobjekthandles veranschaulicht. Zum Auflisten oder Bearbeiten von Berechtigungen für ein Konto benötigen Sie außerdem den Sicherheitsbezeichner (Security Identifier , SID) für dieses Konto. Ihre Anwendung kann eine SID unter Angabe des Kontonamens finden, wie unter Übersetzen zwischen Namen und SIDs beschrieben.

Rufen Sie LsaEnumerateAccountsWithUserRight auf, um auf alle Konten zuzugreifen, die über eine bestimmte Berechtigung verfügen. Diese Funktion füllt ein Array mit den SIDs aller Konten auf, die über die angegebene Berechtigung verfügen.

Nachdem Sie die SID eines Kontos abgerufen haben, können Sie dessen Berechtigungen ändern. Rufen Sie LsaAddAccountRights auf, um dem Konto Berechtigungen hinzuzufügen. Wenn das angegebene Konto nicht vorhanden ist, wird es von LsaAddAccountRights erstellt. Um Berechtigungen aus einem Konto zu entfernen, rufen Sie LsaRemoveAccountRights auf. Wenn Sie alle Berechtigungen aus einem Konto entfernen, löscht LsaRemoveAccountRights auch das Konto.

Ihre Anwendung kann die Berechtigungen überprüfen, die einem Konto derzeit zugewiesen sind, indem sie LsaEnumerateAccountRights aufruft. Diese Funktion füllt ein Array von LSA_UNICODE_STRING Strukturen auf. Jede Struktur enthält den Namen einer Berechtigung, die vom angegebenen Konto gehalten wird.

Im folgenden Beispiel wird einem Konto die Berechtigung SeServiceLogonRight hinzugefügt. In diesem Beispiel gibt die AccountSID-Variable die SID des Kontos an. Weitere Informationen zum Suchen einer Konto-SID finden Sie unter Übersetzen zwischen Namen und SIDs.

#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));
  }
} 

Im vorherigen Beispiel konvertiert die Funktion InitLsaString eine Unicode-Zeichenfolge in eine LSA_UNICODE_STRING-Struktur . Der Code für diese Funktion wird unter Verwenden von LSA-Unicode-Zeichenfolgen angezeigt.