Partager via


Fonction IoSkipCurrentIrpStackLocation (wdm.h)

La macro IoSkipCurrentIrpStackLocation modifie le pointeur de tableau IO_STACK_LOCATION du système, de sorte que lorsque le pilote actuel appelle le pilote inférieur suivant, ce pilote reçoit la même structure IO_STACK_LOCATION que le pilote actuel.

Syntaxe

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

Paramètres

[in, out] Irp

Pointeur vers l’IRP.

Valeur de retour

None

Remarques

Lorsque votre pilote envoie un IRP au pilote inférieur suivant, il peut appeler IoSkipCurrentIrpStackLocation si vous n’avez pas l’intention de fournir une routine IoCompletion (dont l’adresse est stockée dans la structure IO_STACK_LOCATION du pilote). Si vous appelez IoSkipCurrentIrpStackLocation avant d’appeler IoCallDriver, le pilote inférieur suivant reçoit les mêmes IO_STACK_LOCATION que votre pilote a reçu.

Si vous envisagez de fournir une routine IoCompletion pour l’IRP, votre pilote doit appeler IoCopyCurrentIrpStackLocationToNext au lieu de IoSkipCurrentIrpStackLocation. Si un pilote mal écrit fait l’erreur d’appeler IoSkipCurrentIrpStackLocation , puis de définir une routine d’achèvement, ce pilote peut remplacer une routine d’achèvement définie par le pilote situé au-dessus.

Si le pilote a suspendu une IRP, il ne doit pas appeler IoSkipCurrentIrpStackLocation avant de passer l’IRP au pilote inférieur suivant. Si le pilote appelle IoSkipCurrentIrpStackLocation sur un IRP suspendu avant de le transmettre au pilote inférieur suivant, l’indicateur SL_PENDING_RETURNED est toujours défini dans le membre Contrôle de l’emplacement de la pile d’E/S du pilote suivant. Étant donné que le pilote suivant possède cet emplacement de pile et peut le modifier, il peut potentiellement effacer l’indicateur en attente. Cette situation peut entraîner l’émission d’un bogue case activée par le système d’exploitation ou le traitement de l’IRP à ne jamais être terminé.

Au lieu de cela, un pilote qui a suspendu un IRP doit appeler IoCopyCurrentIrpStackLocationToNext pour configurer un nouvel emplacement de pile pour le pilote inférieur suivant avant d’appeler IoCallDriver.

Si votre pilote appelle IoSkipCurrentIrpStackLocation, veillez à ne pas modifier la structure IO_STACK_LOCATION d’une manière susceptible d’affecter involontairement le pilote inférieur ou le comportement du système par rapport à ce pilote. Par exemple, la modification de l’union des paramètres de la structure IO_STACK_LOCATION ou l’appel d’IoMarkIrpPending.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000
En-tête wdm.h
IRQL N’importe quel niveau