정책 정보 관리
LSA는 관리자가 로컬 컴퓨터 및 도메인에 대한 전역 정책 정보를 쿼리하고 설정하는 데 사용할 수 있는 함수를 제공합니다.
정책 정보를 관리하려면 먼저 애플리케이션이 정책 개체 핸들 열기에 설명된 대로 로컬 정책개체에 대한 핸들을 가져와야 합니다. 이 핸들은 정책 정보를 관리하는 함수에 필요합니다.
로컬 보안 정책에 대한 정보를 검색하려면 LsaQueryInformationPolicy를 호출합니다. 로컬 보안 정책을 설정하려면 LsaSetInformationPolicy를 호출합니다. POLICY_INFORMATION_CLASS 열거형에 대한 설명은 쿼리하거나 설정할 수 있는 정책 정보의 유형을 자세히 설명합니다.
다음 예제에서는 시스템의 Policy 개체에 대한 핸들을 지정하여 시스템의 계정 도메인 정보를 가져오는 방법을 보여 줍니다.
#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;
}