Función IoAttachDeviceToDeviceStack (wdm.h)

La rutina IoAttachDeviceToDeviceStack asocia el objeto de dispositivo del autor de la llamada al objeto de dispositivo más alto de la cadena y devuelve un puntero al objeto de dispositivo más alto anteriormente.

Sintaxis

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

Parámetros

[in] SourceDevice

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

[in] TargetDevice

Puntero al objeto de dispositivo de otro controlador, como un puntero devuelto por una llamada anterior a IoGetDeviceObjectPointer.

Valor devuelto

IoAttachDeviceToDeviceStack devuelve un puntero al objeto de dispositivo al que se adjuntó sourceDevice . El puntero de objeto de dispositivo devuelto puede diferir de TargetDevice si TargetDevice tenía controladores adicionales superpuestas.

IoAttachDeviceToDeviceStack devuelve NULL si no pudo adjuntar el objeto de dispositivo porque, por ejemplo, el dispositivo de destino se estaba descargando.

Comentarios

IoAttachDeviceToDeviceStack establece la capa entre los controladores para que se envíen los mismos IRP a cada controlador de la cadena.

Un controlador intermedio puede usar esta rutina durante la inicialización para conectar su propio objeto de dispositivo al objeto de dispositivo de otro controlador. Las solicitudes de E/S posteriores enviadas a TargetDevice se envían primero al controlador intermedio.

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

Un escritor de controladores debe tener cuidado de llamar a esta rutina antes de que los controladores que deban superponer a su controlador. IoAttachDeviceToDeviceStack asocia SourceDevice al objeto de dispositivo más alto actualmente en capas de la cadena y no tiene forma de determinar si los controladores se están colocando en capas en el orden correcto.

Un controlador que adquirió un puntero al dispositivo de destino mediante una llamada a IoGetDeviceObjectPointer debe llamar a ObDereferenceObject con el puntero de objeto de archivo devuelto por IoGetDeviceObjectPointer para liberar su referencia al objeto de archivo antes de desasociar su propio objeto de dispositivo, por ejemplo, cuando se descarga un controlador de nivel superior.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI AddDevice(wdm), HwStorPortProhibitedDDIs(storport), PnpSameDeviceObject(wdm)

Consulte también

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject