共用方式為


儲存私人資料

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) ,只允許建立者和系統管理員讀取資料。