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