Bagikan melalui


Fungsi RtlCreateAcl (ntifs.h)

Rutinitas RtlCreateAcl membuat dan menginisialisasi daftar kontrol akses (ACL).

Sintaks

NTSYSAPI NTSTATUS RtlCreateAcl(
  [out] PACL  Acl,
  [in]  ULONG AclLength,
        ULONG AclRevision
);

Parameter

[out] Acl

Arahkan ke buffer yang dialokasikan penelepon untuk menerima struktur ACL yang diinisialisasi. Buffer ini harus setidaknya sizeof(ACL),

[in] AclLength

Panjang, dalam byte, dari buffer yang diacu oleh parameter Acl . Nilai ini harus cukup besar untuk memuat header ACL dan semua entri kontrol akses (ACE) yang akan disimpan di ACL. Lihat bagian Keterangan berikut untuk informasi tentang menghitung ukuran ACL.

AclRevision

Tingkat revisi ACL ACE yang akan ditambahkan. Persyaratan versi Windows adalah sebagai berikut:

Nilai Makna
ACL_REVISION

Tingkat revisi valid pada semua versi Windows.

ACL_REVISION_DS
CatatanAceRevision harus ACL_REVISION_DS jika ACL di Acl berisi ACE khusus objek.
 

 

Mengembalikan nilai

RtlCreateAcl dapat mengembalikan salah satu nilai status berikut:

Menampilkan kode Deskripsi
STATUS_SUCCESS
ACL berhasil dibuat dan diinisialisasi.
STATUS_BUFFER_TOO_SMALL
ACL baru tidak masuk ke dalam buffer di Acl. Buffer ACL yang lebih besar diperlukan.
STATUS_INVALID_PARAMETER
Revisi yang ditentukan tidak terkini, atau nilai AclLength terlalu besar.

Keterangan

ACL yang diinisialisasi oleh RtlCreateAcl tidak berisi entri kontrol akses (ACE). ACL ini kosong, dibandingkan dengan ACL yang tidak ada. Jika ACL kosong diterapkan ke objek, ACL secara implisit menolak semua akses ke objek tersebut. Untuk menambahkan ACE ke ACL, gunakan RtlAddAccessAllowedAce.

Untuk menghitung ukuran ACL, tambahkan sizeof(ACL) ke ukuran semua ACE yang akan disimpan dalam ACL. Untuk menghitung ukuran ACE, tambahkan ukuran struktur ACE, seperti sizeof(ACCESS_ALLOWED_ACE), ke panjang SID yang terkait dengan ACE, lalu kurangi ukuran anggota SidStart (yang merupakan bagian dari struktur ACE dan SID). Gunakan fungsi RtlLengthSid untuk mendapatkan panjang SID tertentu.

Contoh berikut menunjukkan cara menghitung ukuran ACE yang diizinkan akses:

sizeof (ACCESS_ALLOWED_ACE) - sizeof (ACCESS_ALLOWED_ACE.SidStart) 
        + GetLengthSid (pAceSid);

Untuk menghitung ukuran ACL, gunakan algoritma berikut, mengganti struktur ACE yang sesuai dalam ekspresi sizeof(ACE):

cbAcl = sizeof (ACL);
for (i = 0 ; i < nAceCount ; i++) {
    // subtract ACE.SidStart from the size
    cbAce = sizeof (ACE) - sizeof (DWORD);
    // add this ACE's SID length
    cbAce += GetLengthSid (pAceSid[i]);
    // add the length of each ACE to the total ACL length
    cbAcl += cbAce;
}

Untuk informasi selengkapnya tentang keamanan dan kontrol akses, lihat Model keamanan Windows untuk pengembang driver dan dokumentasi tentang topik ini di Windows SDK.

Persyaratan

Persyaratan Nilai
Target Platform Universal
Header ntifs.h (termasuk Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Lihat juga

ACCESS_ALLOWED_ACE

ACE

ACL

RtlAddAccessAllowedAce

RtlLengthSid

SID