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 |
---|---|
|
Ein Eingabeparameter ist ungültig. |
|
Der Length-Parameter ist 0 (null). |
|
Die Anforderung wurde bereits abgeschlossen oder ist anderweitig ungültig. |
|
Der aktuelle Thread ist nicht der Ersteller der E/A-Anforderung. |
|
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) |