Udostępnij za pośrednictwem


Otwieranie uchwytu obiektu polityki

Większość funkcji polityki LSA wymaga dojścia do obiektu polityki , aby system mógł wysyłać zapytania lub wprowadzać zmiany. Aby uzyskać dojście do obiektu zasad, wywołaj LsaOpenPolicy i określ nazwę systemu, do którego chcesz uzyskać dostęp, oraz wymagany zestaw uprawnień dostępu.

Uprawnienia dostępu wymagane dla aplikacji zależą od akcji, które wykonuje. Aby uzyskać szczegółowe informacje o uprawnieniach wymaganych dla każdej funkcji, zobacz opis tej funkcji w funkcji zasad LSA.

Jeśli wywołanie LsaOpenPolicy zakończy się pomyślnie, zwraca uchwyt do obiektu Policy dla określonego systemu. Następnie aplikacja przekazuje ten uchwyt w kolejnych wywołaniach funkcji zasad LSA. Gdy aplikacja nie potrzebuje już dojścia (handle), powinna wywołać LsaClose, aby je zwolnić.

Na poniższym przykładzie pokazano, jak otworzyć dojście do obiektu polityki .

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

W poprzednim przykładzie aplikacja zażądała POLICY_ALL_ACCESS uprawnień. Aby uzyskać szczegółowe informacje o uprawnieniach, których aplikacja powinna żądać podczas wywoływania LsaOpenPolicy, zobacz opisy funkcji, do których aplikacja przekaże dojście obiektu Policy.

Aby otworzyć dojście do obiektu polityki zaufanej domeny, wywołaj LsaCreateTrustedDomainEx (aby utworzyć nową relację zaufania z domeną) lub wywołaj LsaOpenTrustedDomainByName (aby uzyskać dostęp do istniejącej zaufanej domeny). Obie te funkcje ustawiają wskaźnik na LSA_HANDLE, który można następnie określić w kolejnych wywołaniach funkcji zasad LSA. Podobnie jak w przypadku LsaOpenPolicy, aplikacja powinna wywołać LsaClose, gdy nie potrzebuje już dojścia do obiektu zasad zaufanej domeny.