Compartir a través de


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