CcInitializeCacheMap-Funktion (ntifs.h)
Dateisysteme rufen die CcInitializeCacheMap-Routine auf, um eine Datei zwischenzuspeichern.
Syntax
void CcInitializeCacheMap(
[in] PFILE_OBJECT FileObject,
[in] PCC_FILE_SIZES FileSizes,
[in] BOOLEAN PinAccess,
[in] PCACHE_MANAGER_CALLBACKS Callbacks,
[in] PVOID LazyWriteContext
);
Parameter
[in] FileObject
Zeiger auf ein Dateiobjekt für die Datei.
[in] FileSizes
Zeiger auf eine CC_FILE_SIZES-Struktur, die AllocationSize, FileSize und ValidDataLength für die Datei enthält. Diese Struktur ist wie folgt definiert:
typedef struct _CC_FILE_SIZES {
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
Mitglied | Bedeutung |
---|---|
AllocationSize | Neue Abschnittsobjektgröße für die Datei. Wird ignoriert, wenn kleiner oder gleich der aktuellen Abschnittsgröße ist. |
FileSize | Neue Dateigröße für die Datei. |
ValidDataLength | Neue gültige Datenlänge für die Datei. |
[in] PinAccess
Legen Sie auf TRUE fest, wenn CcPinXxx-Routinen für die Datei verwendet werden.
[in] Callbacks
Zeiger auf eine Struktur, die aus einem nicht ausgestellten Pool zugeordnet ist, der Einstiegspunkte von Rückrufroutinen mit Lese- und Schreibzugriff vom Aufrufer enthält. Diese Struktur und ihre Elemente werden wie folgt definiert:
typedef struct _CACHE_MANAGER_CALLBACKS {
PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
typedef
BOOLEAN (*PACQUIRE_FOR_LAZY_WRITE) (
IN PVOID Context,
IN BOOLEAN Wait
);
typedef
VOID (*PRELEASE_FROM_LAZY_WRITE) (
IN PVOID Context
);
typedef
BOOLEAN (*PACQUIRE_FOR_READ_AHEAD) (
IN PVOID Context,
IN BOOLEAN Wait
);
typedef
VOID (*PRELEASE_FROM_READ_AHEAD) (
IN PVOID Context
);
[in] LazyWriteContext
Zeiger auf Kontextinformationen, die an die in Rückrufroutinen angegebenen Rückrufroutinen übergeben werden sollen.
Rückgabewert
Keine
Bemerkungen
CcInitializeCacheMap erstellt die Datenstrukturen, die für das Zwischenspeichern von Dateidaten erforderlich sind.
Wenn ein Fehler auftritt, löst CcInitializeCacheMap eine status Ausnahme für diesen bestimmten Fehler aus. Wenn beispielsweise ein Poolzuordnungsfehler auftritt, löst CcInitializeCacheMap eine STATUS_INSUFFICIENT_RESOURCES Ausnahme aus. Daher sollte der Treiber den Aufruf von CcInitializeCacheMap in einer try-except- oder try-finally-Anweisung umschließen, um die Kontrolle zu erlangen, wenn ein Fehler auftritt.
Dateisysteme müssen CcInitializeCacheMap aufrufen, um eine Datei zwischenzuspeichern, bevor sie andere Cache-Manager-Routinen für die Datei verwenden, es sei denn, die Datei wurde mit deaktivierter Datenzwischenspeicherung erstellt. In den meisten Dateisystemen ist die Dateizwischenspeicherung standardmäßig aktiviert, kann jedoch deaktiviert werden, indem sie in den Optionen zum Erstellen von Dateien das Flag FILE_NO_INTERMEDIATE_BUFFERING auf TRUE festlegen.
Nach dem Aufrufen von CcInitializeCacheMap kann das Dateisystem CcSetAdditionalCacheAttributes aufrufen, um read-ahead oder write-behind zu deaktivieren, falls gewünscht.
Beim Schließen einer Datei muss jedes Dateisystem, das die Dateizwischenspeicherung unterstützt, CcUninitializeCacheMap für diese Datei aufrufen, unabhängig davon, ob die Datei zwischengespeichert ist oder nicht. Selbst wenn die Datei mit deaktivierter Zwischenspeicherung erstellt wurde, muss das Dateisystem weiterhin CcUninitializeCacheMap aufrufen.
Das Makro CcIsFileCached bestimmt, ob eine Datei zwischengespeichert wird oder nicht.
BOOLEAN CcIsFileCached(
[in] PFILE_OBJECT FileObject
);
Parameter
FileObject[in] [in] [in]
Zeiger auf ein Dateiobjekt für die Datei.
Rückgabewert
Gibt TRUE zurück, wenn die Datei zwischengespeichert wird, andernfalls FALSE .
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | ntifs.h (include Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für