CcPrepareMdlWrite-Funktion (ntifs.h)
Die CcPrepareMdlWrite Routine bietet direkten Zugriff auf zwischengespeicherten Dateispeicher, sodass der Aufrufer Daten in die Datei schreiben kann.
Syntax
void CcPrepareMdlWrite(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[out] PMDL *MdlChain,
[out] PIO_STATUS_BLOCK IoStatus
);
Parameter
[in] FileObject
Zeigen Sie auf ein Dateiobjekt für die zwischengespeicherte Datei.
[in] FileOffset
Zeigen Sie auf eine Variable, die den Anfangsbyte-Offset innerhalb der zwischengespeicherten Datei angibt, in die die Daten geschrieben werden sollen.
[in] Length
Länge in Byte der Daten, die in den Systemcache geschrieben werden sollen.
[out] MdlChain
Eine Kette mit einer oder mehreren Speicherdeskriptorlisten (MDL), die die Seiten beschreiben, in die die Daten geschrieben werden sollen.
[out] IoStatus
Zeiger auf eine IO_STATUS_BLOCK Struktur. Wenn der Aufruf von CcPrepareMdlWrite 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 erfolgreich in der MDL-Kette gesperrt wurden.
Rückgabewert
Nichts
Bemerkungen
CcPrepareMdlWrite ähnelt CcCopyWrite, mit der Ausnahme, dass die Daten nicht in die zwischengespeicherte Datei kopiert werden. Stattdessen werden die physischen Seiten, die im Systemcache überschrieben werden sollen, im Arbeitsspeicher gesperrt, und CcPrepareMdlWrite gibt eine oder mehrere Speicherdeskriptorlisten (MDL) zurück, die den angegebenen Bytebereich beschreiben. Diese Seiten bleiben im Arbeitsspeicher gesperrt, bis CcMdlWriteComplete oder CcMdlWriteAbort- aufgerufen wird. Daher muss jedem Aufruf von CcPrepareMdlWrite- ein Aufruf von CcMdlWriteComplete oder CcMdlWriteAbortfolgen.
Beachten Sie, dass die von der MDL beschriebenen Seiten im Arbeitsspeicher gesperrt, aber nicht im Systembereich zugeordnet sind. Der Aufrufer kann diese Zuordnung ausführen, indem MmGetSystemAddressForMdlSafeaufgerufen wird.
Beachten Sie, dass auch dann, wenn der Aufruf von CcPrepareMdlWrite fehlschlägt, mindestens eine MDLs zugewiesen wurden. Der Aufrufer kann den Wert IoStatus.Information untersuchen, um festzustellen, ob dies aufgetreten ist. Falls ja, muss der Aufrufer CcMdlWriteComplete- aufrufen, um die zugeordneten MDLs freizuweisen.
Wenn ein Fehler auftritt, löst CcPrepareMdlWrite eine Status ausnahme für diesen bestimmten Fehler aus. Wenn beispielsweise ein Poolzuordnungsfehler auftritt, löst CcPrepareMdlWrite eine STATUS_INSUFFICIENT_RESOURCES Ausnahme aus; wenn ein E/A-Fehler auftritt, löst CcPrepareMdlWrite die Status ausnahme des E/A-Fehlers aus. Um die Kontrolle zu erlangen, wenn ein Fehler auftritt, sollte der Treiber den Aufruf von CcPrepareMdlWrite- in einem try-except oder try-finally Anweisung umschließen.
Verwenden Sie CcInitializeCacheMap, um eine Datei zwischenzuspeichern.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | ntifs.h (einschließlich Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | < DISPATCH_LEVEL |