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 :
- Llama a la rutina CsqAcquireLock de la cola para bloquear la cola.
- Llama a la rutina CsqInsertIrp de la cola para insertar el IRP.
- Marca el IRP como pendiente.
- Llama a la rutina CsqReleaseLock de la cola para desbloquear 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.