FsRtlPrepareMdlWriteEx-Funktion (ntifs.h)
Die FsRtlPrepareMdlWriteEx-Routine gibt eine verknüpfte Liste von Speicherdeskriptorlisten (MDLs) zurück, die auf den angegebenen Bereich von zwischengespeicherten Dateidaten verweisen, um Daten direkt in den Cache zu schreiben. Wenn die Cacheunterstützung für den Schreibvorgang nicht verfügbar ist, wird die Routine auf einen IRP-basierten MDL-Schreibvorgang zurückgesetzt.
Syntax
NTSTATUS FsRtlPrepareMdlWriteEx(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG LockKey,
[out] PMDL *MdlChain,
[out] PIO_STATUS_BLOCK IoStatus
);
Parameter
[in] FileObject
Ein Zeiger auf das Dateiobjekt.
[in] FileOffset
Ein Zeiger auf einen Wert, der den Anfangsbyteoffset im Cache angibt, der die Daten enthält.
[in] Length
Die Länge der Daten in Bytes, die in den Cache geschrieben werden sollen.
[in] LockKey
Ein Wert, der dem zu sperrenden Bytebereich zugeordnet ist. Wenn der zu sperrende Bereich einen anderen Bereich überschneidet, der bereits mit einer nicht exklusiven Sperre gesperrt ist, oder wenn der zu lesende Bereich ein Unterbereich eines anderen Bereichs ist, der bereits nicht endgültig gesperrt ist, muss der Wert in diesem Parameter der Schlüssel für diese nicht exklusive Sperre sein. Die Sperre muss vom übergeordneten Prozess des aufrufenden Threads gehalten werden. Andernfalls hat dieser Parameter keine Auswirkung.
[out] MdlChain
Bei der Ausgabe ein Zeiger auf eine verknüpfte Liste von Speicherdeskriptorlisten (MDLs), die auf den Bytebereich innerhalb der zwischengespeicherten Daten verweisen.
[out] IoStatus
Ein Zeiger auf eine IO_STATUS_BLOCK-Struktur, die bei der Ausgabe die status der Übertragung enthält. Wenn der Vorgang erfolgreich ist, wird IoStatus.Status auf STATUS_SUCCESS festgelegt. Andernfalls wird ein entsprechender NTSTATUS-Fehlercode festgelegt. IoStatus.Information ist auf die tatsächliche Anzahl von Bytes festgelegt, die die Routine erfolgreich gesperrt hat.
Rückgabewert
FsRtlPrepareMdlWriteEx gibt STATUS_SUCCESS oder einen entsprechenden NTSTATUS-Wert zurück, z. B. einen der folgenden:
Rückgabecode | Beschreibung |
---|---|
|
Ein IRP für den IRP-basierten Schreibvorgang konnte nicht zugeordnet werden. |
Hinweise
Wenn schnelle E/A für das Dateisystem verfügbar ist, umgeht die FsRtlPrepareMdlWriteEx-Routine den üblichen IRP-Schreibmechanismus und gibt eine verknüpfte Liste von Speicherdeskriptorlisten (MDL) zurück, die der Aufrufer verwenden kann, um Daten direkt in den Dateicache zu schreiben. Anstatt gepufferte Daten in den Cache zu kopieren, sind die physischen Seiten, die der Aufrufer überschreibt, im Arbeitsspeicher gesperrt und können direkt geschrieben werden. FsRtlPrepareMdlWriteEx gibt mindestens eine Speicherdeskriptorliste (MdLs) zurück, die auf den angegebenen Bytebereich verweisen.
Wenn die schnelle E/A nicht aktiviert ist, generiert FsRtlPrepareMdlWriteEx eine synchrone IRP-basierte MDL-Schreibvorbereitung und gibt die aus der Anforderung zugewiesenen MDLs zurück.
Die Seiten, auf die die MDLs verweisen, sind im Arbeitsspeicher gesperrt, aber nicht im Systembereich zugeordnet. Der Aufrufer kann diese Zuordnung durch Aufrufen von MmGetSystemAddressForMdlSafe ausführen.
Jedem Aufruf von FsRtlPrepareMdlWriteEx muss ein Aufruf von CcMdlWriteComplete folgen.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | ntifs.h (include Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für