Condividi tramite


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

Vedere anche

WdfMemoryCopyFromBuffer