CcInitializeCacheMap 함수(ntifs.h)

파일 시스템은 CcInitializeCacheMap 루틴을 호출하여 파일을 캐시합니다.

구문

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

매개 변수

[in] FileObject

파일의 파일 개체에 대한 포인터입니다.

[in] FileSizes

파일에 대한 AllocationSize, FileSizeValidDataLength를 포함하는 CC_FILE_SIZES 구조체에 대한 포인터입니다. 이 구조는 다음과 같이 정의됩니다.

typedef struct _CC_FILE_SIZES {
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER FileSize;
    LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
멤버 의미
AllocationSize 파일의 새 섹션 개체 크기입니다. 현재 섹션 크기보다 작거나 같은 경우 무시됩니다.
Filesize 파일의 새 파일 크기입니다.
ValidDataLength 파일에 대한 새 유효한 데이터 길이입니다.

[in] PinAccess

파일에 CcPinXxx 루틴을 사용하는 경우 TRUE로 설정합니다.

[in] Callbacks

호출자가 제공한 미리 읽기 및 쓰기 숨김 콜백 루틴의 진입점을 포함하는 비페이지 풀에서 할당된 구조체에 대한 포인터입니다. 이 구조체와 해당 멤버는 다음과 같이 정의됩니다.

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

콜백에 지정된 콜백 루틴에 전달할 컨텍스트 정보에 대한 포인터입니다.

반환 값

없음

설명

CcInitializeCacheMap 은 파일 데이터 캐싱에 필요한 데이터 구조를 만듭니다.

오류가 발생하면 CcInitializeCacheMap 은 특정 오류에 대한 상태 예외를 발생합니다. 예를 들어 풀 할당 오류가 발생하면 CcInitializeCacheMap 에서 STATUS_INSUFFICIENT_RESOURCES 예외가 발생합니다. 따라서 오류가 발생하는 경우 제어를 얻으려면 드라이버는 try-except 또는 try-finally 문에서 CcInitializeCacheMap에 대한 호출을 래핑해야 합니다.

데이터 캐싱을 사용하지 않도록 설정하여 파일을 만들지 않는 한 파일 시스템에서 CcInitializeCacheMap 을 호출하여 파일의 다른 캐시 관리자 루틴을 사용하기 전에 파일을 캐시해야 합니다. 대부분의 파일 시스템에서 파일 캐싱은 기본적으로 사용하도록 설정되어 있지만 파일 만들기 옵션에서 FILE_NO_INTERMEDIATE_BUFFERING 플래그를 TRUE 로 설정하여 사용하지 않도록 설정할 수 있습니다.

CcInitializeCacheMap을 호출한 후 파일 시스템은 CcSetAdditionalCacheAttributes를 호출하여 원하는 경우 미리 읽기 또는 쓰기 숨김을 사용하지 않도록 설정할 수 있습니다.

파일을 닫을 때 파일 캐싱을 지원하는 모든 파일 시스템은 파일이 캐시되었는지 여부에 관계없이 해당 파일에서 CcUninitializeCacheMap 을 호출해야 합니다. 캐싱을 사용하지 않도록 설정하여 파일을 만든 경우에도 파일 시스템은 여전히 CcUninitializeCacheMap을 호출해야 합니다.

CcIsFileCached 매크로는 파일이 캐시되는지 여부를 결정합니다.

BOOLEAN CcIsFileCached(
  [in] PFILE_OBJECT FileObject
);

매개 변수

FileObject[in] [in]

파일의 파일 개체에 대한 포인터입니다.

반환 값

파일이 캐시되면 TRUE 를 반환하고, 그렇지 않으면 FALSE 를 반환합니다.

참고 여러 파일 개체가 동일한 파일(즉, 데이터 스트림)을 참조할 수 있으므로 캐시되지 않은 파일 개체가 다른 캐시된 파일 개체가 동일한 데이터 스트림을 참조하는 경우 CcIsFileCached 매크로가 TRUE 를 반환할 수 있습니다. 즉, 동일한 데이터 스트림을 참조하는 파일 개체 집합이 있고 집합의 파일 개체 중 하나 이상이 캐시된 경우 CcIsFileCached 는 집합의 모든 파일 개체에 대해 TRUE 를 반환합니다.

요구 사항

   
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe

참고 항목

CcSetAdditionalCacheAttributes

CcUninitializeCacheMap