Функция IoAttachDevice (wdm.h)
Подпрограмма IoAttachDevice присоединяет объект устройства вызывающего объекта к именованным целевым объектам устройства, чтобы запросы ввода-вывода, привязанные к целевому устройству, перенаправлялись сначала вызывающей.
NTSTATUS IoAttachDevice(
[in] PDEVICE_OBJECT SourceDevice,
[in] PUNICODE_STRING TargetDevice,
[out] PDEVICE_OBJECT *AttachedDevice
);
[in] SourceDevice
Указатель на созданный вызывающим объектом устройства.
[in] TargetDevice
Указатель на буфер, содержащий имя объекта устройства, к которому необходимо подключить указанный SourceDevice.
[out] AttachedDevice
Указатель на выделенное вызывающим хранилище для указателя. При возврате содержит указатель на целевой объект устройства, если вложение выполнено успешно.
IoAttachDevice может возвращать одно из следующих значений NTSTATUS:
IoAttachDevice устанавливает уровень между драйверами, чтобы те же irPs можно было отправлять каждому драйверу в цепочке.
Эта подпрограмма используется промежуточными драйверами во время инициализации. Он позволяет такому драйверу присоединять собственный объект устройства к другому устройству таким образом, чтобы все запросы, сделанные на исходное устройство, были переданы сначала промежуточному драйверу.
Вызывающий объект можно слоить только в верхней части существующей цепочки многоуровневых драйверов. IoAttachDevice ищет самый высокий уровень объекта устройства, наложенного на TargetDevice и присоединяется к этому объекту (это может быть TargetDevice). Таким образом, эта подпрограмма не должна вызываться, если драйвер, который должен быть более высоким, уже слочен над целевым устройством.
Обратите внимание, что для драйверов и драйверов файловой системы в стеке хранилища IoAttachDevice открывает целевое устройство с FILE_READ_ATTRIBUTES, а затем вызывает IoGetRelatedDeviceObject. Это не приводит к тому, что файловая система будет подключена. Таким образом, успешный вызов IoAttachDevice возвращает объект устройства драйвера хранилища, а не драйвер файловой системы.
Эта подпрограмма задает AlignmentRequirement в SourceDevice значением в следующем нижнем объекте устройства и задает StackSize значением в следующем нижнем объекте плюс один.
Ескерту
ПодключенныйDevice должен указывать на глобальное расположение памяти, например расширение устройства драйвера. IoAttachDevice открывает объект файла для целевого устройства, обновляет Присоединенная, выполняет подключение, а затем закрывает объект файла. Таким образом, исходное устройство получает IRP_MJ_CLEANUP и IRP_MJ_CLOSE запросы к объекту файла перед возвратом IoAttachDev ice. Драйвер должен пересылать эти запросы на целевое устройство, а присоединенного устройства должен быть расположением памяти, доступным для диспетчерской драйвера и подпрограмм DispatchClose.
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
правил соответствия DDI | HwStorPortProhibitedDIs(storport), IrqlIoPassive1(wdm) |