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) |