Compartilhar via


Função CcInitializeCacheMap (ntifs.h)

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

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 CC_FILE_SIZES que contém AllocationSize, FileSize e 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 de arquivo para o arquivo.
ValidDataLength Novo comprimento de dados válido para o arquivo.

[in] PinAccess

Defina como TRUE se as rotinas CcPinXxx forem 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 antecipada 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.

Retornar valor

Nenhum

Comentários

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

Se ocorrer alguma falha, CcInitializeCacheMap gerará uma exceção 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 deve encapsular a chamada para CcInitializeCacheMap em uma instrução try-except ou try-finally .

Os sistemas de arquivos devem chamar CcInitializeCacheMap para 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 como TRUE nas opções de criação de arquivo.

Depois de chamar CcInitializeCacheMap, o sistema de arquivos pode chamar CcSetAdditionalCacheAttributes para desabilitar read-ahead ou write-behind, se desejado.

Ao fechar um arquivo, cada sistema de arquivos que dá suporte ao cache de arquivos deve chamar CcUninitializeCacheMap nesse arquivo, seja ele 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.

Retornar valor

Retornará TRUE se o arquivo estiver armazenado em cache; caso contrário, FALSE .

Nota Como vários objetos de arquivo podem se referir ao mesmo arquivo (ou seja, fluxo de dados), é possível que a macro CcIsFileCached retorne TRUE 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
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe

Confira também

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap