Partager via


IoAllocateIrpEx, fonction (wdm.h)

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

Syntaxe

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

Paramètres

DeviceObject

Pointeur vers l’objet de l’appareil pour vérifier 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 à l'StackSize de l’objet périphérique 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 ChargeQuota sur TRUE entraîne la facturation de la mémoire allouée pour l’IRP par rapport au quota du processus actuel. Ce paramètre peut être défini TRUE uniquement par les pilotes de niveau supérieur qui sont appelés dans le contexte du thread qui provient 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 de retour

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

Remarques

IoAllocateIrpEx alloue StackSize emplacements de pile 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 définir sa routine de rappel IoCompletion dans l’IRP qu’il crée afin que l’appelant puisse supprimer 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 spéciales. Pour plus d’informations, consultez réutilisation des irPs.) Un pilote intermédiaire ou de niveau supérieur peut également appeler IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest ou IoBuildSynchronousFsdRequest pour configurer les requêtes qu’il envoie aux pilotes de niveau inférieur. Seul un pilote de niveau supérieur peut appeler IoMakeAssociatedIrp.

Exigences

Exigence Valeur
client minimum pris en charge Disponible à partir de Windows 10 (version 1507)
plateforme cible Universel
d’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