儲存私人資料
LSA 原則提供兩個函式,可讓您用來設定和擷取私人資料。 此資料會儲存為登錄中的加密字串。 例如,您可以使用這些函式來儲存伺服器帳戶密碼和其他敏感性資訊。
呼叫 LsaStorePrivateData 函式來儲存和加密私人資料。 如 私人資料物件中所述,私人資料物件包含三種特殊類型:本機、全域和電腦。 若要建立特製化物件,請將前置詞新增至傳遞至 LsaStorePrivateData的索引鍵名稱:本機物件的 「L$」、全域物件的 「G$」,以及電腦物件的 「M$」。 如果您未建立其中一個特殊類型,則不需要指定索引鍵名稱前置詞。
若要擷取和解碼先前儲存的私人資料,請呼叫 LsaRetrievePrivateData。 請注意,您無法擷取電腦私人資料物件;電腦物件只能由作業系統擷取。
您必須先取得本機 Policy 物件的控制碼,才能儲存或擷取私人資料,如 開啟原則物件控制碼中所述。
下列範例會建立本機私人資料物件。 請注意,函數 InitLsaString 會將 Unicode 字串轉換成 LSA_UNICODE_STRING 結構。 此函式的程式碼會顯示在 使用 LSA Unicode 字串中。
#include <windows.h>
#include <stdio.h>
BOOL CreatePrivateDataObject(LSA_HANDLE PolicyHandle)
{
NTSTATUS ntsResult;
LSA_UNICODE_STRING lucKeyName;
LSA_UNICODE_STRING lucPrivateData;
// The L$ prefix specifies a local private data object
WCHAR wszKeyName[] = L"L$MyPrivateKey";
WCHAR wszPrivateData[] = L"Something secret.";
// Initializing PLSA_UNICODE_STRING structures
if (!InitLsaString(&lucKeyName, wszKeyName))
{
wprintf(L"Failed InitLsaString\n");
return FALSE;
}
if (!InitLsaString(&lucPrivateData, wszPrivateData))
{
wprintf(L"Failed InitLsaString\n");
return FALSE;
}
// Store the private data.
ntsResult = LsaStorePrivateData(
PolicyHandle, // handle to a Policy object
&lucKeyName, // key to identify the data
&lucPrivateData // the private data
);
if (ntsResult != STATUS_SUCCESS)
{
wprintf(L"Store private object failed %lu\n",
LsaNtStatusToWinError(ntsResult));
return FALSE;
}
return TRUE;
}
注意
LsaStorePrivateData函式所儲存的資料不會受到絕對保護。 不過,金鑰具有 選擇性存取控制清單 (DACL) ,只允許建立者和系統管理員讀取資料。