Funzione WdfMemoryCopyToBuffer (wdfmemory.h)
[Si applica a KMDF e UMDF]
Il metodo WdfMemoryCopyToBuffer copia il contenuto del buffer di un oggetto memoria specificato in un buffer di destinazione specificato.
Sintassi
NTSTATUS WdfMemoryCopyToBuffer(
[in] WDFMEMORY SourceMemory,
[in] size_t SourceOffset,
[out] PVOID Buffer,
[in] size_t NumBytesToCopyTo
);
Parametri
[in] SourceMemory
Handle per un oggetto memoria del framework che rappresenta il buffer di origine.
[in] SourceOffset
Offset, in byte, dall'inizio del buffer di origine. L'operazione di copia inizia in corrispondenza dell'offset specificato nel buffer di origine.
[out] Buffer
Puntatore a un buffer di destinazione.
[in] NumBytesToCopyTo
Numero di byte da copiare dal buffer di origine al buffer di destinazione. Questo valore non deve essere maggiore della dimensione del buffer di origine.
Valore restituito
WdfMemoryCopyToBuffer restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questo metodo potrebbe restituire uno dei valori seguenti:
Codice restituito | Descrizione |
---|---|
|
È stato rilevato un parametro non valido. |
|
Offset di byte specificato dal parametro SourceOffset troppo grande oppure il parametro NumBytesToCopyToCopyTo è maggiore delle dimensioni del buffer di origine. |
Questo metodo potrebbe anche restituire altri valori NTSTATUS.
Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.
Commenti
Il framework non consente al driver di copiare più byte del buffer di origine che il parametro SourceMemory specifica può contenere.
Per altre informazioni sugli oggetti di memoria del framework, vedere Uso dei buffer di memoria.
Se il buffer di origine o di destinazione è stato allocato dal pool di memoria di paging, il metodo WdfMemoryCopyToBuffer deve essere chiamato in IRQL <= APC_LEVEL. In caso contrario, il metodo può essere chiamato in qualsiasi IRQL.
Esempio
Nell'esempio di codice seguente viene allocato un nuovo buffer e viene copiato il contenuto del buffer di un oggetto memoria nel nuovo buffer.
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;
}
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Versione KMDF minima | 1,0 |
Versione UMDF minima | 2,0 |
Intestazione | wdfmemory.h (include Wdf.h) |
Libreria | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | Qualsiasi livello (vedere la sezione Osservazioni) |
Regole di conformità DDI | BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf) |