Compartilhar via


Função CcInitializeCacheMap (ntifs.h)

Os sistemas de arquivos chamam a rotina de ccInitializeCacheMap para armazenar em cache um arquivo.

Sintaxe

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

Ponteiro para um objeto de arquivo para o arquivo.

[in] FileSizes

Ponteiro para uma estrutura de CC_FILE_SIZES que contém AllocationSize, FileSizee ValidDataLength para o arquivo. Essa estrutura é definida da seguinte maneira:

typedef struct _CC_FILE_SIZES {
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER FileSize;
    LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
Membro Significado
AllocationSize Novo tamanho do objeto de seção para o arquivo. Ignorado se menor ou igual ao tamanho da seção atual.
FileSize Novo tamanho do arquivo para o arquivo.
ValidDataLength Novo comprimento de dados válido para o arquivo.

[in] PinAccess

Defina como TRUE se rotinas de do CcPinXxx serão usadas no arquivo.

[in] Callbacks

Ponteiro para uma estrutura alocada do pool nãopagado, contendo pontos de entrada de rotinas de retorno de chamada de leitura e write-behind fornecidas pelo chamador. Essa estrutura e seus membros são definidos da seguinte maneira:

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

Ponteiro para informações de contexto a serem passadas para as rotinas de retorno de chamada especificadas em retornos de chamada.

Valor de retorno

Nenhum

Observações

CcInitializeCacheMap cria as estruturas de dados necessárias para o cache de dados de arquivo.

Se ocorrer alguma falha, CcInitializeCacheMap gerará uma exceção de status para essa falha específica. Por exemplo, se ocorrer uma falha de alocação de pool, CcInitializeCacheMap gerará uma exceção STATUS_INSUFFICIENT_RESOURCES. Portanto, para obter controle se ocorrer uma falha, o driver deverá encapsular a chamada para CcInitializeCacheMap em uma instrução try-except ou try-finally.

Os sistemas de arquivos devem chamar CcInitializeCacheMap armazenar em cache um arquivo antes de usar qualquer outra rotina do gerenciador de cache no arquivo, a menos que o arquivo tenha sido criado com o cache de dados desabilitado. Na maioria dos sistemas de arquivos, o cache de arquivos é habilitado por padrão, mas pode ser desabilitado definindo o sinalizador FILE_NO_INTERMEDIATE_BUFFERING para verdadeiro nas opções de criação de arquivo.

Depois de chamar CcInitializeCacheMap, o sistema de arquivos pode chamar CcSetAdditionalCacheAttributes para desabilitar a leitura antecipada ou o write-behind, se desejado.

Ao fechar um arquivo, todos os sistemas de arquivos que dão suporte ao cache de arquivos devem chamar ccUninitializeCacheMap nesse arquivo, quer o arquivo seja armazenado em cache ou não. Mesmo que o arquivo tenha sido criado com o cache desabilitado, o sistema de arquivos ainda deverá chamar CcUninitializeCacheMap.

A macro CcIsFileCached determina se um arquivo é armazenado em cache ou não.

BOOLEAN CcIsFileCached(
  [in] PFILE_OBJECT FileObject
);

Parâmetros

FileObject[in] [in]

Ponteiro para um objeto de arquivo para o arquivo.

Valor de retorno

Retorna verdadeiro se o arquivo estiver armazenado em cache, false caso contrário.

Observação Como vários objetos de arquivo podem se referir ao mesmo arquivo (ou seja, fluxo de dados), é possível que a macro ccIsFileCached retorne VERDADEIRO dado um objeto de arquivo não armazenado em cache se outro objeto de arquivo armazenado em cache se referir ao mesmo fluxo de dados. Em outras palavras, se houver um conjunto de objetos de arquivo que se referem ao mesmo fluxo de dados e se pelo menos um dos objetos de arquivo no conjunto for armazenado em cache, CcIsFileCached retornará true para todos os objetos de arquivo no conjunto.
 

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho ntifs.h (inclua Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe

Consulte também

CcSetAdditionalCacheAttributes

ccUninitializeCacheMap