다음을 통해 공유


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 메모리에 이미 상주하는 페이지만 매핑됩니다.
 
참고 이전에 Windows 2000에서 이 매개 변수는 Wait이름이 부울 값이었습니다.
 

기다림

데이터가 매핑될 때까지 호출자를 대기 상태로 전환할 수 있으면 TRUE 설정되고, 그렇지 않으면 FALSE .

[out] Bcb

첫 번째 호출에서 BCB(버퍼 제어 블록) 구조체에 대한 포인터를 반환합니다. 이 포인터는 이 버퍼에 대한 모든 후속 호출에 대한 입력으로 제공되어야 합니다.

[out] Buffer

매핑된 데이터를 포함하는 버퍼에 대한 포인터입니다.

반환 값

CcMapData 캐시된 파일의 데이터가 성공적으로 매핑되면 TRUE 반환하고, 그렇지 않으면 FALSE .

발언

CcMapData 읽기 액세스를 위해 캐시된 파일에 데이터를 매핑합니다. CcMapData 호출되면 데이터가 매핑됩니다. 하지만 고정되지 않았습니다. 이러한 구분은 중요합니다. 매핑되었지만 고정되지 않은 데이터는 안전하게 수정할 수 없습니다. 데이터를 고정하려면 CcPinMappedData, CcPinRead또는 CcPreparePinWrite사용합니다.

CcMapData 대한 모든 성공적인 호출은 CcUnpinData후속 호출과 일치해야 합니다.

CcMapData 캐시 관리자의 뷰 경계를 넘어 데이터를 매핑할 수 없습니다. 캐시 관리자는 256KB로 정렬된 보기로 시스템의 파일을 관리합니다. (캐시 관리자의 뷰 크기는 ntifs.h256KB로 설정된 시스템 정의 상수 VACB_MAPPING_GRANULARITY의해 지정됩니다. 매핑된 지역은 둘 이상의 256KB 뷰에 걸쳐 있습니다. 따라서 매핑할 수 있는 가장 큰 영역은 파일의 256KB 정렬 오프셋부터 시작하여 256KB입니다.

캐시된 파일에서 바이트 범위를 매핑해도 페이지가 메모리에 남아 있는 것은 아닙니다. 페이지가 매핑되는 한 바이트 범위는 시스템 캐시 가상 주소 공간에 매핑된 상태를 유지하지만 메모리 관리자는 시스템의 메모리 수요에 따라 실제 페이지를 페이징할 수 있습니다.

MAP_WAIT 플래그가 설정되거나 대기 TRUE경우 CcMapData 매핑 요청을 완료하고 TRUE반환합니다. 캐시된 파일의 필수 페이지가 이미 메모리에 상주하는 경우 데이터는 즉시 매핑되며 차단이 발생하지 않습니다. 필요한 페이지가 상주하지 않으면 모든 필수 페이지가 상주하고 데이터를 매핑할 수 있을 때까지 호출자가 대기 상태가 됩니다. MAP_WAIT 플래그가 설정되지 않았거나 대기 false데이터를 즉시 매핑할 수 없는 경우 CcMapData false반환합니다.

Buffer 반환된 포인터는 CcUnpinData 호출될 때까지 유효합니다. 이 포인터가 유효한 동안 CcPinMappedData 호출되는 경우 CcPinMappedData 호출한 후에도 포인터가 유효한 상태로 유지됩니다(하지만 CcUnpinData 호출될 때까지만).

오류가 발생하면 CcMapData 해당 특정 실패에 대한 상태 예외가 발생합니다. 예를 들어 풀 할당 오류가 발생하면 CcMapDataSTATUS_INSUFFICIENT_RESOURCES 예외가 발생합니다. I/O 오류가 발생하면 CcMapData I/O 오류의 상태 예외가 발생합니다. 따라서 오류가 발생하는 경우 제어를 위해 드라이버는 try-finally 문을 try- CcMapData 호출을 래핑해야 합니다.

파일을 캐시하려면 CcInitializeCacheMap사용합니다.

요구 사항

요구
대상 플랫폼 보편적
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

참고 항목

ccInitializeCacheMap

CcPinMappedData

CcPinRead

CcPreparePinWrite

CcUnpinData