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 WdfRequestProbeAndLockUserBufferForWrite vérifie qu’une mémoire tampon en mode utilisateur d’une requête d’E/S est accessible en écriture, puis verrouille les pages de mémoire physique de la mémoire tampon afin que les pilotes de la pile des pilotes puissent écrire dans la mémoire tampon.
Syntaxe
NTSTATUS WdfRequestProbeAndLockUserBufferForWrite(
[in] WDFREQUEST Request,
[in] PVOID Buffer,
[in] size_t Length,
[out] WDFMEMORY *MemoryObject
);
Paramètres
[in] Request
Handle vers un objet de requête de framework.
[in] Buffer
Pointeur vers la mémoire tampon de sortie de la requête. Pour plus d’informations, consultez la section Remarques suivante.
[in] Length
Longueur, en octets, de la mémoire tampon de sortie de la requête.
[out] MemoryObject
Pointeur vers un emplacement qui reçoit un handle vers un objet mémoire framework qui représente la mémoire tampon de sortie de l’utilisateur.
Valeur de retour
WdfRequestProbeAndLockUserBufferForWrite 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. |
|
Le paramètre Length est égal à zéro. |
|
La demande a déjà été effectuée ou n’est pas valide. |
|
Le thread actuel n’est pas le créateur de la requête d’E/S. |
|
La mémoire est insuffisante pour terminer l’opération. |
Cette méthode peut également retourner d’autres valeurs NTSTATUS .
Une vérification de bogue se produit si le pilote fournit un handle d’objet non valide.
Remarques
La mémoire tampon de sortie de l’utilisateur reçoit généralement des informations que le pilote a lues à partir de l’appareil.
Seul un pilote de niveau supérieur peut appeler la méthode WdfRequestProbeAndLockUserBufferForWrite, car la méthode nécessite le contexte de processus du processus qui a créé la requête d’E/S.
La mémoire tampon en mode utilisateur spécifiée par le paramètre buffer peut être la mémoire tampon qui WdfRequestRetrieveUnsafeUserOutputBuffer récupère, ou il peut s’agir d’une mémoire tampon de sortie en mode utilisateur différente. Par exemple, un code de contrôle d’E/S qui utilise la méthode d’accès mis en mémoire tampon peut passer une structure qui contient un pointeur incorporé vers une mémoire tampon en mode utilisateur. Dans ce cas, le pilote peut utiliserWdfRequestProbeAndLockUserBufferForWrite pour obtenir un objet mémoire pour la mémoire tampon.
La longueur de la mémoire tampon spécifiée par le paramètre Length ne doit pas être supérieure à la taille réelle de la mémoire tampon. Sinon, les pilotes peuvent accéder à la mémoire en dehors de la mémoire tampon, ce qui constitue un risque de sécurité.
Si WdfRequestProbeAndLockUserBufferForWrite retourne STATUS_SUCCESS, le pilote reçoit un handle vers un objet mémoire du framework qui représente la mémoire tampon en mode utilisateur. Pour accéder à la mémoire tampon, le pilote doit appeler WdfMemoryGetBuffer.
L’objet mémoire du framework est automatiquement libéré lorsque le pilote appelle WdfRequestComplete.
Pour plus d’informations sur WdfRequestProbeAndLockUserBufferForWrite, consultez Accès aux mémoires tampons de données dans Framework-Based Drivers.
Exemples
Pour obtenir un exemple de code qui utilise WdfRequestProbeAndLockUserBufferForWrite, consultez WdfRequestProbeAndLockUserBufferForRead.
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 | PASSIVE_LEVEL |
| règles de conformité DDI | DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |