Compartir a través de


Función IoAttachDevice (wdm.h)

El IoAttachDevice rutina asocia el objeto de dispositivo del autor de la llamada a un objeto de dispositivo de destino con nombre, de modo que las solicitudes de E/S enlazadas al dispositivo de destino se enruten primero al autor de la llamada.

Sintaxis

NTSTATUS IoAttachDevice(
  [in]  PDEVICE_OBJECT  SourceDevice,
  [in]  PUNICODE_STRING TargetDevice,
  [out] PDEVICE_OBJECT  *AttachedDevice
);

Parámetros

[in] SourceDevice

Puntero al objeto de dispositivo creado por el autor de la llamada.

[in] TargetDevice

Puntero a un búfer que contiene el nombre del objeto de dispositivo al que se va a adjuntar el SourceDevice especificado.

[out] AttachedDevice

Puntero al almacenamiento asignado por el autor de la llamada para un puntero. Cuando se devuelve, contiene un puntero al objeto de dispositivo de destino si los datos adjuntos se realizan correctamente.

Valor devuelto

IoAttachDevice puede devolver uno de los siguientes valores NTSTATUS:

Observaciones

IoAttachDevice establece la capa entre controladores para que se puedan enviar los mismos IRP a cada controlador de la cadena.

Esta rutina la usan los controladores intermedios durante la inicialización. Permite que este controlador conecte su propio objeto de dispositivo a otro dispositivo de tal manera que las solicitudes realizadas al dispositivo original se proporcionan primero al controlador intermedio.

El autor de la llamada solo se puede colocar en capas en la parte superior de una cadena existente de controladores superpuestas. ioAttachDevice busca el objeto de dispositivo más alto en capas de TargetDevice y se asocia a ese objeto (que puede ser el TargetDevice). Por lo tanto, no se debe llamar a esta rutina si un controlador que debe ser de nivel superior ya se ha superpuesta sobre el dispositivo de destino.

Tenga en cuenta que para los controladores y controladores del sistema de archivos de la pila de almacenamiento, IoAttachDevice abre el dispositivo de destino con FILE_READ_ATTRIBUTES y, a continuación, llama a IoGetRelatedDeviceObject. Esto no hace que se monte un sistema de archivos. Por lo tanto, una llamada correcta a ioAttachDevice devuelve el objeto de dispositivo del controlador de almacenamiento, no el del controlador del sistema de archivos.

Esta rutina establece el AlignmentRequirement en SourceDevice en el valor del objeto de dispositivo siguiente inferior y establece el stackSize de en el valor del objeto inferior más uno.

Advertencia

AttachedDevice debe apuntar a una ubicación de memoria global, como la extensión de dispositivo del controlador. IoAttachDevice abre el objeto de archivo para el dispositivo de destino, actualiza AttachedDevice, realiza la asociación y, a continuación, cierra el objeto de archivo. Por lo tanto, el dispositivo de origen recibe las solicitudes de IRP_MJ_CLEANUP y IRP_MJ_CLOSE del objeto de archivo antes de ioAttachDevice. El controlador debe reenviar estas solicitudes al dispositivo de destino y AttachedDevice debe ser una ubicación de memoria accesible para la dispatchCleanup del controlador y rutinas de DispatchClose.

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL PASSIVE_LEVEL
reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlIoPassive1(wdm)

Consulte también

DEVICE_OBJECT

IoAttachDeviceToDeviceStack

ioAttachDeviceToDeviceStackSafe

ioCreateDevice

ioDetachDevice

IoGetRelatedDeviceObject