Freigeben über


Öffnen eines Richtlinienobjekthandles

Die meisten LSA-Richtlinienfunktionen erfordern ein Handle für das Policy-Objekt , damit das System abfragen oder ändern kann. Um ein Handle für ein Policy-Objekt abzurufen, rufen Sie LsaOpenPolicy auf, und geben Sie den Namen des Systems an, auf das Sie zugreifen möchten, und den erforderlichen Satz von Zugriffsberechtigungen.

Die für Ihre Anwendung erforderlichen Zugriffsberechtigungen hängen von den ausgeführten Aktionen ab. Ausführliche Informationen zu den Berechtigungen, die für jede Funktion erforderlich sind, finden Sie in der Beschreibung dieser Funktion in LSA-Richtlinienfunktionen.

Wenn der Aufruf von LsaOpenPolicy erfolgreich ist, wird ein Handle an das Policy-Objekt für das angegebene System zurückgegeben. Ihre Anwendung übergibt dieses Handle dann in nachfolgenden Aufrufen der LSA-Richtlinienfunktion. Wenn Ihre Anwendung das Handle nicht mehr benötigt, sollte sie LsaClose aufrufen, um es frei zu machen.

Das folgende Beispiel zeigt, wie sie ein Policy-Objekthandle öffnen.

#include <windows.h>

#define TARGET_SYSTEM_NAME L"mysystem"

LSA_HANDLE GetPolicyHandle()
{
  LSA_OBJECT_ATTRIBUTES ObjectAttributes;
  WCHAR SystemName[] = TARGET_SYSTEM_NAME;
  USHORT SystemNameLength;
  LSA_UNICODE_STRING lusSystemName;
  NTSTATUS ntsResult;
  LSA_HANDLE lsahPolicyHandle;

  // Object attributes are reserved, so initialize to zeros.
  ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes));

  //Initialize an LSA_UNICODE_STRING to the server name.
  SystemNameLength = wcslen(SystemName);
  lusSystemName.Buffer = SystemName;
  lusSystemName.Length = SystemNameLength * sizeof(WCHAR);
  lusSystemName.MaximumLength = (SystemNameLength+1) * sizeof(WCHAR);

  // Get a handle to the Policy object.
  ntsResult = LsaOpenPolicy(
        &lusSystemName,    //Name of the target system.
        &ObjectAttributes, //Object attributes.
        POLICY_ALL_ACCESS, //Desired access permissions.
        &lsahPolicyHandle  //Receives the policy handle.
    );

  if (ntsResult != STATUS_SUCCESS)
  {
    // An error occurred. Display it as a win32 error code.
    wprintf(L"OpenPolicy returned %lu\n",
      LsaNtStatusToWinError(ntsResult));
    return NULL;
  } 
  return lsahPolicyHandle;
}

Im vorherigen Beispiel hat die Anwendung POLICY_ALL_ACCESS Berechtigungen angefordert. Ausführliche Informationen zu den Berechtigungen, die Ihre Anwendung beim Aufrufen von LsaOpenPolicy anfordern sollte, finden Sie in den Beschreibungen der Funktionen, an die Ihre Anwendung das Policy-Objekthandle übergeben wird.

Um ein Handle für das Policy-Objekt einer vertrauenswürdigen Domäne zu öffnen, rufen Sie LsaCreateTrustedDomainEx auf (um eine neue Vertrauensstellung mit einer Domäne zu erstellen), oder rufen Sie LsaOpenTrustedDomainByName auf (um auf eine vorhandene vertrauenswürdige Domäne zuzugreifen). Beide Funktionen legen einen Zeiger auf eine LSA_HANDLE fest, die Sie dann in nachfolgenden Aufrufen der LSA-Richtlinienfunktion angeben können. Wie bei LsaOpenPolicy sollte Ihre Anwendung LsaClose aufrufen, wenn sie das Handle für das Policy-Objekt der vertrauenswürdigen Domäne nicht mehr benötigt.