WdfRequestProbeAndLockUserBufferForWrite-Funktion (wdfrequest.h)

[Gilt nur für KMDF]

Die WdfRequestProbeAndLockUserBufferForWrite-Methode überprüft, ob der Benutzermoduspuffer einer E/A-Anforderung schreibbar ist, und sperrt dann die physischen Speicherseiten des Puffers, damit Treiber im Treiberstapel in den Puffer schreiben können.

Syntax

NTSTATUS WdfRequestProbeAndLockUserBufferForWrite(
  [in]  WDFREQUEST Request,
  [in]  PVOID      Buffer,
  [in]  size_t     Length,
  [out] WDFMEMORY  *MemoryObject
);

Parameter

[in] Request

Ein Handle für ein Frameworkanforderungsobjekt.

[in] Buffer

Ein Zeiger auf den Ausgabepuffer der Anforderung. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in] Length

Die Länge des Ausgabepuffers der Anforderung in Bytes.

[out] MemoryObject

Ein Zeiger auf einen Speicherort, der ein Handle für ein Frameworkspeicherobjekt empfängt, das den Benutzerausgabepuffer darstellt.

Rückgabewert

WdfRequestProbeAndLockUserBufferForWrite 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 Eingabeparameter ist ungültig.
STATUS_INVALID_USER_BUFFER
Der Length-Parameter ist 0 (null).
STATUS_INVALID_DEVICE_REQUEST
Die Anforderung wurde bereits abgeschlossen oder ist anderweitig ungültig.
STATUS_ACCESS_VIOLATION
Der aktuelle Thread ist nicht der Ersteller der E/A-Anforderung.
STATUS_INSUFFICIENT_RESOURCES
Es ist nicht genügend Arbeitsspeicher vorhanden, um den Vorgang abzuschließen.
 

Diese Methode gibt möglicherweise auch andere NTSTATUS-Werte zurück.

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

Hinweise

Der Benutzerausgabepuffer empfängt in der Regel Informationen, die der Treiber vom Gerät gelesen hat.

Nur ein Treiber der obersten Ebene kann die WdfRequestProbeAndLockUserBufferForWrite-Methode aufrufen, da die Methode den Prozesskontext des Prozesses erfordert, der die E/A-Anforderung erstellt hat.

Der vom Parameter Buffer festgelegte Benutzermoduspuffer kann der Puffer sein, den WdfRequestRetrieveUnsafeUserOutputBuffer abruft, oder es kann sich um einen anderen Ausgabepuffer im Benutzermodus handeln. Beispielsweise könnte ein E/A-Steuerungscode, der die gepufferte Zugriffsmethode verwendet, eine Struktur, die einen eingebetteten Zeiger enthält, an einen Benutzermoduspuffer übergeben. In diesem Fall kann der TreiberWdfRequestProbeAndLockUserBufferForWrite verwenden, um ein Speicherobjekt für den Puffer abzurufen.

Die vom Parameter Length angegebene Pufferlänge darf nicht größer als die tatsächliche Größe des Puffers sein. Andernfalls können Treiber auf Arbeitsspeicher außerhalb des Puffers zugreifen, was ein Sicherheitsrisiko darstellt.

Wenn WdfRequestProbeAndLockUserBufferForWrite STATUS_SUCCESS zurückgibt, empfängt der Treiber ein Handle für ein Frameworkspeicherobjekt, das den Benutzermoduspuffer darstellt. Für den Zugriff auf den Puffer muss der Treiber WdfMemoryGetBuffer aufrufen.

Das Frameworkspeicherobjekt wird automatisch freigegeben, wenn der Treiber WdfRequestComplete aufruft.

Weitere Informationen zu WdfRequestProbeAndLockUserBufferForWrite finden Sie unter Zugreifen auf Datenpuffer in Framework-Based Treibern.

Beispiele

Ein Codebeispiel, das WdfRequestProbeAndLockUserBufferForWrite verwendet, finden Sie unter WdfRequestProbeAndLockUserBufferForRead.

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
Kopfzeile wdfrequest.h (include Wdf.h)
Bibliothek Wdf01000.sys (siehe Versionsverwaltung der Frameworkbibliothek).)
IRQL PASSIVE_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

WdfMemoryGetBuffer

WdfRequestProbeAndLockUserBufferForRead

WdfRequestRetrieveUnsafeUserOutputBuffer