Share via


MapViewOfFileFromApp 함수(memoryapi.h)

호출하는 Windows 스토어 앱의 주소 공간에 파일 매핑 보기를 매핑합니다.

구문

PVOID MapViewOfFileFromApp(
  [in] HANDLE  hFileMappingObject,
  [in] ULONG   DesiredAccess,
  [in] ULONG64 FileOffset,
  [in] SIZE_T  NumberOfBytesToMap
);

매개 변수

[in] hFileMappingObject

파일 매핑 개체에 대한 핸들입니다. CreateFileMappingFromApp 함수는 이 핸들을 반환합니다.

[in] DesiredAccess

페이지의 페이지 보호를 결정하는 파일 매핑 개체에 대한 액세스 유형입니다. 이 매개 변수는 다음 값 중 하나이거나 적절한 경우 여러 값의 비트 OR 조합일 수 있습니다.

의미
FILE_MAP_ALL_ACCESS
파일의 읽기/쓰기 보기가 매핑됩니다. 파일 매핑 개체는 PAGE_READWRITE 보호를 사용하여 만들어졌어야 합니다.

MapViewOfFileFromApp과 함께 사용하는 경우 FILE_MAP_ALL_ACCESSFILE_MAP_WRITE 동일합니다.

FILE_MAP_READ
파일의 읽기 전용 보기가 매핑됩니다. 파일 뷰에 쓰려고 시도하면 액세스 위반이 발생합니다.

파일 매핑 개체는 PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE_READ또는PAGE_EXECUTE_READWRITE 보호를 사용하여 만들어졌어야 합니다.

FILE_MAP_WRITE
파일의 읽기/쓰기 보기가 매핑됩니다. 파일 매핑 개체는 PAGE_READWRITE 보호를 사용하여 만들어졌어야 합니다.

MapViewOfFileFromApp(FILE_MAP_WRITE | FILE_MAP_READ)과 함께 사용하는 경우 는 FILE_MAP_WRITE 동일합니다.

 

비트 OR을 사용하여 위의 값을 이러한 값과 결합할 수 있습니다.

의미
FILE_MAP_COPY
파일의 쓰기용 복사 보기가 매핑됩니다. 파일 매핑 개체는 PAGE_READONLY, PAGE_READ_EXECUTE, PAGE_WRITECOPY 또는 PAGE_READWRITE 보호를 사용하여 만들어졌어야 합니다.

프로세스에서 쓰기 복사 페이지에 쓰면 시스템에서 원본 페이지를 프로세스에 비공개인 새 페이지로 복사합니다. 새 페이지는 페이징 파일에서 백업됩니다. 새 페이지의 보호는 쓰기 중 복사에서 읽기/쓰기로 변경됩니다.

쓰기용 복사 액세스를 지정하면 호출 프로세스가 보기의 모든 페이지에 쓸 수 있으므로 모든 페이지를 비공개로 만들 수 있으므로 전체 보기에 대한 시스템 및 프로세스 커밋 요금이 청구됩니다. 새 페이지의 내용은 원래 파일에 다시 기록되지 않으며 보기가 매핑되지 않은 경우 손실됩니다.

FILE_MAP_LARGE_PAGES
Windows 10 버전 1703부터 이 플래그는 큰 페이지 지원을 사용하여 보기를 매핑해야 한다고 지정합니다. 보기의 크기는 GetLargePageMinimum 함수에서 보고한 큰 페이지 크기의 배수여야 하며 파일 매핑 개체는 SEC_LARGE_PAGES 옵션을 사용하여 만들어야 합니다. lpBaseAddress에 null이 아닌 값을 제공하는 경우 값은 GetLargePageMinimum의 배수여야 합니다.
FILE_MAP_TARGETS_INVALID
매핑된 파일의 모든 위치를 CFG(Control Flow Guard)의 잘못된 대상으로 설정합니다. 이 플래그는 PAGE_TARGETS_INVALID 비슷합니다. 실행 액세스 권한 FILE_MAP_EXECUTE 함께 이 플래그를 사용합니다. 해당 페이지의 위치에 대한 간접 호출은 CFG 검사에 실패하고 프로세스가 종료됩니다. 할당된 실행 페이지에 대한 기본 동작은 CFG에 대한 유효한 호출 대상으로 표시되는 것입니다.
 

SEC_IMAGE 특성으로 만든 파일 매핑 개체의 경우 dwDesiredAccess 매개 변수는 효과가 없으며 FILE_MAP_READ 같은 유효한 값으로 설정해야 합니다.

파일 매핑 개체에 대한 액세스에 대한 자세한 내용은 파일 매핑 보안 및 액세스 권한을 참조하세요.

[in] FileOffset

뷰를 시작할 파일 오프셋입니다. 오프셋은 파일 매핑 내에서 오프셋을 지정해야 합니다. 또한 시스템의 메모리 할당 세분성과 일치해야 합니다. 즉, 오프셋은 할당 세분성의 배수여야 합니다. 시스템의 메모리 할당 세분성을 가져오려면 GetSystemInfo 함수를 사용하여 SYSTEM_INFO 구조체의 멤버를 채웁니다.

[in] NumberOfBytesToMap

뷰에 매핑할 파일 매핑의 바이트 수입니다. 모든 바이트는 CreateFileMappingFromApp에 지정된 최대 크기 내에 있어야 합니다. 이 매개 변수가 0이면 매핑이 지정된 오프셋에서 파일 매핑의 끝까지 확장됩니다.

반환 값

함수가 성공하면 반환 값은 매핑된 뷰의 시작 주소입니다.

함수가 실패하면 반환 값은 NULL입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

한 가지 중요한 예외를 제외하고 동일한 파일에서 백업되는 파일 매핑 개체에서 파생된 파일 뷰는 특정 시간에 일관되거나 동일합니다. 일관성은 프로세스 내의 뷰 및 다른 프로세스에 의해 매핑되는 뷰에 대해 보장됩니다.

예외는 원격 파일과 관련이 있습니다. MapViewOfFileFromApp은 원격 파일에서 작동하지만 일관성을 유지하지는 않습니다. 예를 들어 두 컴퓨터가 모두 파일을 쓰기 가능으로 매핑하고 둘 다 동일한 페이지를 변경하는 경우 각 컴퓨터는 페이지에 대한 자체 쓰기만 볼 수 있습니다. 디스크에서 데이터가 업데이트되면 병합되지 않습니다.

앱에 codeGeneration 기능이 있는 경우에만 실행 파일 보호를 요청할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 memoryapi.h(Windows.h 포함)
라이브러리 onecore.lib
DLL Kernel32.dll

참고 항목

CreateFileMapping

파일 뷰 만들기

DuplicateHandle

GetSystemInfo

MapViewOfFile

MapViewOfFileEx

메모리 관리 함수

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile