Freigeben über


WdfMemoryCopyToBuffer-Funktion (wdfmemory.h)

[Gilt für KMDF und UMDF]

Die WdfMemoryCopyToBuffer Methode kopiert den Inhalt des Puffers eines angegebenen Speicherobjekts in einen angegebenen Zielpuffer.

Syntax

NTSTATUS WdfMemoryCopyToBuffer(
  [in]  WDFMEMORY SourceMemory,
  [in]  size_t    SourceOffset,
  [out] PVOID     Buffer,
  [in]  size_t    NumBytesToCopyTo
);

Die Parameter

[in] SourceMemory

Ein Handle zu einem Framework-Speicherobjekt, das den Quellpuffer darstellt.

[in] SourceOffset

Ein Offset (in Byte) vom Anfang des Quellpuffers. Der Kopiervorgang beginnt am angegebenen Offset im Quellpuffer.

[out] Buffer

Ein Zeiger auf einen Zielpuffer.

[in] NumBytesToCopyTo

Die Anzahl der Bytes, die aus dem Quellpuffer in den Zielpuffer kopiert werden sollen. Dieser Wert darf nicht größer als die Größe des Quellpuffers sein.

Rückgabewert

WdfMemoryCopyToBuffer gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt diese Methode möglicherweise einen der folgenden Werte zurück:

Rückgabecode BESCHREIBUNG
STATUS_INVALID_PARAMETER
Ein ungültiger Parameter wurde erkannt.
STATUS_BUFFER_TOO_SMALL
Der byte-Offset, den der angegebene SourceOffset-parameter war zu groß, oder der NumBytesToCopyTo Parameter war größer als die Größe des Quellpuffers.
 

Diese Methode kann auch andere NTSTATUS-Wertezurückgeben.

Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.

Bemerkungen

Das Framework lässt es dem Treiber nicht zu, mehr Bytes als den Quellpuffer zu kopieren, den der SourceMemory-parameter-Parameter angeben kann.

Weitere Informationen zu Framework-Speicherobjekten finden Sie unter Verwenden von Speicherpuffern.

Wenn der Quell- oder Zielpuffer aus dem ausgelagerten Speicherpool zugeordnet wurde, muss die WdfMemoryCopyToBuffer- Methode bei IRQL <= APC_LEVEL aufgerufen werden. Andernfalls kann die Methode bei jedem IRQL aufgerufen werden.

Beispiele

Im folgenden Codebeispiel wird ein neuer Puffer zugewiesen und der Inhalt des Puffers eines Speicherobjekts in den neuen Puffer kopiert.

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;
}

Anforderungen

Anforderung Wert
Zielplattform universell
Minimale KMDF-Version 1.0
Mindest-UMDF-Version 2.0
Kopfzeile wdfmemory.h (include Wdf.h)
Bibliothek Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Beliebige Ebene (siehe Abschnitt "Hinweise")
DDI-Complianceregeln BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCre, MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

Siehe auch

WdfMemoryCopyFromBuffer-