Função IoMarkIrpPending (wdm.h)

A rotina IoMarkIrpPending marca o IRP especificado, indicando que a rotina de expedição de um driver retornada posteriormente STATUS_PENDING porque o processamento adicional é exigido por outras rotinas de driver.

Sintaxe

void IoMarkIrpPending(
  [in, out] PIRP Irp
);

Parâmetros

[in, out] Irp

Ponteiro para o IRP a ser marcado como pendente.

Retornar valor

Nenhum

Comentários

A menos que a rotina de expedição do driver conclua o IRP (chamando IoCompleteRequest) ou passe o IRP para drivers inferiores, ele deve chamar IoMarkIrpPending com o IRP. Caso contrário, o gerente de E/S tentará concluir o IRP assim que a rotina de expedição retornar o controle.

Depois de chamar IoMarkIrpPending, a rotina de expedição deve retornar STATUS_PENDING, mesmo que alguma rotina conclua o IRP (chamando IoCompleteRequest) antes que a rotina de expedição chamada IoMarkIrpPending retorne.

Se um driver enfileirar IRPs de entrada, ele deverá chamar IoMarkIrpPending antes de enfileirar cada IRP. Caso contrário, um IRP poderia ser desempacoizado, concluído por outra rotina de driver e liberado pelo sistema antes que a chamada para IoMarkIrpPending ocorresse, causando assim uma falha.

Se um driver definir uma rotina IoCompletion para um IRP e passar o IRP para um driver inferior, a rotina IoCompletion deverá marcar o sinalizador IRP-PendingReturned>. Se o sinalizador estiver definido, a rotina IoCompletion deverá chamar IoMarkIrpPending com o IRP. As rotinas IoCompletion não retornam STATUS_PENDING. Para obter mais informações, consulte Implementando uma rotina IoCompletion.

Os drivers que criam o IRP e o enviam para outra pilha não devem chamar IoMarkIrpPending em sua rotina de conclusão. Essa chamada corromperá o cabeçalho do pool da próxima alocação porque não há um local de pilha para esses drivers.

Um driver que passa o IRP e aguarda um evento não deve marcar o IRP pendente. Em vez disso, sua rotina IoCompletion deve sinalizar o evento e retornar STATUS_MORE_PROCESSING_REQUIRED.

Se o driver chamar IoSkipCurrentIrpStackLocation, tenha cuidado para não modificar a estrutura IO_STACK_LOCATION de uma maneira que possa afetar involuntariamente o driver inferior ou o comportamento do sistema em relação a esse driver. Em particular, o driver não deve modificar a união parâmetros da estrutura IO_STACK_LOCATION e não deve chamar IoMarkIrpPending.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Qualquer nível
Regras de conformidade da DDI CompleteRequestStatusCheck(wdm), CompletionEventChecking(wdm), IrpCancelField(wdm), LowerDriverReturn(wdm), MarkDevicePower(wdm), MarkingInterlockedQueuedIrps(wdm), MarkingQueuedIrps(wdm), MarkIrpPending(wdm), MarkIrpPending2(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), PendedCompletedRequest3(wdm)

Confira também

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSkipCurrentIrpStackLocation

IoStartPacket