Partager via


Fonction WdfMemoryCopyToBuffer (wdfmemory.h)

[S’applique à KMDF et UMDF]

La méthode WdfMemoryCopyToBuffer copie le contenu de la mémoire tampon d’un objet mémoire spécifié dans une mémoire tampon de destination spécifiée.

Syntaxe

NTSTATUS WdfMemoryCopyToBuffer(
  [in]  WDFMEMORY SourceMemory,
  [in]  size_t    SourceOffset,
  [out] PVOID     Buffer,
  [in]  size_t    NumBytesToCopyTo
);

Paramètres

[in] SourceMemory

Handle vers un objet de mémoire framework qui représente la mémoire tampon source.

[in] SourceOffset

Décalage, en octets, du début de la mémoire tampon source. L’opération de copie commence au décalage spécifié dans la mémoire tampon source.

[out] Buffer

Pointeur vers une mémoire tampon de destination.

[in] NumBytesToCopyTo

Nombre d’octets à copier de la mémoire tampon source vers la mémoire tampon de destination. Cette valeur ne doit pas être supérieure à la taille de la mémoire tampon source.

Valeur retournée

WdfMemoryCopyToBuffer 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é.
STATUS_BUFFER_TOO_SMALL
Le décalage d’octet spécifié par le paramètre SourceOffset était trop grand ou le paramètre NumBytesToCopyTo était supérieur à la taille de la mémoire tampon source.
 

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

L’infrastructure n’autorise pas le pilote à copier plus d’octets que la mémoire tampon source que le paramètre SourceMemory spécifie peut contenir.

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

Si la mémoire tampon source ou de destination a été allouée à partir du pool de mémoire paginable, la méthode WdfMemoryCopyToBuffer doit être appelée à l’adresse IRQL <= APC_LEVEL. Sinon, la méthode peut être appelée à n’importe quel IRQL.

Exemples

L’exemple de code suivant alloue une nouvelle mémoire tampon et copie le contenu de la mémoire tampon d’un objet mémoire dans la nouvelle mémoire tampon.

PVOID  pOutputBuffer = NULL;
NTSTATUS  status = STATUS_SUCCESS;

pOutputBuffer = ExAllocatePoolWithTag(
                                      NonPagedPool,
                                      MY_BUFFER_LENGTH,
                                      MY_POOL_TAG
                                      );
if (pOutputBuffer != NULL){
    status = WdfMemoryCopyToBuffer(
                                   outputMemoryHandle,
                                   0,
                                   pOutputBuffer,
                                   MY_BUFFER_LENGTH
                                   );
}
else{
    status = STATUS_INSUFFICIENT_RESOURCES;
}

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 (voir la section Remarques)
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

WdfMemoryCopyFromBuffer