WdfRequestCreate, fonction (wdfrequest.h)
[S’applique à KMDF et UMDF]
La méthode WdfRequestCreate crée un objet de requête de framework vide.
Syntaxe
NTSTATUS WdfRequestCreate(
[in, optional] PWDF_OBJECT_ATTRIBUTES RequestAttributes,
[in, optional] WDFIOTARGET IoTarget,
[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, optional] IoTarget
Handle vers un objet cible d’E/S de framework. Ce paramètre est facultatif et peut être NULL. SiNULL, WdfRequestCreate vérifie que le pilote peut éventuellement envoyer la requête à la cible d’E/S spécifiée.
[out] Request
Pointeur vers un emplacement qui reçoit un handle vers un objet de requête framework.
Valeur de retour
WdfRequestCreate retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :
Retourner le code | Description |
---|---|
|
Un paramètre d’entrée n’est pas valide. |
|
Il existe des ressources système insuffisantes pour terminer l’opération. |
|
Le tableau d’emplacements de pile d’E/S de la requête n’est pas suffisamment grand pour permettre au pilote d’envoyer la requête à la cible d’E/S spécifiée. |
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
Un pilote basé sur l’infrastructure peut appeler WdfRequestCreate pour créer une demande que le pilote passe par la suite à d’autres fonctions d’infrastructure pour l’initialisation. Par exemple, un pilote pour un périphérique USB peut appeler WdfUsbTargetPipeFormatRequestForRead pour mettre en forme une nouvelle demande de lecture.
Un pilote basé sur l’infrastructure qui communique avec des pilotes WDM peut spécifier le contenu d’une requête en appelant WdfRequestCreateFromIrp.
Si un pilote appelle WdfRequestCreate 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. Pour plus d’informations, consultez Fin des requêtes d’E/S.
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 l’appel WdfRequestCreate, consultez Création d’objets de requête framework.
Exemples
L’exemple de code suivant crée un objet cible d’E/S, initialise une structure WDF_OBJECT_ATTRIBUTES et appelle WdfRequestCreate. Le parent du nouvel objet de requête est l’objet cible d’E/S.
WDF_OBJECT_ATTRIBUTES attributes;
WDFREQUEST newRequest;
WDFIOTARGET ioTarget;
...
status = WdfIoTargetCreate(
Device,
WDF_NO_OBJECT_ATTRIBUTES,
&ioTarget
);
...
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
attributes.ParentObject = ioTarget;
status = WdfRequestCreate(
&attributes,
ioTarget,
&newRequest
);
if (!NT_SUCCESS(status)) {
return status;
}
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
version minimale de KMDF | 1.0 |
version minimale de UMDF | 2.0 |
d’en-tête | wdfrequest.h (include Wdf.h) |
bibliothèque | Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
règles de conformité DDI | DriverCreate(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), ReqDelete(kmdf), RequestForUrbXrb(kmdf), RequestSendAndForgetNoFormatting2(kmdf) |