FsRtlPrepareMdlWriteDev-Funktion (ntifs.h)

Die FsRtlPrepareMdlWriteDev-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 FsRtlPrepareMdlWriteDev(
  [in]             PFILE_OBJECT     FileObject,
  [in]             PLARGE_INTEGER   FileOffset,
  [in]             ULONG            Length,
  [in]             ULONG            LockKey,
  [out]            PMDL             *MdlChain,
  [out]            PIO_STATUS_BLOCK IoStatus,
  [ in, optional ] PDEVICE_OBJECT   DeviceObject
);

Parameter

[in] FileObject

Ein Zeiger auf das Dateiobjekt.

[in] FileOffset

Ein Zeiger auf einen Wert, der den Anfangsbyteoffset innerhalb des Caches 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 Teilbereich eines anderen Bereichs ist, der bereits nicht ausschließlich gesperrt ist, muss der Wert in diesem Parameter der Schlüssel für diese nicht ausschließliche 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 er auf einen geeigneten NTSTATUS-Fehlercode festgelegt. IoStatus.Information wird auf die tatsächliche Anzahl von Bytes festgelegt, die die Routine erfolgreich gesperrt hat.

[ in, optional ] DeviceObject

Ein Zeiger auf ein Geräteobjekt, auf dem die Datei geöffnet wird.

Rückgabewert

Die FsRtlPrepareMdlWriteDev-Routine gibt TRUE zurück, wenn der Vorgang erfolgreich ist, und FALSE , wenn der Vorgang fehlschlägt.

Hinweise

FsRtlPrepareMdlWriteDev ähnelt FsRtlCopyWrite, mit der Ausnahme, dass FsRtlPrepareMdlWriteDev keine Daten in den Cache kopiert. Stattdessen sind die physischen Seiten, die vom Aufrufer überschrieben werden, im Arbeitsspeicher gesperrt, und FsRtlPrepareMdlWriteDev gibt mindestens eine Speicherdeskriptorliste (Memory Descriptor Lists, MDLs) zurück, die auf den angegebenen Bytebereich verweisen. Die gesperrten Seiten bleiben gesperrt, bis der Aufrufer FsRtlMdlWriteCompleteDev 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 FsRtlPrepareMdlWriteDev fehlschlägt, wurden möglicherweise mindestens eine MDLs zugeordnet. Der Aufrufer kann den Wert von IoStatus.Information untersuchen, um festzustellen, ob dies geschehen ist. Falls vorhanden, muss der Aufrufer FsRtlMdlWriteCompleteDev aufrufen, um die zugeordneten MDLs frei zu geben.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header ntifs.h (include Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Weitere Informationen

FsRtlMdlWriteCompleteDev

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe