Bagikan melalui


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

Lihat juga

ExAllocatePool2

ExAllocatePool3

IoGetAttachedDevice

IoGetAttachedDeviceReference

IoGetLowerDeviceObject

ObDereferenceObject

ZwUnloadDriver