WdfMemoryAssignBuffer-Funktion (wdfmemory.h)
[Gilt für KMDF und UMDF]
Die WdfMemoryAssignBuffer--Methode weist einem Speicherobjekt einen angegebenen Puffer zu, den ein treiber, der durch Aufrufen WdfMemoryCreatePreallocatederstellt wurde.
Syntax
NTSTATUS WdfMemoryAssignBuffer(
[in] WDFMEMORY Memory,
[in] PVOID Buffer,
[in] size_t BufferSize
);
Die Parameter
[in] Memory
Ein Handle für ein Framework-Speicherobjekt, das durch Aufrufen von WdfMemoryCreatePreallocatedabgerufen wurde.
[in] Buffer
Ein Zeiger auf einen vom Treiber bereitgestellten Puffer.
[in] BufferSize
Die Nichtzero-Größe des Puffers, auf den Puffer verweist, in Byte.
Rückgabewert
WdfMemoryAssignBuffer 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. |
Diese Methode kann auch andere NTSTATUS-Wertezurückgeben.
Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.
Bemerkungen
Die Methode kann einem Speicherobjekt einen Puffer zuweisen, der erstellt WdfMemoryCreatePreallocated erstellt, jedoch nicht einem Speicherobjekt, das WdfMemoryCreate erstellt.
Der Puffer, auf den der Buffer Parameter verweist, kann aus dem ausgelagerten oder nicht ausgelagerten Speicherpool zugeordnet werden. Wenn der Treiber den Puffer aus dem ausgelagerten Pool zuweist oder der Puffer aus einem ausgelagerten Pool stammt, da er von einer Benutzermodusanwendung stammt, muss der Treiber nur auf den Puffer auf IRQL-< DISPATCH_LEVEL zugreifen. (Beachten Sie, dass die EvtCleanupCallback- und EvtDestroyCallback- Rückruffunktionen( sofern angegeben) bei IRQL <= DISPATCH_LEVEL aufgerufen werden können.)
Weitere Informationen zu Framework-Speicherobjekten finden Sie unter Verwenden von Speicherpuffern.
Beispiele
Im folgenden Codebeispiel wird ein Puffer zugewiesen und anschließend einem Frameworkspeicherobjekt der Puffer zugewiesen.
PVOID pNewBuffer = NULL;
pNewBuffer = ExAllocatePoolWithTag(
NonPagedPool,
NEW_BUFFER_SIZE,
MY_DRIVER_TAG
);
if (pNewBuffer == NULL){
goto Error;
}
status = WdfMemoryAssignBuffer(
memHandle,
pNewBuffer,
NEW_BUFFER_SIZE
);
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 |
DDI-Complianceregeln | BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCre, MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf) |