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 |
---|---|
|
Ein ungültiger Parameter wurde erkannt. |
|
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) |