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 |