Функция IoAttachDeviceToDeviceStack (wdm.h)

Подпрограмма IoAttachDeviceToDeviceStack присоединяет объект устройства вызывающего объекта к самому высокому объекту устройства в цепочке и возвращает указатель на ранее высокий объект устройства.

Синтаксис

PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
  [in] PDEVICE_OBJECT SourceDevice,
  [in] PDEVICE_OBJECT TargetDevice
);

Параметры

[in] SourceDevice

Указатель на объект устройства, созданный вызывающим объектом.

[in] TargetDevice

Указатель на объект устройства другого драйвера, например указатель, возвращенный предыдущим вызовом IoGetDeviceObjectPointer.

Возвращаемое значение

IoAttachDeviceToDeviceStack возвращает указатель на объект устройства, к которому был присоединен SourceDevice . Возвращаемый указатель объекта устройства может отличаться от TargetDevice , если в TargetDevice есть дополнительные драйверы, размещенные поверх него.

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

Комментарии

IoAttachDeviceToDeviceStack устанавливает уровни между драйверами, чтобы те же irP отправлялись каждому драйверу в цепочке.

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

Эта подпрограмма присваивает параметру AlignmentRequirement в SourceDevice значение в следующем нижнем объекте устройства, а stackSize — значение в следующем нижнем объекте плюс единица.

Модуль записи драйверов должен позаботиться о вызове этой процедуры перед любыми драйверами, которые должны быть наложены на их драйвер. IoAttachDeviceToDeviceStack присоединяет SourceDevice к самому высокому объекту устройства, на данный момент размещенному в цепочке, и не может определить, наложены ли драйверы в правильном порядке.

Драйвер, который получил указатель на целевое устройство путем вызова IoGetDeviceObjectPointer , должен вызвать ObDereferenceObject с указателем на объект файла, возвращенным IoGetDeviceObjectPointer , чтобы освободить ссылку на файловый объект перед отсоединением собственного объекта устройства, например при выгрузке такого драйвера более высокого уровня.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI AddDevice(wdm), HwStorPortProhibitedDIs(storport), PnpSameDeviceObject(wdm)

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

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject