Bagikan melalui


Menerjemahkan Antara Nama dan SID

Otoritas Keamanan Lokal (LSA) menyediakan fungsi untuk menerjemahkan antara nama pengguna, grup, dan grup lokal dan nilai pengidentifikasi keamanan (SID) yang sesuai. Untuk menemukan nama akun, panggil fungsi LsaLookupNames . Fungsi ini mengembalikan SID sebagai pasangan indeks RID/Domain. Untuk mendapatkan SID sebagai elemen tunggal, panggil fungsi LsaLookupNames2 . Untuk menemukan SID, panggil LsaLookupSids.

Fungsi-fungsi ini dapat menerjemahkan informasi nama dan SID dari domain apa pun yang dipercaya oleh sistem lokal.

Sebelum Anda dapat menerjemahkan antara nama akun dan SID, aplikasi Anda harus mendapatkan handel ke objek Kebijakan lokal, seperti yang ditunjukkan dalam Membuka Penanganan Objek Kebijakan.

Contoh berikut mencari SID untuk akun, dengan nama akun.

void GetSIDInformation (LPWSTR AccountName,LSA_HANDLE PolicyHandle)
{
  LSA_UNICODE_STRING lucName;
  PLSA_TRANSLATED_SID ltsTranslatedSID;
  PLSA_REFERENCED_DOMAIN_LIST lrdlDomainList;
  LSA_TRUST_INFORMATION myDomain;
  NTSTATUS ntsResult;
  PWCHAR DomainString = NULL;

  // Initialize an LSA_UNICODE_STRING with the name.
  if (!InitLsaString(&lucName, AccountName))
  {
         wprintf(L"Failed InitLsaString\n");
         return;
  }

  ntsResult = LsaLookupNames(
     PolicyHandle,     // handle to a Policy object
     1,                // number of names to look up
     &lucName,         // pointer to an array of names
     &lrdlDomainList,  // receives domain information
     &ltsTranslatedSID // receives relative SIDs
  );
  if (STATUS_SUCCESS != ntsResult) 
  {
    wprintf(L"Failed LsaLookupNames - %lu \n",
      LsaNtStatusToWinError(ntsResult));
    return;
  }

  // Get the domain the account resides in.
  myDomain = lrdlDomainList->Domains[ltsTranslatedSID->DomainIndex];
  DomainString = (PWCHAR) LocalAlloc(LPTR, myDomain.Name.Length + 1);
  wcsncpy_s(DomainString,
     myDomain.Name.Length + 1, 
     myDomain.Name.Buffer, 
     myDomain.Name.Length);

  // Display the relative Id. 
  wprintf(L"Relative Id is %lu in domain %ws.\n",
    ltsTranslatedSID->RelativeId,
    DomainString);

  LocalFree(DomainString);
  LsaFreeMemory(ltsTranslatedSID);
  LsaFreeMemory(lrdlDomainList);
}

Dalam contoh sebelumnya, fungsi InitLsaString mengonversi string Unicode menjadi struktur LSA_UNICODE_STRING . Kode untuk fungsi ini ditampilkan dalam Menggunakan String LSA Unicode.

Catatan

Fungsi terjemahan ini terutama disediakan untuk digunakan oleh editor izin untuk menampilkan informasi daftar kontrol akses (ACL). Editor izin harus selalu memanggil fungsi-fungsi ini menggunakan objek Policy untuk sistem tempat nama atau pengidentifikasi keamanan SID berada. Ini memastikan bahwa sekumpulan domain tepercaya yang tepat direferensikan selama terjemahan.

 

Windows Access Control juga menyediakan fungsi yang melakukan terjemahan antara SID dan nama akun: LookupAccountName dan LookupAccountSid. Jika aplikasi Anda perlu mencari nama akun atau SID dan tidak menggunakan fungsionalitas Kebijakan LSA tambahan, gunakan fungsi Access Control Windows alih-alih fungsi Kebijakan LSA. Untuk informasi selengkapnya tentang fungsi-fungsi ini, lihat Access Control.