Função IoCsqInsertIrp (wdm.h)

A rotina IoCsqInsertIrp insere um IRP na fila irp cancel-safe do driver.

Sintaxe

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

Parâmetros

[in, out] Csq

Ponteiro para a estrutura de IO_CSQ para a fila IRP cancel-safe do driver. Essa estrutura deve ter sido inicializada por IoCsqInitialize ou IoCsqInitializeEx.

[in, out] Irp

Ponteiro para o IRP a ser enfileirado.

[out, optional] Context

Ponteiro para uma estrutura IO_CSQ_IRP_CONTEXT . IoCsqInsertIrp inicializa essa estrutura com informações de contexto para o IRP inserido. O driver passa esse valor para IoCsqRemoveIrp para excluir o IRP da fila. O contexto poderá ser NULL se o driver não usar IoCsqRemoveIrp para remover esse IRP da fila.

Retornar valor

Nenhum

Comentários

IoCsqInsertIrp usa as rotinas de expedição da fila para inserir o IRP. A rotina IoCsqInsertIrp :

  1. Chama a rotina CsqAcquireLock da fila para bloquear a fila.
  2. Chama a rotina CsqInsertIrp da fila para inserir o IRP.
  3. Marca o IRP como pendente.
  4. Chama a rotina CsqReleaseLock da fila para desbloquear a fila.
Se o IRP a ser inserido já tiver sido cancelado, IoCsqInsertIrp não tentará inserir o IRP na fila.

Os drivers também podem usar IoCsqInsertIrpEx para inserir um IRP na fila. Para uma fila especificada por IoCsqInitializeEx, IoCsqInsertIrpEx fornece recursos adicionais. Para obter mais informações, consulte Filas IRP cancel-safe.

Observe que as rotinas do IoCsqXxx usam o membro DriverContext[3] do IRP para armazenar informações de contexto IRP. Os drivers que usam essas rotinas para enfileirar IRPs devem deixar esse membro não utilizado.

Os chamadores de IoCsqInsertIrp devem estar em execução em um IRQL <= DISPATCH_LEVEL. As rotinas de retorno de chamada do driver devem funcionar corretamente nesse IRQL.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows XP e versões posteriores do Windows. Os drivers que também devem funcionar no Windows 2000 e no Windows 98/Me podem, em vez disso, vincular ao Csq.lib para usar a rotina.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (consulte a seção Comentários)
Regras de conformidade da 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)

Confira também

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp