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 |
---|---|
|
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) |