Fungsi IoEnumerateDeviceObjectList (ntifs.h)
Rutinitas IoEnumerateDeviceObjectList menghitung daftar objek perangkat driver.
Sintaks
NTSTATUS IoEnumerateDeviceObjectList(
[in] PDRIVER_OBJECT DriverObject,
[out] PDEVICE_OBJECT *DeviceObjectList,
[in] ULONG DeviceObjectListSize,
[out] PULONG ActualNumberDeviceObjects
);
Parameter
[in] DriverObject
Penunjuk ke objek driver untuk driver.
[out] DeviceObjectList
Penunjuk ke array yang dialokasikan penelepon yang menerima penunjuk objek perangkat. Array ini harus dialokasikan dari kumpulan yang tidak dipagasi. Parameter ini bisa NULL. Lihat Keterangan.
[in] DeviceObjectListSize
Ukuran, dalam byte, dari array DeviceObjectList . Parameter ini bisa nol. Lihat Keterangan.
[out] ActualNumberDeviceObjects
Jumlah aktual objek perangkat yang ditemukan dalam daftar objek perangkat objek driver. Perhatikan bahwa jika array di DeviceObjectList terlalu kecil, jumlah penunjuk objek perangkat yang disalin ke dalam array akan kurang dari ActualNumberDeviceObjects.
Mengembalikan nilai
IoEnumerateDeviceObjectList mengembalikan kode NTSTATUS seperti salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
STATUS_SUCCESS | Panggilan ke IoEnumerateDeviceObjectList berhasil diselesaikan. |
STATUS_BUFFER_TOO_SMALL | Array di DeviceObjectList terlalu kecil untuk menahan seluruh daftar objek perangkat. Dalam hal ini, IoEnumerateDeviceObjectList menyalin sebanyak mungkin pointer objek perangkat ke dalam array. |
Keterangan
Driver filter sistem file memanggil IoEnumerateDeviceObjectList untuk menghitung:
Objek perangkat yang telah dibuatnya. Ini biasanya dilakukan ketika driver bersiap untuk membongkar. Perhatikan bahwa driver filter tidak dapat dibongkar dengan aman dari sistem yang sedang berjalan. Untuk informasi selengkapnya, lihat ZwUnloadDriver.
Objek perangkat yang dibuat oleh sistem file dasar, sehingga filter mengetahui jumlah volume yang dapat dilampirkan.
IoEnumerateDeviceObjectList mengembalikan semua objek perangkat yang dibuat oleh driver filter. Ini termasuk objek perangkat kontrol (CDO) serta objek perangkat volume (VDO). Dua jenis objek perangkat dapat dibedakan oleh fakta bahwa, berdasarkan konvensi, CDO diberi nama dan VDO tidak.
Dalam kasus terakhir, driver filter biasanya memanggil IoEnumerateDeviceObjectList dua kali: sekali untuk mendapatkan jumlah objek perangkat dalam daftar, dan sekali untuk mendapatkan daftar objek perangkat itu sendiri. Pada panggilan pertama, pemanggil harus mengatur parameter DeviceObjectList ke NULL dan DeviceObjectListSize ke nol. Dalam panggilan kedua, DeviceObjectList harus berisi pointer ke array pointer berukuran tepat, dan DeviceObjectListSize harus berisi ukuran, dalam byte, dari array tersebut.
IoEnumerateDeviceObjectList meningkatkan jumlah referensi pada setiap objek perangkat dalam daftar yang ditunjukkan oleh DeviceObjectList. Dengan demikian setiap panggilan yang berhasil ke IoEnumerateDeviceObjectList harus dicocokkan dengan panggilan berikutnya ke ObDereferenceObject untuk setiap objek perangkat dalam daftar. Kegagalan untuk melakukannya mencegah sistem membebaskan atau menghapus objek perangkat ini karena jumlah referensi yang luar biasa.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Rollup Pembaruan Windows 2000 SP4; Windows XP |
Target Platform | Universal |
Header | ntifs.h (termasuk Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |