다음을 통해 공유


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, FileSize및 파일에 대한 ValidDataLength 포함하는 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-finally 문을 try-except 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