Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zasady LSA udostępniają dwie funkcje, których można użyć do ustawiania i pobierania danych prywatnych. Te dane są przechowywane jako zaszyfrowany ciąg w rejestrze. Można na przykład użyć tych funkcji do przechowywania haseł kont serwera i innych poufnych informacji.
Wywołaj funkcję LsaStorePrivateData w celu przechowywania i szyfrowania danych prywatnych. Zgodnie z opisem w obiektów prywatnych danychobiekty danych prywatnych obejmują trzy wyspecjalizowane typy: lokalne, globalne i maszynowe. Aby utworzyć wyspecjalizowany obiekt, dodaj prefiks do nazwy klucza przekazanej do LsaStorePrivateData: "L$" dla obiektów lokalnych, "G$" dla obiektów globalnych i "M$" dla obiektów maszyny. Jeśli nie tworzysz jednego z tych wyspecjalizowanych typów, nie musisz określać prefiksu nazwy klucza.
Aby pobrać i zdekodować wcześniej przechowywane dane prywatne, wywołaj metodę LsaRetrievePrivateData. Należy pamiętać, że nie można pobrać obiektów danych prywatnych maszyny; obiekty maszyny mogą być pobierane tylko przez system operacyjny.
Aby można było przechowywać lub pobierać dane prywatne, aplikacja musi uzyskać dojście do lokalnego obiektu Policy, jak pokazano w Otwieranie dojścia obiektu zasad.
Poniższy przykład tworzy lokalny obiekt danych prywatnych. Należy pamiętać, że funkcja InitLsaString konwertuje ciągUnicodena strukturę LSA_UNICODE_STRING. Kod tej funkcji jest wyświetlany w części Używanie ciągów Unicode 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;
}
Notatka
Dane przechowywane przez funkcję LsaStorePrivateData nie są całkowicie chronione. Klucz ma jednak uznaniową listę kontroli dostępu (DACL), która umożliwia odczytywanie danych tylko twórcom i administratorom.