Función IoCsqInsertIrpEx (wdm.h)

La rutina IoCsqInsertIrpEx inserta un IRP en la cola irP segura para cancelación del controlador.

Sintaxis

NTSTATUS IoCsqInsertIrpEx(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context,
  [in, optional]  PVOID               InsertContext
);

Parámetros

[in, out] Csq

Puntero a la estructura de IO_CSQ para la cola IRP segura para cancelación del controlador. IoCsqInitialize o IoCsqInitializeEx deben inicializar esta estructura.

[in, out] Irp

Puntero al IRP que se va a poner en cola.

[out, optional] Context

Puntero a una estructura de IO_CSQ_IRP_CONTEXT . IoCsqInsertIrpEx inicializa esta estructura con información de contexto para el IRP insertado. El controlador pasa este valor a IoCsqRemoveIrp para eliminar el IRP de la cola. El contexto puede ser NULL si el controlador no usará IoCsqRemoveIrp para quitar este IRP de la cola.

[in, optional] InsertContext

Puntero a un valor de contexto definido por el controlador. Este parámetro se pasa a la rutina CsqInsertIrpEx del controlador, si tiene uno. De lo contrario, este parámetro se omite.

Valor devuelto

Si el parámetro Csq se inicializó con IoCsqInitialize, IoCsqInsertIrpEx siempre devuelve STATUS_SUCCESS. Si Csq se inicializó con IoCsqInitializeEx, IoCsqInsertIrpEx devuelve el valor devuelto por la rutina CsqInsertIrpEx del controlador.

Comentarios

IoCsqInsertIrpEx usa las rutinas de distribución de la cola para insertar el IRP. Rutina IoCsqInsertIrpEx :

  1. Llama a la rutina CsqAcquireLock de la cola para bloquear la cola.
  2. Si IoCsqInitialize inicializó la estructura de IO_CSQ de la cola, IoCsqInsertIrpEx llama a la rutina CsqInsertIrp de la cola para insertar el IRP. Si IoCsqInitializeEx inicializó la estructura de IO_CSQ de la cola, IoCsqInsertIrpEx llama a la rutina CsqInsertIrpEx de la cola para insertar el IRP y pasa el parámetro InsertContext como parámetro InsertContext de CsqInsertIrpEx.
  3. Llama a la rutina CsqReleaseLock de la cola para desbloquear la cola.
Si el IRP que se va a insertar ya se ha cancelado, IoCsqInsertIrpEx no intenta insertar el IRP en la cola.

Para obtener más información, consulte Cancel-Safe IRP Queues( Colas irP seguras para cancelar).

Tenga en cuenta que las rutinas IoCsqXxx usan el miembro DriverContext[3] del IRP para contener información de contexto de IRP. Los controladores que usan estas rutinas para poner en cola los IRP deben dejar ese miembro sin usar.

Los autores de llamadas de IoCsqInsertIrpEx deben ejecutarse en un IRQL <= DISPATCH_LEVEL. Las rutinas de devolución de llamada del controlador deben funcionar correctamente en este IRQL.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows Server 2003 y versiones posteriores del sistema operativo Windows. La rutina también está disponible en la biblioteca Csq.lib que se incluye con el Kit de controladores de Windows (WDK) y el Kit de desarrollo de controladores (DDK) para Windows Server 2003. Los controladores que también deben funcionar en Windows XP, Windows 2000 y Windows 98/Me pueden vincular a Csq.lib para usar la rutina.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte la sección Comentarios)
Reglas de cumplimiento de DDI IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm) , RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Consulte también

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqRemoveIrp

IoCsqRemoveNextIrp