FsRtlPrepareMdlWriteDev-Funktion (ntifs.h)
Die FsRtlPrepareMdlWriteDev 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.
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 Anfangsbyte-Offset innerhalb des Caches angibt, der 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 nicht exklusiv 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 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_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.
[ 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.
Bemerkungen
FsRtlPrepareMdlWriteDev ähnelt FsRtlCopyWrite, außer dass FsRtlPrepareMdlWriteDev keine Daten in den Cache kopiert. Stattdessen sind die physischen Seiten, die der Aufrufer überschreibt, im Arbeitsspeicher gesperrt, und FsRtlPrepareMdlWriteDev gibt eine oder mehrere Speicherdeskriptorlisten (MDLs) zurück, die auf den angegebenen Bytebereich verweisen. Die gesperrten Seiten bleiben gesperrt, bis der Aufrufer FsRtlMdlWriteCompleteDevaufruft.
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.
Auch wenn der Aufruf von FsRtlPrepareMdlWriteDev fehlschlägt, wurden möglicherweise mindestens eine MDLs zugewiesen. Der Aufrufer kann den Wert IoStatus.Information untersuchen, um festzustellen, ob dies aufgetreten ist. Falls ja, muss der Aufrufer FsRtlMdlWriteCompleteDev- aufrufen, um die zugeordneten MDLs freizuweisen.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | ntifs.h (einschließlich Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | <= APC_LEVEL |