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 suivant, ce pilote reçoit la même structure IO_STACK_LOCATION que celle reçue par le pilote actuel.

Syntaxe

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

Paramètres

[in, out] Irp

Pointeur vers l’IRP.

Valeur de retour

Aucun

Remarques

Lorsque votre pilote envoie un IRP au pilote inférieur suivant, votre pilote peut appeler IoSkipCurrentIrpStackLocation si vous n’avez pas l’intention de fournir une routine IoCompletion (l’adresse qui 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 celui reçu par votre pilote.

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 au-dessus.

Si le pilote a suspendu un IRP, le pilote ne doit pas appeler IoSkipCurrentIrrentIrpStackLocation avant de passer l’IRP au pilote inférieur suivant. Si le pilote appelle IoSkipCurrentIrpStackLocation sur un IRP pendu avant de le passer au pilote inférieur suivant, l’indicateur SL_PENDING_RETURNED est toujours défini dans le Control membre de la pile d’E/S pour le pilote suivant. Étant donné que le pilote suivant possède cet emplacement de pile et peut le modifier, il peut éventuellement effacer l’indicateur en attente. Cette situation peut entraîner l’émission d’une vérification des bogues 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 qui pourrait affecter involontairement le pilote inférieur ou le comportement du système par rapport à ce pilote. Les exemples incluent la modification de l'IO_STACK_LOCATIONParameters union ou l’appel IoMarkIrpPending.

Exigences

Exigence Valeur
client minimum pris en charge Windows 2000
d’en-tête wdm.h
IRQL N’importe quel niveau