Freigeben über


WdfMemoryCreatePreallocated-Funktion (wdfmemory.h)

[Gilt für KMDF und UMDF]

Die WdfMemoryCreatePreallocated-Methode erstellt ein Frameworkspeicherobjekt für einen vom Treiber bereitgestellten Speicherpuffer.

Syntax

NTSTATUS WdfMemoryCreatePreallocated(
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]           __drv_aliasesMem PVOID Buffer,
  [in]           size_t                 BufferSize,
  [out]          WDFMEMORY              *Memory
);

Die Parameter

[in, optional] Attributes

Ein Zeiger auf eine WDF_OBJECT_ATTRIBUTES Struktur, die Objektattribute für das neue Speicherobjekt enthält. Dieser Parameter ist optional und kann WDF_NO_OBJECT_ATTRIBUTES werden.

[in] Buffer

Ein Zeiger auf einen vom Treiber bereitgestellten Puffer.

[in] BufferSize

Die Nichtzero-Größe des Puffers, auf den Puffer verweist, in Byte.

[out] Memory

Ein Zeiger auf eine Position, die ein Handle für das neue Speicherobjekt empfängt.

Rückgabewert

WdfMemoryCreatePreallocated 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_INSUFFICIENT_RESOURCES
Nicht genügend Arbeitsspeicher vorhanden.
 

Eine Liste mit anderen Rückgabewerten, die von der WdfMemoryCreatePreallocated-Methode möglicherweise zurückgegeben werden, finden Sie unter Framework Object Creation Errors.

Diese Methode kann auch andere NTSTATUS-Wertezurückgeben.

Bemerkungen

Die WdfMemoryCreatePreallocated-Methode erstellt ein Frameworkspeicherobjekt für einen Puffer, den der Treiber zuvor zugewiesen oder abgerufen hat.

Ihr Treiber kann WdfMemoryCreatePreallocated aufrufen, wenn Sie Speicherobjekte erstellen müssen, die bereits vorhandene Speicherpuffer darstellen. Beispielsweise kann der Treiber eine treiberdefinierte Struktur innerhalb eines Puffers für eine E/A-Anforderung erhalten, die einen internen E/A-Steuerungscode enthält. Der Treiber kann WdfMemoryCreatePreallocated aufrufen, um ein Speicherobjekt zu erstellen, damit der Treiber die Struktur an ein E/A-Ziel übergeben kann.

Nachdem ein Treiber WdfMemoryCreatePreallocatedaufgerufen hat, kann der Treiber WdfMemoryAssignBuffer- aufrufen, um dem Speicherobjekt einen anderen Puffer zuzuweisen, der WdfMemoryCreatePreallocated erstellt wurde.

Das übergeordnete Standardobjekt für jedes Speicherobjekt ist das Framework-Treiberobjekt, das den Treiber darstellt, der WdfMemoryCreatePreallocatedaufgerufen wird. Wenn Ihr Treiber ein Speicherobjekt erstellt, das es mit einem bestimmten Geräteobjekt, Anforderungsobjekt oder einem anderen Frameworkobjekt verwendet, sollte das übergeordnete Objekt des Speicherobjekts entsprechend festgelegt werden. Das Speicherobjekt wird gelöscht, wenn das übergeordnete Objekt gelöscht wird. Wenn Sie das übergeordnete Standardobjekt nicht ändern, bleibt das Speicherobjekt im Arbeitsspeicher, bis der E/A-Manager den Treiber entlädt.

Ein Treiber kann auch ein Speicherobjekt löschen, indem WdfObjectDeleteaufgerufen wird.

Wenn das Framework-Speicherobjekt, das WdfMemoryCreatePreallocated erstellt wurde, gelöscht wird, führt das Framework keine Zuordnung des bereits vorhandenen Puffers durch. Ebenso führt ein Aufruf von WdfMemoryAssignBuffer keine Zuordnung des zuvor zugewiesenen Puffers durch.

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

Beispiele

Im folgenden Codebeispiel wird ein Puffer zugewiesen und anschließend ein Frameworkspeicherobjekt für den Puffer erstellt.

PVOID  pBuffer = NULL;
WDF_OBJECT_ATTRIBUTES  attributes;
WDFMEMORY  memHandle;

pBuffer = ExAllocatePoolWithTag(
                                NonPagedPool,
                                MY_BUFFER_SIZE,
                                MY_DRIVER_TAG
                                );
if (pBuffer == NULL){
    goto Error;
}
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
attributes.ParentObject = requestHandle;

status = WdfMemoryCreatePreallocated(
                                     &attributes,
                                     pBuffer,
                                     MY_BUFFER_SIZE,
                                     &memHandle
                                     );

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 <=DISPATCH_LEVEL
DDI-Complianceregeln BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqComp, DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Siehe auch

ExAllocatePoolWithTag-

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT

WdfMemoryAssignBuffer

WdfMemoryCreate

WdfMemoryCreateFromLookaside