Compartilhar via


Função IoSkipCurrentIrpStackLocation (wdm.h)

A macro IoSkipCurrentIrpStackLocation modifica o ponteiro da matriz IO_STACK_LOCATION do sistema, de modo que, quando o driver atual chama o driver mais baixo, esse driver recebe a mesma estrutura 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.

Retornar valor

Nenhum

Comentários

Quando o driver envia um IRP para o driver mais baixo, o driver pode chamar IoSkipCurrentIrpStackLocation se você não pretende fornecer uma rotina IoCompletion (cujo endereço é armazenado na estrutura IO_STACK_LOCATION do driver). Se você chamar IoSkipCurrentIrpStackLocation antes de chamar IoCallDriver, o driver mais baixo receberá o mesmo IO_STACK_LOCATION que o driver recebeu.

Se você pretende fornecer uma rotina IoCompletion para o IRP, seu driver deve 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 SL_PENDING_RETURNED ainda será definido no membro Control 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 um bug marcar ou o processamento do IRP nunca seja concluído.

Em vez disso, um driver que tenha pendente um IRP 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 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 parâmetros da estrutura IO_STACK_LOCATION ou chamar IoMarkIrpPending.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000
Cabeçalho wdm.h
IRQL Qualquer nível