Menyimpan Data Privat
Kebijakan LSA menyediakan dua fungsi yang dapat Anda gunakan untuk mengatur dan mengambil data privat. Data ini disimpan sebagai string terenkripsi dalam registri. Misalnya, Anda dapat menggunakan fungsi-fungsi ini untuk menyimpan kata sandi akun server dan informasi sensitif lainnya.
Panggil fungsi LsaStorePrivateData untuk menyimpan dan mengenkripsi data privat. Seperti yang dijelaskan dalam Objek Data Privat, objek data privat mencakup tiga jenis khusus: lokal, global, dan mesin. Untuk membuat objek khusus, tambahkan awalan ke nama kunci yang diteruskan ke LsaStorePrivateData: "L$" untuk objek lokal, "G$" untuk objek global, dan "M$" untuk objek mesin. Jika Anda tidak membuat salah satu jenis khusus ini, Anda tidak perlu menentukan awalan nama kunci.
Untuk mengambil dan mendekode data privat yang disimpan sebelumnya, panggil LsaRetrievePrivateData. Perhatikan bahwa Anda tidak dapat mengambil objek data privat mesin; objek mesin hanya dapat diambil oleh sistem operasi.
Sebelum Anda dapat menyimpan atau mengambil data privat, aplikasi Anda harus mendapatkan handel ke objek Kebijakan lokal, seperti yang ditunjukkan dalam Membuka Penanganan Objek Kebijakan.
Contoh berikut membuat objek data privat lokal. Perhatikan bahwa fungsi InitLsaString mengonversi string Unicode menjadi struktur LSA_UNICODE_STRING . Kode untuk fungsi ini ditampilkan dalam Menggunakan 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;
}
Catatan
Data yang disimpan oleh fungsi LsaStorePrivateData tidak benar-benar dilindungi. Namun, kuncinya memiliki daftar kontrol akses diskresi (DACL) yang hanya memungkinkan pembuat dan administrator untuk membaca data.