Compartir a través de


Función CcInitializeCacheMap (ntifs.h)

Los sistemas de archivos llaman a la rutina CcInitializeCacheMap para almacenar en caché un archivo.

Sintaxis

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

Parámetros

[in] FileObject

Puntero a un objeto de archivo para el archivo.

[in] FileSizes

Puntero a una estructura de CC_FILE_SIZES que contiene AllocationSize, FileSize y ValidDataLength para el archivo. Esta estructura se define de la siguiente manera:

typedef struct _CC_FILE_SIZES {
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER FileSize;
    LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
Miembro Significado
AllocationSize Nuevo tamaño de objeto de sección para el archivo. Se omite si es menor o igual que el tamaño de sección actual.
FileSize Nuevo tamaño de archivo para el archivo.
ValidDataLength Nueva longitud de datos válida para el archivo.

[in] PinAccess

Se establece en TRUE si se usarán rutinas CcPinXxx en el archivo.

[in] Callbacks

Puntero a una estructura asignada desde un grupo no paginado, que contiene puntos de entrada de rutinas de devolución de llamada proporcionadas por el autor de la llamada y escritura subyacente. Esta estructura y sus miembros se definen de la siguiente manera:

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

Puntero a la información de contexto que se va a pasar a las rutinas de devolución de llamada especificadas en Devoluciones de llamada.

Valor devuelto

None

Observaciones

CcInitializeCacheMap crea las estructuras de datos necesarias para el almacenamiento en caché de datos de archivos.

Si se produce algún error, CcInitializeCacheMap genera una excepción de estado para ese error en particular. Por ejemplo, si se produce un error de asignación de grupo, CcInitializeCacheMap genera una excepción STATUS_INSUFFICIENT_RESOURCES. Por lo tanto, para obtener control si se produce un error, el controlador debe encapsular la llamada a CcInitializeCacheMap en una instrucción try-except o try-finally .

Los sistemas de archivos deben llamar a CcInitializeCacheMap para almacenar en caché un archivo antes de usar cualquier otra rutina de administrador de caché en el archivo, a menos que el archivo se haya creado con el almacenamiento en caché de datos deshabilitado. En la mayoría de los sistemas de archivos, el almacenamiento en caché de archivos está habilitado de forma predeterminada, pero se puede deshabilitar estableciendo la marca FILE_NO_INTERMEDIATE_BUFFERING en TRUE en las opciones de creación de archivos.

Después de llamar a CcInitializeCacheMap, el sistema de archivos puede llamar a CcSetAdditionalCacheAttributes para deshabilitar la lectura anticipada o la escritura subyacente, si lo desea.

Al cerrar un archivo, todos los sistemas de archivos que admiten el almacenamiento en caché de archivos deben llamar a CcUninitializeCacheMap en ese archivo, tanto si el archivo está almacenado en caché como si no. Incluso si el archivo se creó con el almacenamiento en caché deshabilitado, el sistema de archivos todavía debe llamar a CcUninitializeCacheMap.

La macro CcIsFileCached determina si un archivo está almacenado en caché o no.

BOOLEAN CcIsFileCached(
  [in] PFILE_OBJECT FileObject
);

Parámetros

FileObject[in] [in]

Puntero a un objeto de archivo para el archivo.

Valor devuelto

Devuelve TRUE si el archivo se almacena en caché; en caso contrario, FALSE .

Nota Dado que varios objetos de archivo pueden hacer referencia al mismo archivo (es decir, flujo de datos), es posible que la macro CcIsFileCached devuelva TRUE dado un objeto de archivo no almacenado en caché si otro objeto de archivo almacenado en caché hace referencia al mismo flujo de datos. En otras palabras, si hay un conjunto de objetos de archivo que hacen referencia a la misma secuencia de datos y si al menos uno de los objetos de archivo del conjunto está almacenado en caché, CcIsFileCached devolverá TRUE para todos los objetos de archivo del conjunto.
 

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado ntifs.h (incluya Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe

Consulte también

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap