Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A Política LSA fornece duas funções que você pode usar para definir e recuperar dados privados. Esses dados são armazenados como uma cadeia de caracteres criptografada no registro. Por exemplo, você pode usar essas funções para armazenar senhas de conta de servidor e outras informações confidenciais.
Chame a função LsaStorePrivateData para armazenar e cifrar dados privados. Conforme descrito em Private Data Object, os objetos de dados privados incluem três tipos especializados: local, global e de máquina. Para criar um objeto especializado, adicione um prefixo ao nome da chave passado para LsaStorePrivateData: "L$" para objetos locais, "G$" para objetos globais e "M$" para objetos de máquina. Se você não estiver criando um desses tipos especializados, não precisará especificar um prefixo de nome de chave.
Para recuperar e decodificar dados privados armazenados anteriormente, ligue LsaRetrievePrivateData. Observe que não é possível recuperar objetos de dados privados da máquina; Os objetos de máquina podem ser recuperados apenas pelo sistema operacional.
Antes de armazenar ou recuperar dados privados, a sua aplicação deve obter um identificador para o objeto de política local, conforme demonstrado em Abrindo um Identificador de Objeto de Política.
O exemplo a seguir cria um objeto de dados privado local. Observe que a função InitLsaString converte uma cadeia de caracteresUnicodeem uma estrutura LSA_UNICODE_STRING. O código para esta função é mostrado em Usando LSA Unicode Strings.
#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;
}
Observação
Os dados armazenados pela função LsaStorePrivateData não estão absolutamente protegidos. A chave, no entanto, tem uma lista de controle de acesso discricionário (DACL) que permite que apenas o criador e os administradores leiam os dados.