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, la función KsAddIrpToCancelableQueue 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 conserva una copia de este puntero en el KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) del IRP para que lo use 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 es NULL, se usa KsCancelRoutine estándar.

Valor devuelto

None

Observaciones

Si el IRP se ha puesto 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 que los IRP se cancelen incluso antes de colocarse en una lista de cancelaciones, o cuando se mueven 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 Value
Plataforma de destino Universal
Encabezado ks.h (incluya Ks.h)
Library Ks.lib