IoEnumerateDeviceObjectList 函式 (ntifs.h)
IoEnumerateDeviceObjectList 例程會列舉驅動程式的裝置物件清單。
語法
NTSTATUS IoEnumerateDeviceObjectList(
[in] PDRIVER_OBJECT DriverObject,
[out] PDEVICE_OBJECT *DeviceObjectList,
[in] ULONG DeviceObjectListSize,
[out] PULONG ActualNumberDeviceObjects
);
參數
[in] DriverObject
驅動程式物件的指標。
[out] DeviceObjectList
接收裝置物件指標之呼叫端配置的陣列指標。 此陣列必須從非分頁集區配置。 此參數可以是 NULL。 請參閱。
[in] DeviceObjectListSize
DeviceObjectList 陣列的大小,以位元組為單位。 此參數可以是零。 請參閱。
[out] ActualNumberDeviceObjects
在驅動程式物件的裝置物件清單中找到的實際裝置物件數目。 請注意,如果位於 DeviceObjectList 的陣列太小,則複製到陣列的裝置物件指標數目將會小於 actualNumberDeviceObjects 。
傳回值
IoEnumerateDeviceObjectList 會傳回 NTSTATUS 程式代碼,例如下列其中一個值:
傳回碼 | 描述 |
---|---|
STATUS_SUCCESS | IoEnumerateDeviceObjectList 的呼叫 成功完成。 |
STATUS_BUFFER_TOO_SMALL | DeviceObjectList 的陣列 太小,無法保存整個裝置物件清單。 在此情況下,IoEnumerateDeviceObjectList 將盡可能多的裝置物件指標複製到陣列中。 |
言論
檔案系統篩選驅動程式會呼叫 IoEnumerateDeviceObjectList 來列舉:
它已建立的裝置物件。 這通常是在驅動程序準備卸除時完成的。 請注意,無法安全地從執行中的系統卸除篩選驅動程式。 如需詳細資訊,請參閱 ZwUnloadDriver。
基底文件系統所建立的裝置物件,因此篩選條件知道可以連結的磁碟區數目。
IoEnumerateDeviceObjectList 會傳回篩選驅動程式所建立的所有裝置物件。 這包括控制裝置物件(CDO)以及磁碟區裝置物件(VDO)。 這兩種類型的裝置物件可以透過慣例來區分,CDO 會命名,而 VDO 則不是。
在後者的情況下,篩選驅動程式通常會呼叫 IoEnumerateDeviceObjectList 兩次:一次取得清單中的裝置物件數目,一次取得裝置物件清單本身。 在第一次呼叫中,呼叫端應將 DeviceObjectList 參數設定為 NULL,並將 DeviceObjectListSize 設定為零。 在第二次呼叫中,DeviceObjectList 應該包含適當大小的指標陣列,DeviceObjectListSize 應包含該陣列的大小,以位元組為單位。
IoEnumerateDeviceObjectListDeviceObjectList 所指向清單中每個裝置對象的參考計數遞增。 因此,每次成功呼叫 IoEnumerateDeviceObjectList,都必須比對清單中每個裝置對象的後續呼叫 ObDereferenceObject。 因為未處理的參考計數,所以無法讓系統釋放或刪除這些裝置物件。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 SP4 更新匯總;Windows XP |
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |