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 :
- Llama a la rutina CsqAcquireLock de la cola para bloquear la cola.
- 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.
- Llama a la rutina CsqReleaseLock de la cola para desbloquear 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) |