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

Parameter

[in] SourceMemory

Ein Handle für ein Frameworkspeicherobjekt, das den Quellpuffer darstellt.

[in] SourceOffset

Ein Offset in Bytes 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 Byteoffset,der vom SourceOffset-Parameter angegeben wurde, war zu groß, oder der NumBytesToCopyTo-Parameter war größer als die Größe des Quellpuffers.
 

Diese Methode kann auch andere NTSTATUS-Werte zurückgeben.

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

Hinweise

Das Framework erlaubt dem Treiber nicht, mehr Bytes zu kopieren, als der Quellpuffer, den der SourceMemory-Parameter angibt, enthalten kann.

Weitere Informationen zu Frameworkspeicherobjekten finden Sie unter Verwenden von Speicherpuffern.

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

Beispiele

Im folgenden Codebeispiel wird ein neuer Puffer zugeordnet 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
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile wdfmemory.h (einschließen von 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), DriverCreate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

Weitere Informationen

WdfMemoryCopyFromBuffer