Función KsAddIrpToCancelableQueue (ks.h)
La función KsAddIrpToCancelableQueue agrega un IRP a una cola de IRP cancelable, lo que permite cancelar el IRP. Si el IRP se había establecido previamente en un estado cancelado, el KsAddIrpToCancelableQueue función completa la cancelación de ese IRP.
Sintaxis
KSDDKAPI VOID KsAddIrpToCancelableQueue(
[in, out] PLIST_ENTRY QueueHead,
[in] PKSPIN_LOCK SpinLock,
[in] PIRP Irp,
[in] KSLIST_ENTRY_LOCATION ListLocation,
[in, optional] PDRIVER_CANCEL DriverCancel
);
Parámetros
[in, out] QueueHead
Especifica el almacenamiento asignado por el controlador para el encabezado de la cola en el que se va a agregar el IRP.
[in] SpinLock
Apunta al bloqueo de número del controlador para el acceso de cola a la cola especificada en QueueHead. Si es necesario, se mantiene una copia de este puntero en la KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) del IRP para su uso por parte de la rutina de cancelación.
[in] Irp
Especifica el IRP que se va a agregar a la cola especificada en QueueHead.
[in] ListLocation
Indica si este IRP debe colocarse al principio o al final de la cola. Este valor debe ser KsListEntryTail o KsListEntryHead.
[in, optional] DriverCancel
Parámetro opcional que especifica una rutina de cancelación proporcionada por el controlador que se va a usar. Si se trata de NULL, se usa el estándar KsCancelRoutine.
Valor devuelto
Ninguno
Observaciones
Si el IRP se ha colocado en un estado de cancelación cuando se llama a esta rutina, KsAddIrpToCancelableQueue llamará inmediatamente a la rutina de cancelación especificada en DriverCancel, o si no se especificó ninguna rutina en DriverCancel se llama a la rutina de cancelación de streaming predeterminada.
La función KsAddIrpToCancelableQueue permite cancelar IRP incluso antes de colocarse en una lista de cancelación o cuando se mueve de una lista a otra. Se puede llamar a esta función en el nivel irQ DISPATCH_LEVEL o inferior, a menos que la cola asignada por el controlador y todas las entradas de la cola sean residentes del sistema o se asignen desde el almacenamiento residente.
La función no usa el bloqueo de número de cancelación para agregar elementos a la lista. El acceso a la lista se sincroniza mediante el bloqueo de número proporcionado y se basa en operaciones atómicas en Irp->CancelRoutine.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Universal |
encabezado de | ks.h (incluya Ks.h) |
biblioteca de | Ks.lib |