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 .

Hinweis Da mehrere Dateiobjekte auf dieselbe Datei (d. h. Datenstrom) verweisen können, ist es möglich, dass das CcIsFileCached-MakroTRUE bei einem nicht zwischengespeicherten Dateiobjekt zurückgibt, wenn ein anderes zwischengespeichertes Dateiobjekt auf denselben Datenstrom verweist. Anders ausgedrückt: Wenn es eine Gruppe von Dateiobjekten gibt, die auf denselben Datenstrom verweisen, und wenn mindestens eines der Dateiobjekte im Satz zwischengespeichert wird, gibt CcIsFileCachedtrue für alle Dateiobjekte im Satz zurück.
 

Anforderungen

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

Weitere Informationen

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap