Compartir a través de


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ó el 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 conectar el objeto de dispositivo porque, por ejemplo, el dispositivo de destino se estaba descargando.

Observaciones

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

Un controlador intermedio puede usar esta rutina durante la inicialización para adjuntar 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 el AlignmentRequirement en SourceDevice en el valor del objeto de dispositivo siguiente inferior y establece el StackSize en el valor del siguiente objeto inferior más uno.

Un escritor de controladores debe tener cuidado para llamar a esta rutina antes de los controladores que deben estar encima de su controlador. IoAttachDeviceToDeviceStack adjunta SourceDevice al objeto de dispositivo más alto que se encuentra actualmente en capas en 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 llamando 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 Valor
cliente mínimo admitido Disponible a partir de Windows 2000.
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 <= DISPATCH_LEVEL
reglas de cumplimiento de DDI AddDevice(wdm), HwStorPortProhibitedDIs(storport), PnpSameDeviceObject(wdm)

Consulte también

IoAttachDevice

ioDetachDevice

IoGetDeviceObjectPointer

obDereferenceObject