CcMapData 함수(ntifs.h)
CcMapData 루틴은 캐시된 파일의 지정된 바이트 범위를 메모리의 버퍼에 매핑합니다.
통사론
BOOLEAN CcMapData(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG Flags,
[out] PVOID *Bcb,
[out] PVOID *Buffer
);
매개 변수
[in] FileObject
읽기 액세스를 위해 데이터를 매핑할 파일의 파일 개체에 대한 포인터입니다.
[in] FileOffset
원하는 데이터가 있는 캐시된 파일 내에서 시작 바이트 오프셋을 지정하는 변수에 대한 포인터입니다.
[in] Length
원하는 데이터의 길이(바이트)입니다.
[in] Flags
매핑 작업을 수행하는 방법을 지정하는 플래그의 비트 마스크입니다. 다음 값 중 하나 이상의 비트 OR 조합입니다.
값 | 의미 |
---|---|
MAP_WAIT | 데이터가 매핑될 때까지 호출자를 대기 상태로 전환할 수 있습니다. |
MAP_NO_READ | 메모리에 이미 상주하는 페이지만 매핑됩니다. |
기다림
데이터가 매핑될 때까지 호출자를 대기 상태로 전환할 수 있으면 TRUE
[out] Bcb
첫 번째 호출에서 BCB(버퍼 제어 블록) 구조체에 대한 포인터를 반환합니다. 이 포인터는 이 버퍼에 대한 모든 후속 호출에 대한 입력으로 제공되어야 합니다.
[out] Buffer
매핑된 데이터를 포함하는 버퍼에 대한 포인터입니다.
반환 값
발언
CcMapData 읽기 액세스를 위해 캐시된 파일에 데이터를 매핑합니다.
CcMapData 호출되면 데이터가 매핑됩니다. 하지만 고정되지 않았습니다. 이러한 구분은 중요합니다. 매핑되었지만 고정되지 않은 데이터는 안전하게 수정할 수 없습니다. 데이터를 고정하려면
CcMapData 캐시 관리자의 뷰 경계를 넘어 데이터를 매핑할 수 없습니다. 캐시 관리자는 256KB로 정렬된 보기로 시스템의 파일을 관리합니다. (캐시 관리자의 뷰 크기는 ntifs.h
캐시된 파일에서 바이트 범위를 매핑해도 페이지가 메모리에 남아 있는 것은 아닙니다. 페이지가 매핑되는 한 바이트 범위는 시스템 캐시 가상 주소 공간에 매핑된 상태를 유지하지만 메모리 관리자는 시스템의 메모리 수요에 따라 실제 페이지를 페이징할 수 있습니다.
Buffer 반환된 포인터는 CcUnpinData 호출될 때까지 유효합니다. 이 포인터가 유효한 동안 CcPinMappedData 호출되는 경우 CcPinMappedData 호출한 후에도 포인터가 유효한 상태로 유지됩니다(하지만 CcUnpinData 호출될 때까지만).
오류가 발생하면 CcMapData 해당 특정 실패에 대한 상태 예외가 발생합니다. 예를 들어 풀 할당 오류가 발생하면 CcMapDataSTATUS_INSUFFICIENT_RESOURCES 예외가 발생합니다. I/O 오류가 발생하면 CcMapData I/O 오류의 상태 예외가 발생합니다. 따라서 오류가 발생하는 경우 제어를 위해 드라이버는 try-finally 문을
파일을 캐시하려면 CcInitializeCacheMap사용합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
헤더 | ntifs.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL |
< DISPATCH_LEVEL |
참고 항목
ccInitializeCacheMap
CcPinMappedData
CcPinRead
CcPreparePinWrite
CcUnpinData