Partilhar via


Função IoSkipCurrentIrpStackLocation (wdm.h)

A macro IoSkipCurrentIrpStackLocation modifica o ponteiro de matriz IO_STACK_LOCATION do sistema, de modo que, quando o driver atual chama o driver mais baixo, esse driver recebe a mesma estrutura de IO_STACK_LOCATION que o driver atual recebeu.

Sintaxe

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

Parâmetros

[in, out] Irp

Um ponteiro para o IRP.

Valor de retorno

Nenhum

Observações

Quando o driver envia um IRP para o driver inferior seguinte, o driver pode chamar IoSkipCurrentIrpStackLocation se você não pretende fornecer uma rotina deIoCompletion(o endereço do qual é armazenado na estrutura de IO_STACK_LOCATION do driver). Se você chamar IoSkipCurrentIrpStackLocation antes de chamar IoCallDriver, o driver inferior seguinte receberá a mesma IO_STACK_LOCATION que o driver recebeu.

Se você pretende fornecer uma rotina de IoCompletion para o IRP, o driver deverá chamar IoCopyCurrentIrpStackLocationToNext em vez de IoSkipCurrentIrpStackLocation. Se um driver mal escrito cometer o erro de chamar IoSkipCurrentIrpStackLocation e, em seguida, definir uma rotina de conclusão, esse driver poderá substituir uma rotina de conclusão definida pelo driver acima dele.

Se o driver tiver pendente um IRP, o driver não deverá chamar IoSkipCurrentIrpStackLocation antes de passar o IRP para o próximo driver inferior. Se o driver chamar IoSkipCurrentIrpStackLocation em um IRP pendente antes de passá-lo para o próximo driver inferior, o sinalizador de SL_PENDING_RETURNED ainda será definido no membro controle do local da pilha de E/S para o próximo driver. Como o próximo driver possui esse local de pilha e pode modificá-lo, ele pode potencialmente limpar o sinalizador pendente. Essa situação pode fazer com que o sistema operacional emita uma verificação de bugs ou o processamento do IRP nunca seja concluído.

Em vez disso, um driver com um IRP pendente deve chamar IoCopyCurrentIrpStackLocationToNext para configurar um novo local de pilha para o próximo driver inferior antes de chamar IoCallDriver.

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

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 2000
cabeçalho wdm.h
IRQL Qualquer nível