структура CONTROLLER_OBJECT (ntddk.h)

Объект контроллера представляет аппаратный адаптер или контроллер с однородными устройствами, которые являются фактическими целевыми объектами для запросов ввода-вывода. Объект контроллера можно использовать для синхронизации операций ввода-вывода драйвера устройства с целевыми устройствами через аппаратный адаптер или контроллер.

Объект контроллера является частично непрозрачным. Средства записи драйверов должны знать об определенном поле, связанном с объектом контроллера, так как их драйверы обращаются к этому полю через указатель объекта контроллера, возвращаемый IoCreateController. Следующее поле в объекте контроллера доступно для создаваемого драйвера.

Синтаксис

typedef struct _CONTROLLER_OBJECT {
  CSHORT        Type;
  CSHORT        Size;
  PVOID         ControllerExtension;
  KDEVICE_QUEUE DeviceWaitQueue;
  ULONG         Spare1;
  LARGE_INTEGER Spare2;
} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;

Члены

Type

Size

ControllerExtension

Указатель на расширение контроллера. Структура и содержимое расширения контроллера определяются драйвером. Размер определяется драйвером, указанный в вызове драйвера IoCreateController. Как правило, драйверы поддерживают общее состояние операций ввода-вывода в расширении контроллера и состояние ввода-вывода для конкретного устройства для целевого устройства в соответствующем расширении устройства.

DeviceWaitQueue

Spare1

Spare2

Комментарии

Большинству подпрограмм драйвера, обрабатывающих IRP, предоставляется указатель на объект целевого устройства. Следовательно, драйверы устройств, использующие объекты контроллера, часто хранят указатель объекта контроллера, возвращаемый IoCreateController , в каждом расширении устройства.

Обратите внимание, что объект контроллера не имеет имени, поэтому он не может быть целевым объектом для запроса ввода-вывода, а драйверы более высокого уровня не могут подключать свои объекты устройства к объекту контроллера драйвера устройства.

Недокументированные поля в объекте контроллера следует считать недоступными. Драйверы с зависимостями от расположений полей объектов или доступом к незарегистрированных полям могут не быть переносимыми и совместимыми с другими драйверами с течением времени.

Требования

Требование Значение
Заголовок ntddk.h (включая Ntddk.h)

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

IoCreateController