Partager via


Fonction CcInitializeCacheMap (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, FileSize et 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 à celle-ci.
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 des routines CcPinXxx sont utilisées sur le fichier.

[in] Callbacks

Pointeur vers une structure allouée à partir d’un pool non paginé, contenant les points d’entrée des routines de rappel en lecture anticipée et en é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

None

Remarques

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

En cas d’échec, CcInitializeCacheMap lève une exception status pour cet échec particulier. Par exemple, si un échec d’allocation de pool se produit, CcInitializeCacheMap lève 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 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 FILE_NO_INTERMEDIATE_BUFFERING sur TRUE dans les options de création de fichier.

Après avoir appelé CcInitializeCacheMap, le système de fichiers peut appeler CcSetAdditionalCacheAttributes pour désactiver la lecture à l’avance 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 de 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 retournée

Retourne TRUE si le fichier est mis en cache, FALSE dans le cas contraire.

Note Étant donné que plusieurs objets de fichier peuvent faire référence au même fichier (autrement dit, le flux de données), il est possible que la macro CcIsFileCached retourne TRUE étant donné 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 un des objets de fichier dans le jeu est mis en cache, CcIsFileCached retourne TRUE pour tous les objets de fichier dans l’ensemble.
 

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête ntifs.h (inclure Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe

Voir aussi

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap