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 |
---|---|
|
Tingkat revisi valid pada semua versi Windows. |
|
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 |
---|---|
|
ACL berhasil dibuat dan diinisialisasi. |
|
ACL baru tidak masuk ke dalam buffer di Acl. Buffer ACL yang lebih besar diperlukan. |
|
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 |