Функция 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 возвращает все объекты устройства, созданные драйвером фильтра. Сюда входят объекты управляющих устройств (CDOS), а также объекты устройств томов (VDOS). Два типа объектов устройств можно отличить по тому факту, что по соглашению cdos называются, а VDOs — нет.

В последнем случае драйвер фильтра обычно вызывает IoEnumerateDeviceObjectList дважды: один раз, чтобы получить количество объектов устройств в списке, и один раз, чтобы получить сам список объектов устройств. В первом вызове вызывающий объект должен задать для параметра DeviceObjectList значение NULL, а для Параметра DeviceObjectListSize — нулевое значение. Во втором вызове DeviceObjectList должен содержать указатель на массив указателей соответствующего размера, а DeviceObjectListSize — размер этого массива в байтах.

IoEnumerateDeviceObjectList увеличивает число ссылок на каждый объект устройства в списке, на который указывает DeviceObjectList. Таким образом, каждый успешный вызов IoEnumerateDeviceObjectList должен соответствовать последующему вызову ObDereferenceObject для каждого объекта устройства в списке. В этом случае система не может освободить или удалить эти объекты устройства из-за неоплаченного количества ссылок.

Требования

Требование Значение
Минимальная версия клиента Накопительный пакет обновления Windows 2000 с пакетом обновления 4 (SP4); Windows XP
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

См. также раздел

ExAllocatePool2

ExAllocatePool3

IoGetAttachedDevice

IoGetAttachedDeviceReference

IoGetLowerDeviceObject

ObDereferenceObject

ZwUnloadDriver