共用方式為


儲存私人數據

LSA 策略提供兩個函式,可讓您用來設定和擷取私密資料。 此資料會儲存為登錄中的加密字串。 例如,您可以使用這些函式來儲存伺服器帳戶密碼和其他敏感性資訊。

呼叫 LsaStorePrivateData 函式來儲存和加密私人數據。 如 Private Data Object中所述,私人數據物件包含三種特製化類型:本機、全域和計算機。 若要建立特製化物件,請在傳遞給 LsaStorePrivateData的鍵名前加上前置詞:“L$” 代表本機物件,“G$” 代表全域物件,以及 “M$” 代表機器物件。 如果您未建立下列其中一個特製化類型,則不需要指定索引鍵名稱前置詞。

若要擷取和譯碼先前儲存的私人數據,請呼叫 LsaRetrievePrivateData。 請注意,您無法擷取電腦私人數據物件;機器物件只能由作系統擷取。

在您能夠儲存或擷取私人數據之前,您的應用程式必須取得本機 政策 物件的控制代碼,如 開啟政策物件控制代碼所示。

下列範例會建立本機私人數據物件。 請注意,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),只允許建立者和系統管理員讀取資料。