Freigeben über


FsRtlMdlReadEx-Funktion (ntifs.h)

Die FsRtlMdlReadEx Routine führt einen schnellen zwischengespeicherten MDL-Lesevorgang durch. Wenn die angeforderten Daten nicht zwischengespeichert werden, wird die Routine auf einen IRP-basierten MDL-Lesevorgang zurückgesetzt.

Syntax

NTSTATUS FsRtlMdlReadEx(
  [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 eine Variable, die den Anfangsbyte-Offset in der zwischengespeicherten Datei angibt, die die Daten enthält.

[in] Length

Die Länge in Byte der Daten, 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 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

Eine Adresse einer Variablen, die einen Zeiger auf eine verknüpfte Liste der Speicherdeskriptorlisten (MDLs) empfängt. MdlChain- muss initialisiert werden, um NULL- zu , bevor der Aufruf von FsRtlMdlReadEx.

[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_SUCCESS festgelegt. Andernfalls wird er auf einen entsprechenden NTSTATUS-Fehlercode festgelegt. IoStatus.Information wird auf die tatsächliche Anzahl der Bytes festgelegt, die die Routine erfolgreich gesperrt hat.

Rückgabewert

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

Rückgabecode Beschreibung
STATUS_INSUFFICIENT_RESOURCES Das IRP für ein IRP-basiertes Lesen konnte nicht zugeordnet werden.

Bemerkungen

Wenn schnelle E/A über das Dateisystem verfügbar ist, umgehen die FsRtlMdlReadEx- Routine den üblichen IRP-Lesemechanismus und gibt eine verknüpfte Liste der Speicherdeskriptorlisten (MDL) zurück, die der Aufrufer verwenden kann, um direkt auf die zwischengespeicherten Dateidaten zuzugreifen. Dieser Vorgang kopiert oder puffert keine Daten und ist daher viel schneller als ein normaler Lesevorgang. Wenn schnelle E/A nicht aktiviert ist, generiert FsRtlMdlReadEx- ein synchrones IRP-basiertes MDL-Lesen und zurückgeben die MDLs aus der Anforderung.

Die von den MDLs beschriebenen Seiten sind im Arbeitsspeicher gesperrt, aber nicht im Systemspeicher zugeordnet. Der Aufrufer kann diese Zuordnung ausführen, indem MmGetSystemAddressForMdlSafeaufgerufen wird.

Ähnlich wie CcMdlRead-sperrt die FsRtlMdlReadEx Routine die Seiten, die die zwischengespeicherten Dateidaten enthalten, um zu verhindern, dass das System diese Seiten in die Seitendatei wechselt. Die Seiten bleiben im Arbeitsspeicher gesperrt, bis der Aufrufer die CcMdlReadComplete- Routine aufruft.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 8
Zielplattform- Universal
Header- ntifs.h (einschließlich Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- PASSIVE_LEVEL

Siehe auch

CcMdlRead-

CcMdlReadComplete-

IO_STATUS_BLOCK

MmGetSystemAddressForMdlSafe