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.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
d’en-tête | ntifs.h (include Ntifs.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |