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 |