Freigeben über


FsRtlPrepareMdlWriteEx-Funktion (ntifs.h)

Die FsRtlPrepareMdlWriteEx Routine gibt eine verknüpfte Liste der Speicherdeskriptorlisten (MDLs) zurück, die auf den angegebenen Bereich zwischengespeicherter 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 Anfangsbyte-Offset innerhalb des Caches angibt, der die Daten enthält.

[in] Length

Die Länge in Byte der Daten, 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 überlappt, der bereits mit einer nicht exklusiven Sperre gesperrt ist, oder wenn der zu lesende Bereich ein Unterbereich eines anderen Bereichs ist, der bereits nichtexklusiv gesperrt ist, muss der Wert in diesem Parameter der Schlüssel für diese nichtexklusive Sperre sein. Die Sperre muss vom übergeordneten Prozess des aufrufenden Threads gehalten werden. Andernfalls hat dieser Parameter keine Auswirkung.

[out] MdlChain

Bei der Ausgabe zeigt ein Zeiger auf eine verknüpfte Liste der 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 den Status der Übertragung enthält. Wenn der Vorgang erfolgreich ist, wird IoStatus.Status auf STATUS_SUCCESSfestgelegt. Andernfalls wird sie auf einen geeigneten NTSTATUS Fehlercode festgelegt. IoStatus.Information wird auf die tatsächliche Anzahl der Bytes festgelegt, die die Routine erfolgreich gesperrt hat.

Rückgabewert

FsRtlPrepareMdlWriteEx gibt STATUS_SUCCESS oder einen geeigneten NTSTATUS--Wert zurück, z. B. einen der folgenden:

Rückgabecode Beschreibung
STATUS_INSUFFICIENT_RESOURCES
Ein IRP für den IRP-basierten Schreibvorgang konnte nicht zugeordnet werden.

Bemerkungen

Wenn schnelle E/A für das Dateisystem verfügbar ist, umgehen die FsRtlPrepareMdlWriteEx Routine den üblichen IRP-Schreibmechanismus und gibt eine verknüpfte Liste der Speicherdeskriptorlisten (MDL) zurück, die der Aufrufer verwenden kann, um Daten direkt in den Dateicache zu schreiben. Anstatt Datenpufferdaten 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 schnelle E/A nicht aktiviert ist, generiert FsRtlPrepareMdlWriteEx- eine synchrone IRP-basierte MDL-Schreibvorbereitung und gibt die mdLs zurück, die von der Anforderung zugewiesen wurden.

Die Seiten, auf die die MDLs verweisen, sind im Arbeitsspeicher gesperrt, werden jedoch nicht im Systembereich zugeordnet. Der Aufrufer kann diese Zuordnung ausführen, indem MmGetSystemAddressForMdlSafeaufgerufen wird.

Jedem Aufruf von FsRtlPrepareMdlWriteEx- muss ein Aufruf von CcMdlWriteCompletefolgen.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- ntifs.h (einschließlich Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- PASSIVE_LEVEL

Siehe auch

CcMdlWriteComplete

CcPrepareMdlWrite

MmGetSystemAddressForMdlSafe