FltFastIoPrepareMdlWrite-Funktion (fltkernel.h)
Die FltFastIoPrepareMdlWrite-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.
Syntax
BOOLEAN FLTAPI FltFastIoPrepareMdlWrite(
PFLT_INSTANCE InitiatingInstance,
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG LockKey,
[out] PMDL *MdlChain,
[out] PIO_STATUS_BLOCK IoStatus
);
Parameter
InitiatingInstance
Undurchsichtiger instance Zeiger für den Aufrufer. Dieser Parameter ist erforderlich und darf nicht NULL sein.
[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 aus dem Cache gelesen werden sollen.
[in] LockKey
Ein Wert, der dem zu sperrenden Bytebereich zugeordnet ist. Wenn der zu sperrende Bereich einen anderen Bereich überlappt, der bereits mit einer nicht exklusiven Sperre gesperrt ist, oder wenn der zu lesende Bereich ein Unterbereich eines anderen Bereichs ist, der bereits nicht ausschließlich 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
Die FltFastIoPrepareMdlWrite-Routine gibt TRUE zurück, wenn der Vorgang erfolgreich ist, und FALSE , wenn der Vorgang fehlschlägt.
Hinweise
FltFastIoPrepareMdlWrite ähnelt FsRtlCopyWrite, mit der Ausnahme, dass FltFastIoPrepareMdlWrite keine Daten in den Cache kopiert. Stattdessen sind die physischen Seiten, die der Aufrufer überschreibt, im Arbeitsspeicher gesperrt, und FltFastIoPrepareMdlWrite gibt mindestens eine Speicherdeskriptorliste (Memory Descriptor Lists, MDLs) zurück, die auf den angegebenen Bytebereich verweisen. Die gesperrten Seiten bleiben gesperrt, bis der Aufrufer FltFastIoMdlWriteComplete aufruft.
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.
Selbst wenn der Aufruf von FltFastIoPrepareMdlWrite fehlschlägt , wurden möglicherweise mindestens eine MDLs zugewiesen. Der Aufrufer kann den Wert von IoStatus.Information untersuchen, um festzustellen, ob dies aufgetreten ist. Wenn ja, muss der Aufrufer FltFastIoMdlWriteComplete aufrufen, um die zugewiesenen MDLs frei zu geben.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | fltkernel.h (include Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |