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 .
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | ntifs.h (inclua Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |