Condividi tramite


Funzione WdfMemoryCopyFromBuffer (wdfmemory.h)

[Si applica a KMDF e UMDF]

Il metodo WdfMemoryCopyFromBuffer copia il contenuto di un buffer di origine specificato nel buffer dell'oggetto memoria specificato.

Sintassi

NTSTATUS WdfMemoryCopyFromBuffer(
  [in] WDFMEMORY DestinationMemory,
  [in] size_t    DestinationOffset,
  [in] PVOID     Buffer,
  [in] size_t    NumBytesToCopyFrom
);

Parametri

[in] DestinationMemory

Handle per un oggetto memoria del framework che rappresenta il buffer di destinazione.

[in] DestinationOffset

Offset, in byte, dall'inizio del buffer di destinazione. L'operazione di copia inizia con l'offset specificato nel buffer di destinazione.

[in] Buffer

Puntatore a un buffer di origine.

[in] NumBytesToCopyFrom

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

WdfMemoryCopyFromBuffer 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_INVALID_BUFFER_SIZE
Offset di byte specificato dal parametro DestinationOffset troppo grande.
STATUS_BUFFER_TOO_SMALL
La dimensione del buffer di destinazione specificata dal parametro DestinationOffset , a partire dall'offset di destinazione, è maggiore del parametro NumBytesToCopyFrom .
 

Questo metodo potrebbe restituire anche altri valori NTSTATUS.

Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.

Commenti

Il framework verifica che il buffer di destinazione sia sufficiente per ricevere la quantità di dati specificati dal parametro NumBytesToCopyFrom .

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 paginabile, il metodo WdfMemoryCopyFromBuffer 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 ottenuto un handle per l'oggetto memoria del framework che rappresenta il buffer di output della richiesta di I/O e quindi copia il contenuto di un altro buffer nel buffer di output della richiesta di I/O.

WDFMEMORY  memoryBuffer;
NTSTATUS  status;

status = WdfRequestRetrieveOutputMemory(
                                        Request,
                                        &memoryBuffer
                                        );
if (!NT_SUCCESS(status)) {
    goto Error;
}
status = WdfMemoryCopyFromBuffer(
                                 memoryBuffer,
                                 0,
                                 deviceContext->Buffer,
                                 Length
                                 );
if (!NT_SUCCESS(status)) {
    goto Error;
}

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

WdfMemoryCopyToBuffer

WdfRequestRetrieveOutputMemory