Compartir a través de


Función CcInitializeCacheMap (ntifs.h)

Los sistemas de archivos llaman a la rutina de 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, FileSizey ValidDataLength para el archivo. Esta estructura se define de la manera siguiente:

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

Establézcalo en TRUE si ccPinlas rutinas xxx se usarán 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

Ninguno

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 de STATUS_INSUFFICIENT_RESOURCES. Por lo tanto, para obtener control si se produce un error, el controlador debe encapsular la llamada a ccInitializeCacheMap en un try-except o instrucción try-finally.

Los sistemas de archivos deben llamar a CcInitializeCacheMap para almacenar en caché un archivo antes de usar cualquier otra rutina del 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 está almacenado en caché, FALSE de lo contrario.

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 a la misma secuencia de datos. En otras palabras, si hay un conjunto de objetos de archivo que hacen referencia al mismo flujo de datos y si al menos uno de los objetos de archivo del conjunto se almacena en caché, CcIsFileCached devolverá TRUE para todos los objetos de archivo del conjunto.
 

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de ntifs.h (incluya Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe

Consulte también

CcSetAdditionalCacheAttributes

ccUninitializeCacheMap