Partager via


Fonction IoAllocateIrp (wdm.h)

La routine IoAllocateIrp alloue un IRP, en fonction du nombre d’emplacements de pile d’E/S pour chaque pilote en couche sous l’appelant et, éventuellement, pour l’appelant. Voir aussi IoAllocateIrpEx.

Syntaxe

PIRP IoAllocateIrp(
  [in] CCHAR   StackSize,
  [in] BOOLEAN ChargeQuota
);

Paramètres

[in] StackSize

Spécifie le nombre d’emplacements de pile d’E/S à allouer pour l’IRP. Cette valeur doit être au moins égale à stackSize de l’objet de périphérique du pilote inférieur suivant, mais peut être supérieure à cette valeur. Le pilote appelant n’a pas besoin d’allouer un emplacement de pile dans l’IRP pour lui-même.

[in] ChargeQuota

Si vous définissez cette valeur sur TRUE , la mémoire allouée pour l’IRP est facturée sur le quota pour le processus en cours. Doit être défini sur FALSE par les pilotes intermédiaires. Cela peut être défini sur TRUE uniquement 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.

Valeur retournée

IoAllocateIrp retourne un pointeur vers un IRP, qui a été alloué à partir de l’espace système non paginé, ou NULL si un IRP n’a pas pu être alloué.

Remarques

La routine IoAllocateIrp 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 IoAllocateIrp 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 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 2000.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Règles de conformité DDI ForwardedAtBadIrqlAllocate(wdm),HwStorPortProhibitedDDDIs(storport),IoAllocateComplete(wdm), IoAllocateForward(wdm), IoAllocateFree(wdm), IoAllocateIrpSignalEventInCompletion(wdm), IoAllocateIrpSignalEventInCompletion2(wdm), IoAllocateIrpSignalEventInCompletion3(wdm), IoAllocateIrpSignalEventInCompletionTimeout(wdm), IoFreeIrp(storport), IoReuseIrp(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), SpNoWait(storport), StorPortStartIo(storport)

Voir aussi

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine