Función IoCsqInsertIrp (wdm.h)

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

Sintaxis

void IoCsqInsertIrp(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context
);

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 . IoCsqInsertIrp 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.

Valor devuelto

None

Observaciones

IoCsqInsertIrp usa las rutinas de distribución de la cola para insertar el IRP. La rutina IoCsqInsertIrp :

  1. Llama a la rutina CsqAcquireLock de la cola para bloquear la cola.
  2. Llama a la rutina CsqInsertIrp de la cola para insertar el IRP.
  3. Marca el IRP como pendiente.
  4. Llama a la rutina CsqReleaseLock de la cola para desbloquear la cola.
Si el IRP que se va a insertar ya se ha cancelado, IoCsqInsertIrp no intenta insertar el IRP en la cola.

Los controladores también pueden usar IoCsqInsertIrpEx para insertar un IRP en la cola. Para una cola especificada por IoCsqInitializeEx, IoCsqInsertIrpEx proporciona funcionalidades adicionales. 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 IoCsqInsertIrp deben ejecutarse en un IRQL <= DISPATCH_LEVEL. Las rutinas de devolución de llamada del controlador deben funcionar correctamente en ese IRQL.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows XP y versiones posteriores de Windows. Los controladores que también deben funcionar en 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

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp