Función KsMoveIrpsOnCancelableQueue (ks.h)

La función KsMoveIrpsOnCancelableQueue mueve los IRP especificados desde el parámetro SourceList al parámetro DestinationList según el valor devuelto por la función KStrIrpListCallback definida por el minidriver.

Sintaxis

KSDDKAPI NTSTATUS KsMoveIrpsOnCancelableQueue(
  [in, out]      PLIST_ENTRY           SourceList,
  [in]           PKSPIN_LOCK           SourceLock,
  [in, out]      PLIST_ENTRY           DestinationList,
  [in, optional] PKSPIN_LOCK           DestinationLock,
  [in]           KSLIST_ENTRY_LOCATION ListLocation,
  [in]           PFNKSIRPLISTCALLBACK  ListCallback,
  [in]           PVOID                 Context
);

Parámetros

[in, out] SourceList

Especifica el encabezado de la cola de la que se van a quitar los IRP.

[in] SourceLock

Puntero al bloqueo de número del controlador para el acceso a la cola de origen.

[in, out] DestinationList

Especifica el encabezado de la cola en la que se van a agregar los IRP.

[in, optional] DestinationLock

Opcionalmente, contiene un puntero al bloqueo de número del controlador para el acceso a la cola de destino. Si no se proporciona, se supone que el parámetro SourceLock controla ambas colas. Si se proporciona, este bloqueo siempre se adquiere después del parámetro SourceLock . Si la lista de destino tiene un bloqueo de número independiente, primero se adquiere el bloqueo de número de cancelación en todo el sistema para mover IRP y permitir que se actualice el bloqueo de giro de KSQUEUE_SPINLOCK_IRP_STORAGE().

[in] ListLocation

Indica si los IRP deben enumerarse desde el encabezado o la cola de la cola de origen. Los IRP que se mueven se colocan en el extremo opuesto de la cola de destino para que se mantenga la ordenación.

[in] ListCallback

Especifica la función KStrIrpListCallback definida por el minidriver para indicar si se debe mover un IRP específico de SourceList a DestinationList o si se debe finalizar la enumeración.

[in] Context

Contexto pasado a ListCallback.

Valor devuelto

Devuelve STATUS_SUCCESS si la lista se ha enumerado por completo; de lo contrario, devuelve cualquier advertencia o error devuelto por la función de devolución de llamada KStrIrpListCallback definida por el minidriver que interrumpió la enumeración.

Comentarios

Un IRP se mueve si la función KStrIrpListCallback indica que se debe mover, si se adquiere actualmente. Si KStrIrpListCallback devuelve STATUS_SUCCESS, el IRP se mueve. Si devuelve STATUS_NO_MATCH, el IRP no se mueve. Cualquier otra advertencia de devolución o valor de error finalizará la enumeración y la función devolverá. KStrIrpListCallback no debe devolver el valor STATUS_NO_MATCH como error. Se llama a KStrIrpListCallback en DISPATCH_LEVEL. KStrIrpListCallback siempre se llama al menos una vez al final con un valor IRP NULL para completar la enumeración de lista.

KsMoveIrpsOnCancelableQueue continúa a través de la lista hasta que la función de devolución de llamada indica que se debe finalizar la búsqueda o se alcanza el final de la lista. KsMoveIrpsOnCancelableQueue minimiza el uso del bloqueo de número de cancelación de todo el sistema mediante los bloqueos de giro proporcionados para sincronizar el acceso cuando sea posible. KsMoveIrpsOnCancelableQueue no permite modificar la rutina de cancelación al mover IRP.

Se puede llamar a la función en DISPATCH_LEVEL o inferior.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado ks.h (incluya Ks.h)
Library Ks.lib

Consulte también

KStrIrpListCallback