Bagikan melalui


Mengelola Informasi Kebijakan

LSA menyediakan fungsi yang dapat digunakan administrator untuk mengkueri dan mengatur informasi kebijakan global untuk komputer lokal dan domain.

Sebelum Anda dapat mengelola informasi kebijakan, aplikasi Anda harus mendapatkan handle pada objek Kebijakan lokal, seperti yang ditunjukkan dalam Membuka Penanganan Objek Kebijakan. Handle ini diperlukan oleh fungsi yang mengelola informasi kebijakan.

Untuk mengambil informasi tentang kebijakan keamanan lokal, panggil LsaQueryInformationPolicy. Untuk mengatur kebijakan keamanan lokal, panggil LsaSetInformationPolicy. Deskripsi enumerasi POLICY_INFORMATION_CLASS merinci jenis informasi kebijakan yang dapat dikueri atau diatur.

Contoh berikut menunjukkan cara mendapatkan informasi domain akun sistem, dengan diberikannya handel ke objek Kebijakan untuk sistem.

#include <windows.h>

BOOL GetAccountDomainInfo(LSA_HANDLE PolicyHandle)
{
  NTSTATUS ntsResult = STATUS_SUCCESS;
  PPOLICY_ACCOUNT_DOMAIN_INFO pPADInfo = NULL;
  PWCHAR name = NULL;
  UINT nameSize;
  
  ntsResult = LsaQueryInformationPolicy(
    PolicyHandle,                   // Open handle to a Policy object.
    PolicyAccountDomainInformation, // The information to get.
    (PVOID *)&pPADInfo              // Storage for the information.
  );

  if (ntsResult == STATUS_SUCCESS)
  {  
    // There is no guarantee that the LSA_UNICODE_STRING buffer
    // is null-terminated, so copy the name to a buffer that is.
    nameSize =  pPADInfo->DomainName.Length + 1 * sizeof(WCHAR);
    name = (WCHAR *) LocalAlloc(LPTR, nameSize);
    if (!name)
    {
        wprintf(L"Failed LocalAlloc\n");
        exit(1);
    }
    wcsncpy_s(name, nameSize, pPADInfo->DomainName.Buffer,
        pPADInfo->DomainName.Length);
    wprintf(L"The account domain name is %ws\n", name);
    LocalFree(name);
    if (STATUS_SUCCESS != LsaFreeMemory(pPADInfo))
        wprintf(L"LsaFreeMemory error\n");
  }
  else
  {
    // Show the corresponding win32 error code.
    wprintf(
        L"Error obtaining account domain information - (win32) %lu\n",
        LsaNtStatusToWinError(ntsResult));
  }

  return !ntsResult;
}