Freigeben über


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

Zeigen Sie auf ein Dateiobjekt für die Datei.

[in] FileSizes

Zeiger auf eine CC_FILE_SIZES Struktur, die AllocationSize, FileSizeund 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- Größe des neuen Abschnittsobjekts 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

Auf TRUE- festgelegt, wenn CcPin-Xxx--Routinen in der Datei verwendet werden.

[in] Callbacks

Zeiger auf eine Struktur, die aus einem nicht seitengebundenen Pool zugeordnet ist, mit Einstiegspunkten von vom Aufrufer bereitgestellten Lese-/Vor-/Schreibzugriffsroutinen. Diese Struktur und ihre Member sind 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 Callbacksangegebenen Rückrufroutinen übergeben werden sollen.

Rückgabewert

Nichts

Bemerkungen

CcInitializeCacheMap erstellt die für das Zwischenspeichern von Dateidaten erforderlichen Datenstrukturen.

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. Um die Kontrolle zu erlangen, wenn ein Fehler auftritt, sollte der Treiber den Aufruf von CcInitializeCacheMap in einem try-except oder try-finally-Anweisung umschließen.

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 das Zwischenspeichern von Dateien standardmäßig aktiviert, kann jedoch deaktiviert werden, indem das FILE_NO_INTERMEDIATE_BUFFERING Flag auf TRUE- in den Dateierstellungsoptionen festgelegt wird.

Nach dem Aufrufen CcInitializeCacheMapkann das Dateisystem CcSetAdditionalCacheAttributes aufrufen, um lese- oder schreibbehind 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. Auch wenn die Datei mit deaktivierter Zwischenspeicherung erstellt wurde, muss das Dateisystem weiterhin CcUninitializeCacheMapaufrufen.

Das CcIsFileCached- Makro bestimmt, ob eine Datei zwischengespeichert wird oder nicht.

BOOLEAN CcIsFileCached(
  [in] PFILE_OBJECT FileObject
);

Parameter

FileObject[in] [in]

Zeigen Sie 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 verweisen können (d. h. Datenstrom), ist es möglich, dass das CcIsFileCached-Makro Makros TRUE zurückzugeben, wenn ein anderes zwischengespeichertes Dateiobjekt auf denselben Datenstrom verweist. Wenn also eine Gruppe von Dateiobjekten vorhanden ist, die auf denselben Datenstrom verweisen und mindestens eines der Dateiobjekte im Satz zwischengespeichert wird, gibt "CcIsFileCached"TRUE für alle Dateiobjekte im Satz zurück.
 

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- ntifs.h (einschließlich Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe

Siehe auch

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap-