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 |
---|---|
|
Un paramètre non valide a été détecté. |
|
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) |