Bagikan melalui


Mengelola Izin Akun

LSA menyediakan beberapa fungsi yang dapat dipanggil aplikasi untuk menghitung atau mengatur hak istimewa untuk akun pengguna, grup, dan grup lokal.

Sebelum Anda dapat mengelola informasi akun, aplikasi Anda harus mendapatkan handel ke objek Kebijakan lokal, seperti yang ditunjukkan dalam Membuka Penanganan Objek Kebijakan. Selain itu, untuk menghitung atau mengedit izin untuk akun, Anda harus memiliki pengidentifikasi keamanan (SID) untuk akun tersebut. Aplikasi Anda dapat menemukan SID yang diberi nama akun, seperti yang dijelaskan dalam Menerjemahkan Antara Nama dan SID.

Untuk mengakses semua akun yang memiliki izin tertentu, hubungi LsaEnumerateAccountsWithUserRight. Fungsi ini mengisi array dengan SID semua akun yang memiliki izin yang ditentukan.

Setelah mendapatkan SID akun, Anda dapat mengubah izinnya. Hubungi LsaAddAccountRights untuk menambahkan izin ke akun. Jika akun yang ditentukan tidak ada, LsaAddAccountRights membuatnya. Untuk menghapus izin dari akun, panggil LsaRemoveAccountRights. Jika Anda menghapus semua izin dari akun, LsaRemoveAccountRights juga menghapus akun.

Aplikasi Anda dapat memeriksa izin yang saat ini ditetapkan ke akun dengan memanggil LsaEnumerateAccountRights. Fungsi ini mengisi array struktur LSA_UNICODE_STRING . Setiap struktur berisi nama hak istimewa yang dipegang oleh akun yang ditentukan.

Contoh berikut menambahkan izin SeServiceLogonRight ke akun. Dalam contoh ini, variabel AccountSID menentukan SID akun. Untuk informasi selengkapnya tentang cara mencari SID akun, lihat Menerjemahkan Antara Nama dan SID.

#include <windows.h>
#include <ntsecapi.h>

void AddPrivileges(PSID AccountSID, LSA_HANDLE PolicyHandle)
{
  LSA_UNICODE_STRING lucPrivilege;
  NTSTATUS ntsResult;

  // Create an LSA_UNICODE_STRING for the privilege names.
  if (!InitLsaString(&lucPrivilege, L"SeServiceLogonRight"))
  {
         wprintf(L"Failed InitLsaString\n");
         return;
  }

  ntsResult = LsaAddAccountRights(
    PolicyHandle,  // An open policy handle.
    AccountSID,    // The target SID.
    &lucPrivilege, // The privileges.
    1              // Number of privileges.
  );                
  if (ntsResult == STATUS_SUCCESS) 
  {
    wprintf(L"Privilege added.\n");
  }
  else
  {
    wprintf(L"Privilege was not added - %lu \n",
      LsaNtStatusToWinError(ntsResult));
  }
} 

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