Ағылшын тілінде оқу

Бөлісу құралы:


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

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

Синтаксис

C++
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)

См. также

DEVICE_OBJECT

IoAttachDeviceToDeviceStack

IoAttachDeviceToDeviceStackSafe

IoCreateDevice

IoDetachDevice

IoGetRelatedDeviceObject