Partager via


WdfMemoryCopyToBuffer, fonction (wdfmemory.h)

[S’applique à KMDF et UMDF]

La méthode WdfMemoryCopyToBuffer copie le contenu d’une mémoire tampon d’un objet mémoire spécifiée 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 de framework qui représente la mémoire tampon source.

[in] SourceOffset

Décalage, en octets, à partir 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 de retour

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
Décalage d’octet que le paramètre SourceOffset spécifié était trop volumineux, ou que 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 .

Une vérification de bogue 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 peut contenir.

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

Si la mémoire tampon source ou de destination a été allouée à partir du pool de mémoire paginables, la méthode WdfMemoryCopyToBuffer doit être appelée à 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;
}

Spécifications

Besoin Valeur
plateforme cible Universel
version minimale de KMDF 1.0
version minimale de UMDF 2.0
En-tête wdfmemory.h (include Wdf.h)
Bibliothèque Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF)
IRQL N’importe quel niveau (voir section Remarques)
règles de conformité DDI BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreCreA(kmdf)ate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

Voir aussi

WdfMemoryCopyFromBuffer