struktur OBJECT_ATTRIBUTES (ntdef.h)
Struktur OBJECT_ATTRIBUTES menentukan atribut yang dapat diterapkan ke objek atau handel objek dengan rutinitas yang membuat objek dan/atau mengembalikan handel ke objek.
Sintaks
typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES;
Anggota
Length
Jumlah byte data yang terkandung dalam struktur ini. Makro InitializeObjectAttributes mengatur anggota ini ke sizeof(OBJECT_ATTRIBUTES).
RootDirectory
Handel opsional ke direktori objek akar untuk nama jalur yang ditentukan oleh anggota ObjectName . Jika RootDirectory adalah NULL
, ObjectName harus menunjuk ke nama objek yang sepenuhnya memenuhi syarat yang menyertakan jalur lengkap ke objek target. Jika RootDirectory non-NULL
, ObjectName menentukan nama objek relatif terhadap direktori RootDirectory . Handel RootDirectory dapat merujuk ke direktori sistem file atau direktori objek di namespace pengelola objek.
ObjectName
Penunjuk ke string Unicode yang berisi nama objek tempat handel akan dibuka. Ini harus berupa nama objek yang sepenuhnya memenuhi syarat, atau nama jalur relatif ke direktori yang ditentukan oleh anggota RootDirectory .
Attributes
Bitmask bendera yang menentukan atribut handle objek. Anggota ini bisa berisi satu atau beberapa bendera dalam tabel berikut.
Bendera | Makna |
---|---|
OBJ_INHERIT | Handel ini dapat diwariskan oleh proses turunan dari proses saat ini. |
OBJ_PERMANENT | Bendera ini hanya berlaku untuk objek yang diberi nama dalam manajer objek. Secara default, objek tersebut dihapus ketika semua handel terbuka ditutup. Jika bendera ini ditentukan, objek tidak dihapus ketika semua handel yang terbuka ditutup. Driver dapat menggunakan rutinitas ZwMakeTemporaryObject untuk membuat objek permanen tidak permanen. |
OBJ_EXCLUSIVE | Jika bendera ini diatur dan struktur OBJECT_ATTRIBUTES diteruskan ke rutinitas yang membuat objek, objek dapat diakses secara eksklusif. Artinya, setelah proses membuka handel seperti itu ke objek, tidak ada proses lain yang dapat membuka handel ke objek ini. Jika bendera ini diatur dan struktur OBJECT_ATTRIBUTES diteruskan ke rutinitas yang membuat handel objek, pemanggil meminta akses eksklusif ke objek untuk konteks proses tempat handel dibuat. Permintaan ini hanya dapat diberikan jika bendera OBJ_EXCLUSIVE diatur saat objek dibuat. |
OBJ_CASE_INSENSITIVE | Jika bendera ini ditentukan, perbandingan tidak peka huruf besar/kecil digunakan saat mencocokkan nama yang ditunjukkan oleh anggota ObjectName terhadap nama objek yang ada. Jika tidak, nama objek dibandingkan menggunakan pengaturan sistem default. |
OBJ_OPENIF | Jika bendera ini ditentukan, dengan menggunakan handel objek, ke rutinitas yang membuat objek dan jika objek tersebut sudah ada, rutinitas harus membuka objek tersebut. Jika tidak, rutinitas membuat objek mengembalikan kode NTSTATUS STATUS_OBJECT_NAME_COLLISION. |
OBJ_OPENLINK | Jika handel objek, dengan set bendera ini, diteruskan ke rutinitas yang membuka objek dan jika objek adalah objek tautan simbolis, rutinitas harus membuka objek tautan simbolis itu sendiri, bukan objek yang dirujuk tautan simbolis (yang merupakan perilaku default). |
OBJ_KERNEL_HANDLE | Handel dibuat dalam konteks proses sistem dan hanya dapat diakses dari mode kernel. |
OBJ_FORCE_ACCESS_CHECK | Rutinitas yang membuka handel harus memberlakukan semua pemeriksaan akses untuk objek, bahkan jika handel sedang dibuka dalam mode kernel. |
OBJ_DONT_REPARSE | Jika bendera ini diatur, tidak ada titik pemisahan ulang yang akan diikuti saat mengurai nama objek terkait. Jika ada pemilahan ulang yang terjadi, upaya akan gagal dan mengembalikan hasil STATUS_REPARSE_POINT_ENCOUNTERED . Ini dapat digunakan untuk menentukan apakah ada titik penguraian ulang di jalur objek, dalam skenario keamanan. |
OBJ_IGNORE_IMPERSONATED_DEVICEMAP | Peta perangkat adalah pemetaan antara nama perangkat DOS dan perangkat dalam sistem, dan digunakan saat menyelesaikan nama DOS. Peta perangkat terpisah ada untuk setiap pengguna dalam sistem, dan pengguna dapat mengelola peta perangkat mereka sendiri. Biasanya selama peniruan identitas, peta perangkat pengguna yang ditiru akan digunakan. Namun, ketika bendera ini diatur, peta perangkat pengguna proses digunakan sebagai gantinya. |
OBJ_VALID_ATTRIBUTES | Dicadangkan. |
SecurityDescriptor
Menentukan deskriptor keamanan (SECURITY_DESCRIPTOR) untuk objek ketika objek dibuat. Jika SecurityDescriptor adalah NULL
, objek akan menerima pengaturan keamanan default. Lihat DACL untuk Objek Baru.
SecurityQualityOfService
Kualitas layanan opsional yang akan diterapkan ke objek saat dibuat. Digunakan untuk menunjukkan tingkat peniruan keamanan dan mode pelacakan konteks (dinamis atau statis). Saat ini, makro InitializeObjectAttributes mengatur anggota ini ke NULL
.
Keterangan
Gunakan makro InitializeObjectAttributes untuk menginisialisasi anggota struktur OBJECT_ATTRIBUTES . Perhatikan bahwa InitializeObjectAttributes menginisialisasi anggota SecurityQualityOfService ke NULL
. Jika Anda harus menentukan non-nilaiNULL
, atur anggota SecurityQualityOfService setelah inisialisasi.
Untuk menerapkan atribut yang terkandung dalam struktur ini ke objek atau handel objek, teruskan penunjuk ke struktur ini ke rutinitas yang mengakses objek atau mengembalikan handel objek, seperti ZwCreateFile atau ZwCreateDirectoryObject.
Semua anggota struktur ini bersifat baca-saja. Jika anggota struktur ini adalah penunjuk, objek yang dirujuk anggota ini juga bersifat baca-saja. Anggota dan objek baca-saja dapat digunakan untuk memperoleh informasi yang relevan tetapi tidak boleh dimodifikasi. Untuk mengatur anggota struktur ini, gunakan makro InitializeObjectAttributes .
Rutinitas driver yang berjalan dalam konteks proses selain proses sistem harus mengatur bendera OBJ_KERNEL_HANDLE untuk anggota Atribut (dengan menggunakan makro InitializeObjectAttributes ). Ini membatasi penggunaan handel yang dibuka untuk objek tersebut untuk memproses hanya berjalan dalam mode kernel. Jika tidak, handel dapat diakses oleh proses dalam konteks driver yang berjalan.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | ntdef.h (termasuk D3dkmthk.h, Ntdef.h, Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |