Partager via


WdfMemoryCopyFromBuffer, fonction (wdfmemory.h)

[S’applique à KMDF et UMDF]

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

Syntaxe

NTSTATUS WdfMemoryCopyFromBuffer(
  [in] WDFMEMORY DestinationMemory,
  [in] size_t    DestinationOffset,
  [in] PVOID     Buffer,
  [in] size_t    NumBytesToCopyFrom
);

Paramètres

[in] DestinationMemory

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

[in] DestinationOffset

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

[in] Buffer

Pointeur vers une mémoire tampon source.

[in] NumBytesToCopyFrom

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

WdfMemoryCopyFromBuffer 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_INVALID_BUFFER_SIZE
Décalage d’octet que le paramètre DestinationOffset a spécifié était trop grand.
STATUS_BUFFER_TOO_SMALL
La taille de la mémoire tampon de destination spécifiée par le paramètre DestinationOffset , à partir du décalage de destination, était supérieure au paramètre NumBytesToCopyFrom .
 

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 vérifie que la mémoire tampon de destination est suffisamment grande pour recevoir la quantité de données spécifiée par le paramètre NumBytesToCopyFrom .

Pour plus d’informations sur les objets de mémoire du 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 WdfMemoryCopyFromBuffer doit être appelée à l’adresse IRQL <= APC_LEVEL. Sinon, la méthode peut être appelée au niveau de n’importe quel IRQL.

Exemples

L’exemple de code suivant obtient un handle pour l’objet mémoire du framework qui représente la mémoire tampon de sortie d’une requête d’E/S, puis copie le contenu d’une autre mémoire tampon dans la mémoire tampon de sortie de la requête d’E/S.

WDFMEMORY  memoryBuffer;
NTSTATUS  status;

status = WdfRequestRetrieveOutputMemory(
                                        Request,
                                        &memoryBuffer
                                        );
if (!NT_SUCCESS(status)) {
    goto Error;
}
status = WdfMemoryCopyFromBuffer(
                                 memoryBuffer,
                                 0,
                                 deviceContext->Buffer,
                                 Length
                                 );
if (!NT_SUCCESS(status)) {
    goto Error;
}

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

WdfMemoryCopyToBuffer

WdfRequestRetrieveOutputMemory