Fonction IoAllocateIrpEx (wdm.h)

IoAllocateIrpEx alloue un IRP à partir du pool système non paginé, éventuellement avec une extension IRP.

Syntaxe

PIRP IoAllocateIrpEx(
  PDEVICE_OBJECT DeviceObject,
  CCHAR          StackSize,
  BOOLEAN        ChargeQuota
);

Paramètres

DeviceObject

Pointeur vers l’objet d’appareil vers case activée pour déterminer s’il faut ajouter de l’espace pour une extension IRP. Lorsque DeviceObject est défini sur DEVICE_WITH_IRP_EXTENSION, l’espace pour l’extension IRP est également alloué.

StackSize

Nombre maximal d’emplacements de pile à allouer pour l’IRP. StackSize doit être au moins égal à stackSize de l’objet d’appareil du pilote inférieur suivant, mais peut être supérieur à cette valeur. Le pilote appelant n’a pas besoin d’allouer un emplacement de pile dans l’IRP pour lui-même.

ChargeQuota

La définition de ChargeQuota sur TRUE entraîne la facturation de la mémoire allouée pour l’IRP sur le quota pour le processus en cours. Ce paramètre ne peut être défini que par les pilotes de niveau supérieur appelés dans le contexte du thread à l’origine de la demande d’E/S pour laquelle le pilote alloue un autre IRP. Les pilotes intermédiaires doivent définir ce paramètre sur FALSE.

Valeur retournée

IoAllocateIrpEx retourne un pointeur vers l’IRP alloué et initialisé, ou NULL si un IRP n’a pas pu être alloué.

Remarques

IoAllocateIrpEx alloue les emplacements de pile StackSize et initialise l’IRP. Il n’associe pas l’IRP à un thread. Le pilote d’allocation doit libérer l’IRP au lieu de le renvoyer au gestionnaire d’E/S.

Un pilote intermédiaire ou de niveau supérieur peut appeler IoAllocateIrpEx pour créer des irps pour les demandes qu’il envoie aux pilotes de niveau inférieur. Un tel pilote doit initialiser l’IRP et doit définir sa routine de rappel IoCompletion dans l’IRP qu’il crée afin que l’appelant puisse se débarrasser de l’IRP lorsque les pilotes de niveau inférieur ont terminé le traitement de la demande. IoAllocateIrp initialise automatiquement les membres de l’IRP. N’utilisez pas IoInitializeIrp pour initialiser l’IRP avant sa première utilisation. (Vous pouvez utiliser IoInitializeIrp pour réutiliser un IRP que vous avez déjà utilisé dans certaines circonstances particulières. Pour plus d’informations, consultez Réutilisation des IRP .) Un pilote intermédiaire ou de niveau supérieur peut également appeler IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest ou IoBuildSynchronousFsdRequest pour configurer les demandes qu’il envoie aux pilotes de niveau inférieur. Seul un pilote de niveau supérieur peut appeler IoMakeAssociatedIrp.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 10 (version 1507)
Plateforme cible Universal
En-tête wdm.h (include wdm.h, ntddk.h, ntifs.h)
Bibliothèque ntoskrnl.lib
DLL ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Voir aussi

IO_STACK_LOCATION

IRP

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine