Apertura di un handle di oggetti criteri

La maggior parte delle funzioni criteri LSA richiede un handle per l'oggetto Policy per il sistema per eseguire query o modificare. Per ottenere un handle a un oggetto Policy , chiamare LsaOpenPolicy e specificare il nome del sistema a cui si vuole accedere e il set di autorizzazioni di accesso necessarie.

Le autorizzazioni di accesso necessarie per l'applicazione dipendono dalle azioni eseguite. Per informazioni dettagliate sulle autorizzazioni necessarie per ogni funzione, vedere la descrizione di tale funzione in Funzioni dei criteri LSA.

Se la chiamata a LsaOpenPolicy ha esito positivo, restituisce un handle all'oggetto Policy per il sistema specificato. L'applicazione passa quindi questo handle nelle chiamate successive della funzione Criteri LSA. Quando l'applicazione non ha più bisogno dell'handle, deve chiamare LsaClose per liberarlo.

Nell'esempio seguente viene illustrato come aprire un handle dell'oggetto Policy .

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

Nell'esempio precedente l'applicazione ha richiesto POLICY_ALL_ACCESS privilegi. Per informazioni dettagliate sulle autorizzazioni richieste dall'applicazione quando si chiama LsaOpenPolicy, vedere le descrizioni delle funzioni a cui l'applicazione passerà l'handle dell'oggetto Policy .

Per aprire un handle all'oggetto Policy di un dominio attendibile, chiamare LsaCreateTrustedDomainEx (per creare una nuova relazione di trust con un dominio) o chiamare LsaOpenTrustedDomainByName (per accedere a un dominio attendibile esistente). Entrambe queste funzioni impostano un puntatore a un LSA_HANDLE, che è quindi possibile specificare nelle chiamate di funzione criteri LSA successive. Come per LsaOpenPolicy, l'applicazione deve chiamare LsaClose quando non necessita più dell'handle per l'oggetto Policy del dominio attendibile.