共用方式為


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

另請參閱

ExAllocatePool2

ExAllocatePool3

IoGetAttachedDevice

IoGetAttachedDeviceReference

IoGetLowerDeviceObject

ObDereferenceObject

ZwUnloadDriver