Funzione CcInitializeCacheMap (ntifs.h)

I file system chiamano la routine CcInitializeCacheMap per memorizzare nella cache un file.

Sintassi

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

Parametri

[in] FileObject

Puntatore a un oggetto file per il file.

[in] FileSizes

Puntatore a una struttura CC_FILE_SIZES contenente AllocationSize, FileSize e ValidDataLength per il file. Questa struttura è definita come segue:

typedef struct _CC_FILE_SIZES {
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER FileSize;
    LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
Membro Significato
AllocationSize Nuova dimensione dell'oggetto sezione per il file. Ignorato se minore o uguale alla dimensione corrente della sezione.
Dimensione Nuove dimensioni del file per il file.
ValidDataLength Nuova lunghezza dei dati valida per il file.

[in] PinAccess

Impostare su TRUE se le routine CcPinXxx verranno usate nel file.

[in] Callbacks

Puntatore a una struttura allocata da un pool non a pagina, contenente i punti di ingresso delle routine di caller forniti in lettura e write-behind. Questa struttura e i relativi membri sono definiti come segue:

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

Puntatore alle informazioni sul contesto da passare alle routine di callback specificate in Callback.

Valore restituito

nessuno

Osservazioni

CcInitializeCacheMap crea le strutture di dati necessarie per la memorizzazione nella cache dei dati dei file.

Se si verifica un errore, CcInitializeCacheMap genera un'eccezione di stato per tale errore specifico. Ad esempio, se si verifica un errore di allocazione del pool, CcInitializeCacheMap genera un'eccezione STATUS_INSUFFICIENT_RESOURCES. Pertanto, per ottenere il controllo se si verifica un errore, il driver deve eseguire il wrapping della chiamata a CcInitializeCacheMap in un'istruzione try-except o try-finally .

I file system devono chiamare CcInitializeCacheMap per memorizzare nella cache un file prima di usare altre routine di gestione cache nel file, a meno che il file non sia stato creato con la memorizzazione nella cache dei dati disabilitata. Nella maggior parte dei file system la memorizzazione nella cache dei file è abilitata per impostazione predefinita, ma può essere disabilitata impostando il flag FILE_NO_INTERMEDIATE_BUFFERING su TRUE nelle opzioni di creazione file.

Dopo aver chiamato CcInitializeCacheMap, il file system può chiamare CcSetAdditionalCacheAttributes per disabilitare read-ahead o write-behind, se necessario.

Quando si chiude un file system, ogni file system che supporta la memorizzazione nella cache dei file deve chiamare CcUninitializeCacheMap in tale file, indipendentemente dal fatto che il file sia memorizzato nella cache o meno. Anche se il file è stato creato con la memorizzazione nella cache disabilitato, il file system deve comunque chiamare CcUninitializeCacheMap.

La macro CcIsFileCached determina se un file viene memorizzato nella cache o meno.

BOOLEAN CcIsFileCached(
  [in] PFILE_OBJECT FileObject
);

Parametri

FileObject[in] [in]

Puntatore a un oggetto file per il file.

Valore restituito

Restituisce TRUE se il file viene memorizzato nella cache, FALSE in caso contrario.

Nota Poiché più oggetti file possono fare riferimento allo stesso file (ovvero, flusso di dati), è possibile che la macro CcIsFileCached restituisca TRUE dato un oggetto file non memorizzato nella cache se un altro oggetto file memorizzato nella cache fa riferimento allo stesso flusso di dati. In altre parole, se è presente un set di oggetti file che fanno riferimento allo stesso flusso di dati e se almeno uno degli oggetti file nel set viene memorizzato nella cache, CcIsFileCached restituirà TRUE per tutti gli oggetti file nel set.
 

Requisiti

   
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe

Vedi anche

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap