WdfRequestProbeAndLockUserBufferForWrite, fonction (wdfrequest.h)

[S’applique uniquement à KMDF]

La méthode WdfRequestProbeAndLockUserBufferForWrite vérifie que la mémoire tampon en mode utilisateur d’une demande 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 de 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 d’un objet de requête d’infrastructure.

[in] Buffer

Pointeur vers la mémoire tampon de sortie de la requête. Pour plus d'informations, consultez la section Notes qui suit.

[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 de mémoire framework qui représente la mémoire tampon de sortie de l’utilisateur.

Valeur retournée

WdfRequestProbeAndLockUserBufferForWrite retourne STATUS_SUCCESS si l’opération réussit. Sinon, cette méthode peut retourner l’une des valeurs suivantes :

Code de retour Description
STATUS_INVALID_PARAMETER
Un paramètre d’entrée n’est pas valide.
STATUS_INVALID_USER_BUFFER
Le paramètre Length est égal à zéro.
STATUS_INVALID_DEVICE_REQUEST
La demande a déjà été effectuée ou n’est pas valide.
STATUS_ACCESS_VIOLATION
Le thread actuel n’est pas le créateur de la demande d’E/S.
STATUS_INSUFFICIENT_RESOURCES
La mémoire est insuffisante pour terminer l’opération.
 

Cette méthode peut également retourner d’autres valeurs NTSTATUS.

Un bogue case activée 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 les 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 demande d’E/S.

La mémoire tampon en mode utilisateur spécifiée par le paramètre Buffer peut être la mémoire tampon que 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é à une mémoire tampon en mode utilisateur. Dans ce cas, le pilote peut utiliserWdfRequestProbeAndLockUserBufferForWrite pour obtenir un objet de mémoire pour la mémoire tampon.

La longueur de 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 de mémoire 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 de mémoire 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 les pilotes Framework-Based.

Exemples

Pour obtenir un exemple de code qui utilise WdfRequestProbeAndLockUserBufferForWrite, consultez WdfRequestProbeAndLockUserBufferForRead.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
En-tête wdfrequest.h (include Wdf.h)
Bibliothèque Wdf01000.sys (consultez Gestion de version de la bibliothèque d’infrastructure.)
IRQL PASSIVE_LEVEL
Règles de conformité DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Voir aussi

WdfMemoryGetBuffer

WdfRequestProbeAndLockUserBufferForRead

WdfRequestRetrieveUnsafeUserOutputBuffer