Função IoCsqInsertIrpEx (wdm.h)
A rotina IoCsqInsertIrpEx insere um IRP na fila irp cancel-safe do driver.
Sintaxe
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
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 . IoCsqInsertIrpEx 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.
[in, optional] InsertContext
Ponteiro para um valor de contexto definido pelo driver. Esse parâmetro será passado para a rotina CsqInsertIrpEx do driver, se ele tiver um. Caso contrário, esse parâmetro é ignorado.
Retornar valor
Se o parâmetro Csq tiver sido inicializado com IoCsqInitialize, IoCsqInsertIrpEx sempre retornará STATUS_SUCCESS. Se csq foi inicializado com IoCsqInitializeEx, IoCsqInsertIrpEx retorna o valor que foi retornado pela rotina CsqInsertIrpEx do driver.
Comentários
IoCsqInsertIrpEx usa as rotinas de expedição da fila para inserir o IRP. A rotina IoCsqInsertIrpEx :
- Chama a rotina CsqAcquireLock da fila para bloquear a fila.
- Se a estrutura de IO_CSQ da fila foi inicializada por IoCsqInitialize, IoCsqInsertIrpEx chama a rotina CsqInsertIrp da fila para inserir o IRP. Se a estrutura IO_CSQ da fila foi inicializada por IoCsqInitializeEx, IoCsqInsertIrpEx chama a rotina CsqInsertIrpEx da fila para inserir o IRP e passa o parâmetro InsertContext como o parâmetro InsertContext de CsqInsertIrpEx.
- Chama a rotina CsqReleaseLock da fila para desbloquear a fila.
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 IoCsqInsertIrpEx 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 Server 2003 e versões posteriores do sistema operacional Windows. A rotina também está disponível na biblioteca Csq.lib que acompanha o WDK (Kit de Driver do Windows) e o DDK (Kit de Desenvolvimento de Driver) para Windows Server 2003. Drivers que também devem funcionar no Windows XP, Windows 2000 e 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) |