다음을 통해 공유


개인 데이터 저장

LSA 정책은 개인 데이터를 설정하고 검색하는 데 사용할 수 있는 두 가지 함수를 제공합니다. 이 데이터는 레지스트리에 암호화된 문자열로 저장됩니다. 예를 들어 이러한 함수를 사용하여 서버 계정 암호 및 기타 중요한 정보를 저장할 수 있습니다.

LsaStorePrivateData 함수를 호출하여 개인 데이터를 저장하고 암호화합니다. 프라이빗 데이터 개체에 설명된 대로 프라이빗 데이터 개체에는 로컬, 전역 및 컴퓨터의 세 가지 특수 형식이 포함됩니다. 특수화된 개체를 만들려면 LsaStorePrivateData에 전달된 키 이름에 접두사를 추가합니다. 로컬 개체의 경우 "L$", 전역 개체의 경우 "G$", 컴퓨터 개체의 경우 "M$"을 추가합니다. 이러한 특수 형식 중 하나를 만들지 않는 경우 키 이름 접두사를 지정할 필요가 없습니다.

이전에 저장된 프라이빗 데이터를 검색하고 디코딩하려면 LsaRetrievePrivateData를 호출합니다. 컴퓨터 프라이빗 데이터 개체는 검색할 수 없습니다. 컴퓨터 개체는 운영 체제에서만 검색할 수 있습니다.

프라이빗 데이터를 저장하거나 검색하려면 먼저 애플리케이션이 정책 개체 핸들 열기에 설명된 대로 로컬 정책 개체에 대한 핸들을 가져와야 합니다.

다음 예제에서는 로컬 프라이빗 데이터 개체를 만듭니다. InitLsaString 함수는 유니코드 문자열을 LSA_UNICODE_STRING 구조체로 변환합니다. 이 함수의 코드는 LSA 유니코드 문자열 사용에 표시됩니다.

#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( 임의 액세스 제어 목록 )이 있습니다.