정책 개체 핸들 열기
대부분의 LSA Policy 함수는 시스템에서 쿼리하거나 수정하기 위해 Policy 개체에 대한 핸들이 필요합니다. Policy 개체에 대한 핸들을 가져오려면 LsaOpenPolicy를 호출하고 액세스하려는 시스템의 이름과 필요한 액세스 권한 집합을 지정합니다.
애플리케이션에 필요한 액세스 권한은 수행하는 작업에 따라 달라집니다. 각 함수에 필요한 권한에 대한 자세한 내용은 LSA 정책 함수에서 해당 함수에 대한 설명을 참조하세요.
LsaOpenPolicy 호출에 성공하면 지정된 시스템의 Policy 개체에 대한 핸들을 반환합니다. 그러면 애플리케이션이 후속 LSA Policy 함수 호출에서 이 핸들을 전달합니다. 애플리케이션에 더 이상 핸들이 필요하지 않은 경우 LsaClose 를 호출하여 해제해야 합니다.
다음 예제에서는 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;
}
앞의 예제에서 애플리케이션은 POLICY_ALL_ACCESS 권한을 요청했습니다. LsaOpenPolicy를 호출할 때 애플리케이션이 요청해야 하는 권한에 대한 자세한 내용은 애플리케이션이 Policy 개체 핸들을 전달할 함수에 대한 설명을 참조하세요.
신뢰할 수 있는 도메인의 Policy 개체에 대한 핸들을 열려면 LsaCreateTrustedDomainEx (도메인과 새 트러스트 관계를 만들려면)를 호출하거나 LsaOpenTrustedDomainByName 을 호출하여 신뢰할 수 있는 기존 도메인에 액세스합니다. 이러한 두 함수는 모두 LSA_HANDLE 대한 포인터를 설정하며, 이후 LSA Policy 함수 호출에서 지정할 수 있습니다. LsaOpenPolicy와 마찬가지로 애플리케이션은 신뢰할 수 있는 도메인의 Policy 개체에 대한 핸들이 더 이상 필요하지 않은 경우 LsaClose를 호출해야 합니다.