LsaQueryInformationPolicyの例(C言語)

説明:

LsaQueryInformationPolicyを指定して、hogehogeというサーバがプライマリサーバかバックアップサーバかを判定する。

キーワード:

LsaOpenPolicy, LsaQueryInformationPolicy, LsaFreeMemory, LsaClose

サンプルコード:

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 更新)

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