Compartir a través de


Función IoAttachDeviceToDeviceStackSafe (ntddk.h)

La rutina IoAttachDeviceToDeviceStackSafe asocia el objeto de dispositivo del autor de la llamada al objeto de dispositivo más alto de una pila de controladores.

Sintaxis

NTSTATUS IoAttachDeviceToDeviceStackSafe(
  [in]  PDEVICE_OBJECT SourceDevice,
  [in]  PDEVICE_OBJECT TargetDevice,
  [out] PDEVICE_OBJECT *AttachedToDeviceObject
);

Parámetros

[in] SourceDevice

Puntero a un objeto de dispositivo creado por el autor de la llamada.

[in] TargetDevice

Puntero al objeto de dispositivo de la pila a la que se va a adjuntar el objeto sourceDevice .

[out] AttachedToDeviceObject

En la entrada, este parámetro especifica la dirección de SourceDevice->DeviceExtension->AttachedToDeviceObject, que debe contener un puntero NULL. En la salida, este parámetro recibe un puntero al objeto de dispositivo al que se adjuntó el SourceDevice.

Valor devuelto

ioAttachDeviceToDeviceStackSafe devuelve STATUS_SUCCESS si SourceDevice se adjunta correctamente encima del TargetDevice; de lo contrario, devuelve STATUS_NO_SUCH_DEVICE.

Observaciones

Al igual que IoAttachDeviceToDeviceStack, IoAttachDeviceToDeviceStackSafe establece capas entre controladores para que los mismos IRP se envíen a cada controlador de la pila. Sin embargo, a diferencia de IoAttachDeviceToDeviceStack, IoAttachDeviceToDeviceStackSafe tiene un parámetro adicional, AttachedToDeviceObject, que el controlador de filtro usa para pasar la dirección del campo SourceDevice objeto AttachedToDeviceObject. IoAttachDeviceToDeviceStackSafe actualiza este campo mientras mantiene el bloqueo de la base de datos del sistema de E/S. Dado que contiene este bloqueo, IoAttachDeviceToDeviceStackSafe evita una condición de carrera que, de lo contrario, podría producirse si el objeto SourceDevice recibió un IRP antes de que se actualizara su campo AttachedToDeviceObject.

Un controlador de filtro del sistema de archivos llama a IoAttachDeviceToDeviceStackSafe para adjuntar su propio objeto de dispositivo de filtro (SourceDevice) encima de un objeto de dispositivo (TargetDevice) que pertenece a un sistema de archivos u otro controlador de filtro. El controlador de filtro recibe primero las solicitudes de E/S posteriores enviadas a AttachedToDeviceObject, que los procesa y los reenvía al siguiente controlador de la pila llamando a IoCallDriver.

Si el objeto de dispositivo especificado por TargetDevice está actualmente en la parte superior de la pila de controladores, el SourceDevice de se adjunta directamente al TargetDevice. En este caso, TargetDevice y el AttachedToDeviceObject devuelto puntero son iguales.

Si uno o varios objetos de dispositivo de filtro ya están conectados por encima del targetDevice en la pila de controladores, IoAttachDeviceToDeviceToDeviceStackSafe adjunta el SourceDevice al objeto de dispositivo de filtro superior. Se devuelve un puntero al último en AttachedToDeviceObject.

En el momento inmediatamente después de que se conecte a la parte superior de la pila, el SourceDevice ocupa la parte superior de la pila de controladores. Sin embargo, tenga en cuenta que esto no significa necesariamente que el sourceDevice permanecerá en la parte superior de la pila de controladores. Otros filtros pueden adjuntar sus propios objetos de dispositivo de filtro encima del sourceDevice en la pila.

IoAttachDeviceToDeviceStackSafe establece el miembro AlignmentRequirement del objeto de dispositivo al que apunta sourceDevice al valor de correspondiente en el objeto de dispositivo siguiente inferior y establece el StackSize en SourceDevice al valor del siguiente objeto inferior más uno.

Requisitos

Requisito Valor
cliente mínimo admitido Esta rutina está disponible en el paquete acumulativo de actualizaciones para Windows 2000 Service Pack 4 (SP4) y en Windows XP y versiones posteriores.
de la plataforma de destino de Universal
encabezado de ntddk.h (incluya Ntddk.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= DISPATCH_LEVEL
reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport)

Consulte también

IoAttachDeviceToDeviceStack

IoCallDriver