Öffnen eines Richtlinienobjekthandpunkts

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 zu erhalten, rufen Sie LsaOpenPolicy auf, und geben Sie den Namen des Systems, auf das Sie zugreifen möchten, und den Satz der erforderlichen Zugriffsberechtigungen an.

Welche Zugriffsberechtigungen für Ihre Anwendung erforderlich sind, hängt von den aktionen ab, die sie ausführt. Ausführliche Informationen zu den berechtigungen, die für jede Funktion erforderlich sind, finden Sie in der Beschreibung dieser Funktion in LSA Policy Functions.

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

Das folgende Beispiel zeigt, wie sie ein Policy-Objekthand handle ö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 die BERECHTIGUNGEN POLICY _ ALL _ ACCESS angefordert. Ausführliche Informationen dazu, welche Berechtigungen Ihre Anwendung beim Aufrufen von LsaOpenPolicyanfordern soll, finden Sie in den Beschreibungen der Funktionen, an die Ihre Anwendung das Handle des Policy-Objekts übergehen 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 zu zugreifen). Beide Funktionen legen einen Zeiger auf ein LSA _ HANDLEfest, das Sie dann in nachfolgenden LSA Policy-Funktionsaufrufen angeben können. Wie bei LsaOpenPolicysollte Ihre Anwendung LsaClose aufrufen, wenn sie das Handle für das Policy-Objekt der vertrauenswürdigen Domäne nicht mehr benötigt.