Funzione WdfMemoryCopyToBuffer (wdfmemory.h)
[Si applica a KMDF e UMDF]
Il metodo WdfMemoryCopyToBuffer copia il contenuto del buffer di un oggetto di 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 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 delle dimensioni 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. |
|
L'offset di byte specificato dal parametro SourceOffset era troppo grande oppure il parametro NumBytesToCopyTo era 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.
Osservazioni:
Il framework non consente al driver di copiare più byte rispetto al buffer di origine che il SourceMemory parametro può contenere.
Per altre informazioni sugli oggetti di memoria del framework, vedere Using Memory Buffers.
Se il buffer di origine o di destinazione è stato allocato dal pool di memoria pageable, è necessario chiamare il metodo di WdfMemoryCopyToBuffer in IRQL <= APC_LEVEL. In caso contrario, il metodo può essere chiamato in qualsiasi IRQL.
Esempi
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 minima di KMDF | 1.0 |
versione minima di UMDF | 2.0 |
intestazione | wdfmemory.h (include Wdf.h) |
Biblioteca | 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) |