Condividi tramite


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
STATUS_INVALID_PARAMETER
È stato rilevato un parametro non valido.
STATUS_BUFFER_TOO_SMALL
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)

Vedi anche

WdfMemoryCopyFromBuffer