Penanganan Objek

Driver dan komponen mode pengguna mengakses sebagian besar objek yang ditentukan sistem melalui handel. Handel diwakili oleh jenis data HANDLE buram. (Perhatikan bahwa handel tidak digunakan untuk mengakses objek perangkat atau objek driver.)

Untuk sebagian besar jenis objek, rutinitas mode kernel yang membuat atau membuka objek menyediakan handel kepada pemanggil. Pemanggil kemudian menggunakan handel tersebut dalam operasi berikutnya pada objek .

Berikut adalah daftar jenis objek yang biasanya digunakan driver, dan rutinitas yang menyediakan handel ke objek jenis tersebut.

Tipe objek Rutinitas buat/buka yang sesuai

File

IoCreateFile, ZwCreateFile, ZwOpenFile

Kunci registri

IoOpenDeviceInterfaceRegistryKey, IoOpenDeviceRegistryKey, ZwCreateKey, ZwOpenKey

Threads

PsCreateSystemThread

Acara

IoCreateSynchronizationEvent, IoCreateNotificationEvent

Link simbolik

ZwOpenSymbolicLinkObject

Objek direktori

ZwCreateDirectoryObject

Objek bagian

ZwOpenSection

Ketika driver tidak lagi memerlukan akses ke objek, ia memanggil rutinitas ZwClose untuk menutup handel. Ini berfungsi untuk semua jenis objek yang tercantum dalam tabel di atas.

Sebagian besar rutinitas yang menyediakan handel mengambil struktur OBJECT_ATTRIBUTES sebagai parameter. Struktur ini dapat digunakan untuk menentukan atribut untuk handel.

Driver dapat menentukan atribut handel berikut:

  • OBJ_KERNEL_HANDLE

    Handel hanya dapat diakses dari mode kernel.

  • OBJ_INHERIT

    Setiap anak dari proses saat ini menerima salinan handel saat dibuat.

  • OBJ_FORCE_ACCESS_CHECK

    Atribut ini menentukan bahwa sistem melakukan semua pemeriksaan akses pada handel. Secara default, sistem melewati semua pemeriksaan akses pada handel yang dibuat dalam mode kernel.

Gunakan rutinitas InitializeObjectAttributes untuk mengatur atribut ini dalam struktur OBJECT_ATTRIBUTES .

Untuk informasi tentang memvalidasi handel objek, lihat Kegagalan Memvalidasi Handel Objek.

Handel Objek Privat

Setiap kali driver membuat handel objek untuk penggunaan privatnya, driver harus menentukan atribut OBJ_KERNEL_HANDLE. Ini memastikan bahwa handel tidak dapat diakses oleh aplikasi mode pengguna.

Handel Objek Bersama

Driver yang berbagi handel objek antara mode kernel dan mode pengguna harus ditulis dengan hati-hati untuk menghindari pembuatan lubang keamanan secara tidak sengaja. Berikut adalah beberapa panduan:

  1. Buat handel dalam mode kernel dan teruskan ke mode pengguna, alih-alih sebaliknya. Handel yang dibuat oleh komponen mode pengguna dan diteruskan ke driver tidak boleh dipercaya.

  2. Jika driver harus memanipulasi handel atas nama aplikasi mode pengguna, gunakan atribut OBJ_FORCE_ACCESS_CHECK untuk memverifikasi bahwa aplikasi memiliki akses yang diperlukan.

  3. Gunakan ObReferenceObjectByPointer untuk menyimpan referensi mode kernel pada handel bersama. Jika tidak, jika komponen mode pengguna menutup handel, jumlah referensi masuk ke nol, dan jika driver kemudian mencoba menggunakan atau menutup handel, sistem akan crash.

Jika aplikasi mode pengguna membuat objek peristiwa, driver dapat dengan aman menunggu peristiwa tersebut disinyalkan, tetapi hanya jika aplikasi meneruskan handel ke objek peristiwa ke driver melalui IOCTL. Driver harus menangani IOCTL dalam konteks proses yang membuat peristiwa dan harus memvalidasi bahwa handel adalah handel peristiwa dengan memanggil ObReferenceObjectByHandle.