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