Membuka Gagang Objek Kebijakan

Sebagian besar fungsi Kebijakan LSA memerlukan handel ke objek Policy agar sistem mengkueri atau memodifikasi. Untuk mendapatkan handel ke objek Policy , panggil LsaOpenPolicy dan tentukan nama sistem yang ingin Anda akses dan kumpulan izin akses yang diperlukan.

Izin akses yang diperlukan untuk aplikasi Anda bergantung pada tindakan yang dilakukannya. Untuk detail tentang izin yang diperlukan untuk setiap fungsi, lihat deskripsi fungsi tersebut dalam Fungsi Kebijakan LSA.

Jika panggilan ke LsaOpenPolicy berhasil, panggilan mengembalikan handel ke objek Policy untuk sistem yang ditentukan. Aplikasi Anda kemudian meneruskan handel ini dalam panggilan fungsi Kebijakan LSA berikutnya. Ketika aplikasi Anda tidak lagi membutuhkan handel, aplikasi harus memanggil LsaClose untuk membebaskannya.

Contoh berikut menunjukkan cara membuka handel objek 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;
}

Dalam contoh sebelumnya, aplikasi meminta hak istimewa POLICY_ALL_ACCESS. Untuk detail tentang izin mana yang harus diminta aplikasi Anda saat memanggil LsaOpenPolicy, lihat deskripsi fungsi yang akan ditangani oleh aplikasi Anda ke objek Policy .

Untuk membuka handel ke objek Policy dari domain tepercaya, panggil LsaCreateTrustedDomainEx (untuk membuat hubungan kepercayaan baru dengan domain) atau panggil LsaOpenTrustedDomainByName (untuk mengakses domain tepercaya yang ada). Kedua fungsi ini mengatur penunjuk ke LSA_HANDLE, yang kemudian dapat Anda tentukan dalam panggilan fungsi Kebijakan LSA berikutnya. Seperti halnya LsaOpenPolicy, aplikasi Anda harus memanggil LsaClose ketika tidak lagi memerlukan handel ke objek Kebijakan domain tepercaya.