LsaQueryInformationPolicy ポリシオブジェクトの情報を取得

Cの宣言:

NTSTATUS LsaQueryInformationPolicy(
	IN LSA_HANDLE hPolicy,
	IN POLICY_INFORMATION_CLASS InfoClass,
	OUT PVOID *Info);

説明:

ポリシオブジェクトの情報を取得する。

本関数の実行に必要なアクセス権はInfoClassに依存する。

引数の意味は以下の通り。
hPolicy ポリシオブジェクトのハンドル。
InfoClass 取得する情報の種別を指定するフラグ。後述の表を参照。
Info 取得結果の情報。

InfoClassには以下のいずれかのフラグを指定可能。
PolicyAuditLogInformation POLICY_AUDIT_LOG_INFOを取得。
PolicyAuditEventsInformation POLICY_AUDIT_EVENTS_INFOを取得。
PolicyPrimaryDomainInformation POLICY_PRIMARY_DOMAIN_INFOを取得。
PolicyAccountDomainInformation POLICY_ACCOUNT_DOMAIN_INFOを取得。
PolicyPdAccountInformation POLICY_PD_ACCOUNT_INFOを取得。
PolicyLsaServerRoleInformation POLICY_LSA_SERVER_ROLE_INFOを取得。
PolicyReplicaSourceInformation POLICY_REPLICA_SOURCE_INFOを取得。
PolicyDefaultQuotaInformation POLICY_DEFAULT_QUOTA_INFOを取得。
PolicyAuditFullQueryInformation POLICY_AUDIT_FULL_QUERY_INFOを取得。

戻り値はエラーコードである。

Cのサンプル:

LsaQueryInformationPolicyを指定して、hogehogeというサーバがプライマリサーバかバックアップサーバかを判定する。
void DispServerType(void)
{
	LSA_HANDLE hPolicy;
	LSA_OBJECT_ATTRIBUTES Attr;
	SECURITY_QUALITY_OF_SERVICE Quality;
	LPWSTR SystemName = L"hogehoge";
	LSA_UNICODE_STRING LsaSystemName;

	PPOLICY_LSA_SERVER_ROLE_INFO pRoleInfo;

	LsaSystemName.Buffer = SystemName;
	LsaSystemName.Length = lstrlen(SystemName) * sizeof(WCHAR);
	LsaSystemName.MaximumLength = (lstrlen(SystemName) + 1) * sizeof(WCHAR);

	Attr.Length = sizeof(Attr);
	Attr.RootDirectory = NULL;
	Attr.ObjectName = NULL;
	Attr.Attributes = 0;
	Attr.SecurityDescriptor = NULL;
	Attr.SecurityQualityOfService = &Quality;

	Quality.Length = sizeof(Quality);
	Quality.ImpersonationLevel = SecurityImpersonation;
	Quality.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
	Quality.EffectiveOnly = FALSE;

	/* ポリシオブジェクトのオープン */
	Status = LsaOpenPolicy(&LsaSystemName, &Attr, POLICY_VIEW_LOCAL_INFORMATION, &hPolicy);
	wprintf(L"LsaOpenPolicy result: %d\n", LsaNtStatusToWinError(Status));

	/* サーバの種別を取得 */
	LsaQueryInformationPolicy(
		hPolicy,
		PolicyLsaServerRoleInformation,
		&pRoleInfo);

	/* 取得結果を表示 */
	switch(pRoleInfo->LsaServerRole) {
	case PolicyServerRoleBackup:
		wprintf(L"backup server.\n");
		break;
	case PolicyServerRolePrimary:
		wprintf(L"primary server.\n");
		break;
	default:
		wprintf(L"unknown.\n");
		break;
	}

	/* 後処理 */
	LsaFreeMemory(pRoleInfo);
	LsaClose(hPolicy);
}

(original text:1999/05/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。