Partager via


CcInitializeCacheMap, fonction (ntifs.h)

Les systèmes de fichiers appellent la routine CcInitializeCacheMap pour mettre en cache un fichier.

Syntaxe

void CcInitializeCacheMap(
  [in] PFILE_OBJECT             FileObject,
  [in] PCC_FILE_SIZES           FileSizes,
  [in] BOOLEAN                  PinAccess,
  [in] PCACHE_MANAGER_CALLBACKS Callbacks,
  [in] PVOID                    LazyWriteContext
);

Paramètres

[in] FileObject

Pointeur vers un objet de fichier pour le fichier.

[in] FileSizes

Pointeur vers une structure CC_FILE_SIZES contenant AllocationSize, FileSizeet ValidDataLength pour le fichier. Cette structure est définie comme suit :

typedef struct _CC_FILE_SIZES {
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER FileSize;
    LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
Membre Signification
AllocationSize Nouvelle taille d’objet de section pour le fichier. Ignoré si la taille de section actuelle est inférieure ou égale.
FileSize Nouvelle taille de fichier pour le fichier.
ValidDataLength Nouvelle longueur de données valide pour le fichier.

[in] PinAccess

Définissez la valeur TRUE si routines CcPinXxx seront utilisées sur le fichier.

[in] Callbacks

Pointeur vers une structure allouée à partir d’un pool non paginé, contenant des points d’entrée de routines de rappel en lecture-avance et écriture-behind fournies par l’appelant. Cette structure et ses membres sont définis comme suit :

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

Pointeur vers les informations de contexte à passer aux routines de rappel spécifiées dans rappels.

Valeur de retour

Aucun

Remarques

CcInitializeCacheMap crée les structures de données requises pour la mise en cache des données de fichier.

Si une défaillance se produit, CcInitializeCacheMap déclenche une exception d’état pour cet échec particulier. Par exemple, si un échec d’allocation de pool se produit, CcInitializeCacheMap déclenche une exception STATUS_INSUFFICIENT_RESOURCES. Par conséquent, pour contrôler si une défaillance se produit, le pilote doit encapsuler l’appel à CcInitializeCacheMap dans une instruction try-except try-except ou try-finally.

Les systèmes de fichiers doivent appeler CcInitializeCacheMap pour mettre en cache un fichier avant d’utiliser d’autres routines de gestionnaire de cache sur le fichier, sauf si le fichier a été créé avec la mise en cache des données désactivée. Dans la plupart des systèmes de fichiers, la mise en cache des fichiers est activée par défaut, mais peut être désactivée en définissant l’indicateur de FILE_NO_INTERMEDIATE_BUFFERING sur TRUE dans les options de création de fichiers.

Après avoir appelé CcInitializeCacheMap, le système de fichiers peut appeler CcSetAdditionalCacheAttributes pour désactiver la lecture avant ou l’écriture-behind, si vous le souhaitez.

Lors de la fermeture d’un fichier, chaque système de fichiers qui prend en charge la mise en cache des fichiers doit appeler CcUninitializeCacheMap sur ce fichier, que le fichier soit mis en cache ou non. Même si le fichier a été créé avec la mise en cache désactivée, le système de fichiers doit toujours appeler CcUninitializeCacheMap.

La macro CcIsFileCached détermine si un fichier est mis en cache ou non.

BOOLEAN CcIsFileCached(
  [in] PFILE_OBJECT FileObject
);

Paramètres

FileObject[in] [in]

Pointeur vers un objet de fichier pour le fichier.

Valeur de retour

Retourne TRUE si le fichier est mis en cache, FALSE sinon.

Remarque Étant donné que plusieurs objets de fichier peuvent faire référence au même fichier (autrement dit, flux de données), il est possible que la macro CcIsFileCached retourne TRUE en fonction d’un objet de fichier non mis en cache si un autre objet de fichier mis en cache fait référence au même flux de données. En d’autres termes, s’il existe un ensemble d’objets de fichier qui font référence au même flux de données et si au moins l’un des objets de fichier du jeu est mis en cache, CcIsFileCached retourne TRUE pour tous les objets de fichier du jeu.
 

Exigences

Exigence Valeur
plateforme cible Universel
d’en-tête ntifs.h (include Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe

Voir aussi

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap