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.

Valor retornado

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 tenta concluir o IRP assim que a rotina de expedição retorna 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 enfileira os IRPs de entrada, ele deve chamar IoMarkIrpPending antes de enfileirar cada IRP. Caso contrário, um IRP pode ser desaqueado, concluído por outra rotina de driver e liberado pelo sistema antes que a chamada para IoMarkIrpPending ocorra, 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á verificar o sinalizador IRP-PendingReturned>. Se o sinalizador estiver definido, a rotina IoCompletion deverá chamar IoMarkIrpPending com o IRP. (No entanto, as rotinas de IoCompletion não retornam STATUS_PENDING. Para obter mais informações, consulte Implementando uma rotina IoCompletion.)

Nota 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 em 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

   
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Desktop
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL Qualquer nível
Regras de conformidade 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