WdfRequestProbeAndLockUserBufferForWrite-Funktion (wdfrequest.h)
[Gilt nur für KMDF]
Die WdfRequestProbeAndLockUserBufferForWrite Methode überprüft, ob der Benutzermoduspuffer einer E/A-Anforderung schreibgeschützt ist, und sperrt dann die physischen Speicherseiten des Puffers, sodass 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 zu einem Framework-Anforderungsobjekt.
[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 eine Position, die ein Handle für ein Framework-Speicherobjekt 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 parameter Length ist 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 kann auch andere NTSTATUS-Wertezurückgeben.
Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.
Bemerkungen
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 für die Methode der Prozesskontext erforderlich ist, der die E/A-Anforderung erstellt hat.
Der Benutzermoduspuffer, den der parameter Buffer angibt, kann der Puffer sein, der WdfRequestRetrieveUnsafeUserOutputBuffer abgerufen oder ein anderer Ausgabepuffer für den Benutzermodus sein kann. Beispielsweise kann ein E/A-Steuerelementcode, der die gepufferte Zugriffsmethode verwendet, eine Struktur übergeben, die einen eingebetteten Zeiger an einen Benutzermoduspuffer enthält. In diesem Fall kann der TreiberWdfRequestProbeAndLockUserBufferForWrite verwenden, um ein Speicherobjekt für den Puffer abzurufen.
Die Pufferlänge, die der parameter Length angibt, darf nicht größer als die tatsächliche Größe des Puffers sein. Andernfalls können Treiber auf den 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 Framework-Speicherobjekt, das den Benutzermoduspuffer darstellt. Um auf den Puffer zuzugreifen, muss der Treiber WdfMemoryGetBuffer-aufrufen.
Das Framework-Speicherobjekt wird automatisch freigegeben, wenn der Treiber WdfRequestCompleteaufruft.
Weitere Informationen zu WdfRequestProbeAndLockUserBufferForWritefinden Sie unter Zugreifen auf Datenpuffer in Framework-Based Drivers.
Beispiele
Ein Codebeispiel, das WdfRequestProbeAndLockUserBufferForWriteverwendet, finden Sie unter WdfRequestProbeAndLockUserBufferForRead.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Minimale KMDF-Version | 1.0 |
Header- | wdfrequest.h (include Wdf.h) |
Library | Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.) |
IRQL- | PASSIVE_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |