CreateFileMapping 분석

함수CreateFileMapping은 지정한 파일에 이름이 붙거나 이름이 붙지 않은 파일 매핑 대상을 만들거나 열어 시스템 파일 매핑 대상에 물리적 메모리가 얼마나 필요한지 알려 줍니다.
HANDLE CreateFileMapping(HANDLE hFile,
                         LPSECURITY_ATTRIBUTES lpAttributes,
                         DWORD flProtect,
                         DWORD dwMaximumSizeHigh,
                         DWORD dwMaximumSizeLow,
                         LPCTSTR lpName);

매개 변수


hFile:


[in] 매핑할 파일의 핸들은CreateFile 함수에서 반환됩니다.파일을 여는 액세스 권한은 flProtect에서 지정한 보호 속성과 호환되어야 합니다.파일을 독점적으로 여는 것을 추천합니다. 비록 이것은 반드시 필요한 것은 아니지만.hFile이 INVALID인 경우HANDLE_VALUE, 호출 프로세스는 매개 변수 dwMaximumSizeHigh와 매개 변수 dwMaximumSizeLow를 통해 매핑되는 크기를 지정해야 합니다.이 경우 함수 CreateFileMapping은 디스크의 이름이 지정된 파일 대신 시스템 페이지에서 지원하는 크기의 파일 매핑 대상을 만듭니다.파일 맵 대상은 복사본을 공유하고 계승할 수 있습니다.파일 맵 대상의 페이지의 초기 내용은 0입니다.

lpAttributes


[in] SECURITYATTRIBUTES 구조의 바늘은 이 함수가 되돌아오는 핸들이 프로세스에 계승될 수 있는지 여부를 가리킨다.lpattributes가 NULL이면 핸들을 상속할 수 없습니다. (lpattributes는 보통 NULL입니다.)SECURITY_ATTRIBUTES 구조의 lpSecurityDescriptor 구성원이 새 파일 매핑 대상에 대한 보안 설명을 지정했습니다.lpattributes가 NULL이면 파일 매핑 객체에 대한 기본 보안 설명이 제공됩니다.

flProtect


[in] 파일이 비추면 보기의 보호 속성입니다.이 매개변수는 다음 중 하나일 수 있습니다.
보호 속성
속뜻
PAGE_READONLY
파일에서 객체를 매핑할 때 파일의 데이터를 읽을 수 있습니다.GENERIC 이(가) CreateFile 함수에 전달되어야 합니다.READ에서 사용
PAGE_READWRITE
파일을 매핑할 때 파일의 데이터를 읽거나 파일에 쓸 수 있습니다.CreateFile 함수에서 GENERIC 를 전달해야 합니다.READ 및 GENERICWRITE 사용
PAGE_WRITECOPY
파일에서 객체를 매핑할 때 파일의 데이터를 읽을 수 있습니다.데이터를 쓸 때 페이지의 개인 복사본을 만들 것입니다. (쓸 때 복사 메커니즘을 사용합니다.)GENERIC 이(가) CreateFile 함수에 전달되어야 합니다.READ 또는 GENERIC READ or GENERIC WRITE에서 사용
PAGE_EXECUTE_READ
파일 맵 대상에 대한 맵을 완성할 때 파일의 데이터를 읽을 수도 있고 코드를 실행할 수도 있습니다.CreateFile을 호출할 때 GENERICREAD 및 GENERICEXECUTE
PAGE_EXECUTE_READWRITE
파일 맵 대상에 대한 맵을 완성할 때 파일의 데이터를 읽고 파일에 쓸 수 있으며 코드를 실행할 수 있습니다.CreateFile을 호출할 때 GENERICREAD、GENERIC_WRITE 및 GENERICEXECUTE
응용 프로그램은 다음 단락의 속성을flProtect나 조작부호와 함께 사용하도록 지정할 수 있습니다. '단락' 은 메모리 맵의 또 다른 이름일 뿐입니다.메모리 맵 데이터 파일을 만들 때, 이 로고 중 하나를 설정할 수 없습니다.CreateFileMapping 함수는 이러한 플래그를 무시합니다.
세그먼트 보호 속성
속뜻
SEC_COMMIT
기본값입니다.메모리나 페이지 파일 또는 디스크의 파일에서 섹션의 모든 페이지에 물리 메모리를 분배한다.맵 데이터 파일을 사용할 때 이 속성을 사용할 수 없습니다
SEC_IMAGE
이 속성은 매핑된 파일이 마이그레이션 실행 가능(PE) 파일 이미지임을 알려줍니다.시스템이 이 파일을 프로세스의 주소 공간에 비추었을 때, 파일 이미지의 각 페이지에 어떤 보호 속성을 부여할지 확인하기 위해 파일의 내용을 보아야 한다
SEC_NOCACHE
파일의 메모리 맵 페이지를 알림 캐시에 넣지 않았음을 알려 줍니다.따라서 이 파일에 데이터를 쓸 때 시스템은 디스크의 파일 데이터를 더욱 자주 업데이트해야 한다.이 로고와 PAGENOCACHE 보호 속성과 마찬가지로 장치 드라이버 개발자가 사용할 수 있으며 응용 프로그램은 일반적으로 사용하지 않습니다
SEC_RESERVE
섹션의 모든 주소 공간 보존하기;맵 데이터 파일을 사용할 때 이 속성을 사용할 수 없습니다

dwMaximumSizeHigh


[in] 파일 매핑 대상size(64비트)의 높이 32비트;Windows에서 지원하는 최대 파일 크기는 64비트 정수로 표시할 수 있기 때문에 32비트 값을 두 개 사용해야 합니다. 4GB 이하의 파일은 dwMaximumSizeHigh가 0입니다.

dwMaximumSizeLow


[in] 파일 매핑 대상size(64비트)의 32비트 낮음;이 매개 변수와 dwMaximumSizeHigh가 모두 0이면, 파일 맵 대상의 최대 크기는 hFile에서 지정한 파일의 크기입니다.크기가 0인 파일을 매핑하려는 시도가 실패하고 오류 코드인 ERROR 를 반환합니다.FILE_INVALID.프로그램은 파일 크기가 0인지 확인하고 크기가 0인 파일을 비추는 것을 거부해야 합니다.

lpName


[in] 매핑 객체를 가리키는 0으로 끝나는 문자열.lpName이 존재하고 이름이 붙은 파일 맵 대상과 일치하면 함수는flProtect가 지정한 접근 권한을 요청합니다.lpName이 NULL이면 이름이 없는 매핑 객체가 작성됩니다.lpName이 존재하고 이름이 지정된 이벤트, 신호량, 상호 배타적 객체, 대기 타이머 또는 작업 객체와 일치하면 함수가 실패하고 GetLastError 함수가 ERROR 로 반환됩니다.INVALID_HANDLE.이런 원인은 이 내부 핵 대상들이 같은 명명 공간을 공유하기 때문이다.

반환값


함수 호출이 성공하면 파일 맵 대상의 핸들을 되돌려줍니다.객체가 함수를 호출하기 전에 이미 존재하는 경우 함수는 이미 존재하는 객체 핸들을 반환합니다(size는 이미 존재하는 객체 size 기준). GetLastError는 ERRORALREADY_EXISTS. 함수가 실패하면 NULL을 반환합니다.GetLastError를 호출하여 오류 코드를 가져올 수 있습니다.

주의

  • 메모리 맵 파일을 만드는 것은 주소 공간 구역을 미리 정한 다음에 구역에 물리 메모리를 조정하는 것과 같다.유일한 차이점은 메모리 맵 파일의 물리적 메모리는 디스크에 있는 파일에서 나오는 것이지 시스템의 페이지 교환 파일에서 분배되는 것이 아니다.파일 매핑 대상을 만들 때, 시스템은 주소 공간 영역을 정하지 않고 파일을 이 영역에 비추지 않습니다.그러나 시스템이 프로세스 주소 공간을 비추고 있을 때 물리 메모리의 페이지에 어떤 보호 속성을 지정해야 하는지 알아야 한다
  • CreateFileMapping 함수를 호출하고 PAGEREADWEITE 로고, 디스크에 있는 관련 데이터 파일의 크기가 파라미터dwMaximumSizeHigh와 파라미터dwMaximumSizeLow에서 설정한 크기와 같은지 확인하려고 합니다.파일이 설정된 크기보다 작으면 CreateFileMapping 함수는 파일의 크기를 확장하여 디스크의 파일을 크게 만듭니다.이러한 확장은 매우 필요한 것이다. 이렇게 해서 나중에 이 파일을 메모리 맵 파일로 사용할 때 물리 메모리는 이미 존재한다.PAGE를 사용하는 경우READONLY 또는 PAGEWRITECOPY 로고가 이 파일 매핑 대상을 만듭니다.CreateFileMapping 함수가 설정한 파일 크기는 물리 디스크 파일의 크기보다 크지 않습니다.이것은 이렇게 하지 않으면 어떤 데이터도 이 파일에 추가할 수 없기 때문이다.
  • 좋은 웹페이지 즐겨찾기