Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
[S’applique uniquement à KMDF]
La méthode WdfRequestCreateFromIrp crée un objet de requête d’infrastructure à partir d’un IRP WDM spécifié.
Syntaxe
NTSTATUS WdfRequestCreateFromIrp(
[in, optional] PWDF_OBJECT_ATTRIBUTES RequestAttributes,
[in] PIRP Irp,
[in] BOOLEAN RequestFreesIrp,
[out] WDFREQUEST *Request
);
Paramètres
[in, optional] RequestAttributes
Pointeur vers une structure WDF_OBJECT_ATTRIBUTES allouée par l’appelant qui spécifie les attributs d’objet pour l’objet de requête. Ce paramètre est facultatif et peut être WDF_NO_OBJECT_ATTRIBUTES.
[in] Irp
Pointeur vers une structure IRP qui contient un paquet de requête d’E/S WDM.
[in] RequestFreesIrp
Valeur booléenne qui, si TRUE, indique que l’infrastructure supprime l’IRP lorsque le handle de requête est détruit. Si FAUX, le pilote doit appeler IoFreeIrp pour supprimer le protocole IRP, en suivant les étapes décrites dans la section Exemples suivants.
[out] Request
Pointeur vers un emplacement qui reçoit un handle vers un objet de requête framework.
Valeur de retour
WdfRequestCreateFromIrp retourne STATUS_SUCCESS si l’opération réussit. Pour obtenir la liste des valeurs de retour supplémentaires, consultez Erreurs de création d’objets Framework.
Cette méthode peut également retourner d’autres valeurs NTSTATUS .
Remarques
En règle générale, les pilotes basés sur l’infrastructure appellent WdfRequestCreateFromIrp uniquement s’ils reçoivent des ADRESSES IP WDM dans une routine de distribution WDM, puis transfèrent les requêtes aux cibles d’E/S de l’infrastructure.
Si un pilote appelle WdfRequestCreateFromIrp pour créer un objet de requête, il ne doit pas appeler WdfRequestComplete pour l’objet de requête. Au lieu de cela, le pilote doit appeler WdfObjectDelete lorsqu’il a terminé d’utiliser l’objet de requête.
En outre, le pilote ne doit pas appeler WdfRequestRetrieveOutputMemory, WdfRequestRetrieveOutputBuffer, WdfRequestRetrieveInputBuffer, ou WdfRequestRetrieveInputMemory avec le nouvel objet de requête.
Par défaut, le parent de l’objet de nouvelle requête est l’objet de pilote d’infrastructure créé par la méthode WdfDriverCreate créée. Vous pouvez utiliser le membre ParentObject de la structure WDF_OBJECT_ATTRIBUTES pour spécifier un parent différent. L’infrastructure supprime l’objet de requête lorsqu’il supprime l’objet parent. Si votre pilote ne modifie pas le parent par défaut, le pilote doit supprimer l’objet de requête une fois l’objet terminé à l’aide de l’objet ; sinon, l’objet de requête reste jusqu’à ce que le gestionnaire d’E/S décharge votre pilote.
Pour plus d’informations sur la création d’objets de requête de framework, consultez Création d’objets de requête framework.
Les pilotes basés sur l’infrastructure ne doivent pas utiliser le membre Tail.Overlay.DriverContext de la structure IRP, car le framework utilise ce membre.
Exemples
Exemple 1
L’exemple de code suivant crée un objet de requête de framework à partir d’un IRP WDM spécifié, puis le supprime. Cet exemple montre comment définir le paramètre RequestFreesIrp sur TRUE. Par conséquent, l’infrastructure supprime l’IRP lorsque le handle de requête est détruit.
WDFREQUEST request;
PIRP irp;
//Creation
status = WdfRequestCreateFromIrp(
WDF_NO_OBJECT_ATTRIBUTES,
irp,
TRUE,
&request
);
...
//Deletion
WdfObjectDelete(request);
exemple 2
L’exemple de code suivant crée également un objet de requête de framework à partir d’un IRP WDM spécifié, puis le supprime. Cet exemple montre comment définir le paramètre RequestFreesIrp sur faux. Le pilote doit donc appeler IoFreeIrp pour supprimer le protocole IRP. Tous les appels de fonction dans l’exemple sont requis.
WDF_REQUEST_REUSE_PARAMS params;
WDFREQUEST request;
PIRP irp;
//Creation
status = WdfRequestCreateFromIrp(
WDF_NO_OBJECT_ATTRIBUTES,
irp,
FALSE,
&request
);
...
//Deletion
WDF_REQUEST_REUSE_PARAMS_INIT(
¶ms,
WDF_REQUEST_REUSE_NO_FLAGS,
STATUS_SUCCESS
);
WDF_REQUEST_REUSE_PARAMS_SET_NEW_IRP(
¶ms,
NULL
);
status = WdfRequestReuse(
request,
¶ms
);
ASSERT(NT_SUCCESS(status));
IoFreeIrp(irp);
WdfObjectDelete(request);
Exigences
| Exigence | Valeur |
|---|---|
| plateforme cible | Universel |
| version minimale de KMDF | 1.0 |
| d’en-tête | wdfrequest.h (include Wdf.h) |
| bibliothèque | Wdf01000.sys (voir Versioning de la bibliothèque Framework.) |
| IRQL | <=DISPATCH_LEVEL |
| règles de conformité DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |