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ó SourceDevice .

Valor devuelto

IoAttachDeviceToDeviceStackSafe devuelve STATUS_SUCCESS si SourceDevice está conectado correctamente encima del TargetDevice; de lo contrario, devuelve STATUS_NO_SUCH_DEVICE.

Comentarios

Al igual que IoAttachDeviceToDeviceStack, IoAttachDeviceToDeviceStackSafe establece la capa entre los controladores para que se envíen los mismos IRP 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 AttachedToDeviceObject del objeto SourceDevice . 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 podría producirse si el objeto SourceDevice recibió un IRP antes de actualizar 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 las procesa y las reenvía al siguiente controlador de la pila mediante una llamada a IoCallDriver.

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

Si uno o varios objetos de dispositivo de filtro ya están conectados encima del targetDevice en la pila de controladores, IoAttachDeviceToDeviceStackSafe adjunta el sourceDevice al objeto de dispositivo de filtro más alto. Se devuelve un puntero al último en AttachedToDeviceObject.

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

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

Requisitos

Requisito Value
Cliente mínimo compatible Esta rutina está disponible en el paquete acumulativo de actualizaciones para Windows 2000 Service Pack 4 (SP4) y en Windows XP y versiones posteriores.
Plataforma de destino Universal
Encabezado ntddk.h (incluya Ntddk.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport)

Consulte también

IoAttachDeviceToDeviceStack

IoCallDriver