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