Функция 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) |