WdfMemoryAssignBuffer, fonction (wdfmemory.h)

[S’applique à KMDF et UMDF]

La méthode WdfMemoryAssignBuffer affecte une mémoire tampon spécifiée à un objet mémoire qu’un pilote a créé en appelant WdfMemoryCreatePreallocated.

Syntaxe

NTSTATUS WdfMemoryAssignBuffer(
  [in] WDFMEMORY Memory,
  [in] PVOID     Buffer,
  [in] size_t    BufferSize
);

Paramètres

[in] Memory

Handle d’un objet de mémoire framework obtenu en appelant WdfMemoryCreatePreallocated.

[in] Buffer

Pointeur vers une mémoire tampon fournie par le pilote.

[in] BufferSize

Taille différente de zéro, en octets, de la mémoire tampon vers laquelle la mémoire tampon pointe.

Valeur retournée

WdfMemoryAssignBuffer 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 non valide a été détecté.
 

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éthode peut affecter une mémoire tampon à un objet mémoire créé par WdfMemoryCreatePreallocated , mais pas à un objet mémoire créé par WdfMemoryCreate .

La mémoire tampon vers laquelle pointe le paramètre Tampon peut être allouée à partir du pool de mémoire paginable ou non paginable. Si le pilote alloue la mémoire tampon à partir du pool paginable ou si la mémoire tampon provient d’un pool paginable parce qu’elle provient d’une application en mode utilisateur, le pilote doit accéder à la mémoire tampon uniquement à l’adresse IRQL < DISPATCH_LEVEL. (Notez que les fonctions de rappel EvtCleanupCallback et EvtDestroyCallback du pilote, si elles sont fournies, peuvent être appelées à l’adresse IRQL <= DISPATCH_LEVEL.)

Pour plus d’informations sur les objets de mémoire framework, consultez Utilisation de mémoire tampons.

Exemples

L’exemple de code suivant alloue une mémoire tampon, puis l’affecte à un objet mémoire framework.

PVOID  pNewBuffer = NULL;

pNewBuffer = ExAllocatePoolWithTag(
                                   NonPagedPool,
                                   NEW_BUFFER_SIZE,
                                   MY_DRIVER_TAG
                                   );
if (pNewBuffer == NULL){
    goto Error;
}

status = WdfMemoryAssignBuffer(
                               memHandle,
                               pNewBuffer,
                               NEW_BUFFER_SIZE
                               );

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
Version UMDF minimale 2.0
En-tête wdfmemory.h (include Wdf.h)
Bibliothèque Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF)
IRQL N’importe quel niveau
Règles de conformité DDI BufAfterReqCompletedIntIoctlA(kmdf),BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

Voir aussi

ExAllocatePoolWithTag

WdfMemoryCreatePreallocated