LsaRetrievePrivateData LSA秘密の取得

Cの宣言:

NTSTATUS LsaRetrievePrivateData(
	IN LSA_HANDLE hPolicy,
	IN PLSA_UNICODE_STRING KeyName,
	OUT PLSA_UNICODE_STRING *PrivateData);

説明:

LSA秘密を取得する。

引数の意味は以下の通り。
hPolicy ポリシオブジェクトのハンドル。
KeyName キーの名前。
PrivateData 取得結果のLSA秘密。

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

Cのサンプル:

ローカルマシンとドメインコントローラ間のセキュアな通信チャネルに使用されるパスワードをLsaRetrievePrivateDataによって取得し、結果を表示する。
void TestPrivateData(void)
{
	LSA_HANDLE hPolicy;
	LSA_OBJECT_ATTRIBUTES Attr;
	SECURITY_QUALITY_OF_SERVICE Quality;

	LPWSTR KeyName = L"$MACHINE.ACC";
	LSA_UNICODE_STRING LsaKeyName;
	PLSA_UNICODE_STRING pResult;
	WCHAR msg[1000];

	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;

	/* ポリシオブジェクトのオープン */
	LsaOpenPolicy(NULL, &Attr, POLICY_READ, &hPolicy);

	/* パスワードの取得 */
	LsaKeyName.Buffer = KeyName;
	LsaKeyName.Length = lstrlen(KeyName) * sizeof(WCHAR);
	LsaKeyName.MaximumLength = (lstrlen(KeyName) + 1) * sizeof(WCHAR);

	LsaRetrievePrivateData(hPolicy, &LsaKeyName, &pResult);
	
	/* 結果の表示(プレーンテキストと仮定) */
	lstrcpyn(msg, pResult->Buffer, pResult->Length / sizeof(WCHAR) + 1);
	msg[pResult->Length / sizeof(WCHAR)] = '\0';
	wprintf(L"%s\n", msg); 

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

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

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