HANDLE WINAPI CreateFileMapping( _In_ HANDLE hFile, -----① _In_opt_ LPSECURITY_ATTRIBUTES lpAttributes, -----② _In_ DWORD flProtect, -----③ _In_ DWORD dwMaximumSizeHigh, -----④ _In_ DWORD dwMaximumSizeLow, -----⑤ _In_opt_ LPCTSTR lpName -----⑥ );
함수 설명 :
이 함수를 사용을 할려면 먼저 파일에 대한 핸들이 있어야 한다. 파일을 맵핑하는 것이기 때문에 당연한것이라 생각 하면된다. 함수 성공시 파일 연결 오브젝트 핸들을 반환한다. 그리고 이 핸들을 MapViewOfFile 함수를 사용하여 실제 메모리에 맵핑을 한다. 실패시 NULL값을 반환한다.
① hFile :
메모리에 연결할 파일의 핸들을 지정한다.
② lpAttributes :
커널 오브젝트를 생성하는 함수들과 마찬가지로 보안 속성을 지정한다.
③ flProtect :
파일과 연결된 메모리의 접근 권한을 지정한다.
값 |
의미 |
PAGE_READONLY |
위탁된 페이지 영역에의 읽어내 전용 액세스를 줍니다.위탁 영역에의 기입 혹은 코드 실행을 실시하려고 하면 액세스 위반이 발생합니다.hFile파라미터로 지정된 파일은GENERIC_READ액세스권을 가지고 있지 않으면 안됩니다. |
PAGE_READWRITE |
위탁된 페이지 영역에의 읽어내·기입 액세스를 취득합니다.hFile파라미터로 지정된 파일은GENERIC_READ및GENERIC_WRITE액세스권을 가지고 있지 않으면 안됩니다. |
PAGE_WRITECOPY |
위탁된 페이지 영역에의 카피 온 라이트 액세스를 줍니다.hFile파라미터로 지정된 파일은GENERIC_READ및GENERIC_WRITE액세스권을 가지고 있지 않으면 안됩니다. |
그리고 아래의 속성을 OR로 조합하여 지정할 수 있다.
값 |
의미 |
SEC_IMAGE |
섹션의 파일 매핑에 대해서 지정된 파일은 실행 가능 이미지 파일입니다.매핑 정보 및 파일 보호 속성은 이미지 파일로부터 취득되기 위해, 다른 속성을SEC_IMAGE(와)과 함께 지정할 수 없습니다. |
SEC_RESERVE |
섹션의 전페이지를 예약합니다.물리 스토리지의 확보는 실시하지 않습니다.예약된 페이지 영역은, 그 영역이 해방될 때까지, 다른 메모리 확보 조작에 의해서 사용될 것은 없습니다.다음에VirtualAlloc함수를 호출해 예약 페이지를 위탁할 수 있습니다.이 속성은,hFile파라미터가INVALID_HANDLE_VALUE인 경우에게만 유효합니다. |
SEC_COMMIT |
섹션의 전페이지에 대해서, 메모리내 혹은 디스크상 페이징 파일내의 물리 스토리지를 확보합니다.이것은 디폴트의 설정입니다 |
SEC_NOCACHE |
섹션의 전페이지를 캐쉬 불가로 설정합니다.이 속성은, 여러 가지의 락 구조체가 메모리내에 놓여지도록(듯이) 해, 프로세서내의 캐시 기억 장치에 놓여지지 않게 하기 위해서 이용됩니다.80x86머신 및MIPS머신상에서는, 이러한 구조체에 대해서 캐쉬를 사용해도, 하드웨어가 캐쉬의 일관성을 유지하려고 할 때에 있어서의 퍼포먼스 저하 밖에 일으키지 않습니다.몇개의 디바이스 드라이버는 프로그램이 물리 메모리에 제대로 써지도록(듯이) 비캐쉬의 데이터를 요구합니다.SEC_NOCACHE(을)를 지정하려면 ,SEC_RESERVE또는SEC_COMMIT의 언젠가를 함께 지정할 필요가 있습니다. |
④ dwMaximumSizeHigh :
연결할 메모리 최대 크기의 상위 4바이트를 지정한다. 대용량이 아니라면 0으로 하면된다.
⑤ dwMaximumSizeLow :
연결할 메모리 최대크기의 하위 4바이트를 지정한다. 0이 전달되면, 첫번째 인자로 전달된 핸들의 파일 크기로 지정된다.
⑥ lpName :
파일 연결 오브젝트의 이름을 지정한다. NULL을 지정할 수 있다.
LPVOID WINAPI MapViewOfFile( _In_ HANDLE hFileMappingObject, ------① _In_ DWORD dwDesiredAccess, ------② _In_ DWORD dwFileOffsetHigh, ------③ _In_ DWORD dwFileOffsetLow, ------④ _In_ SIZE_T dwNumberOfBytesToMap ------⑤ );
함수 설명 :
함수 성공시 매핑된 뷰의 시작주소를 반환한다.타입이 Void형 포인터이기 때문에 용도에 맞에 형 변환하여 사용하면 된다. 실패시 NULL값을 리턴한다.
① hFileMappingObject :
CreateFileMapping 함수를 통해 얻은 커널 오브젝트 핸들을 인자로 전달한다. 메모리에 연결할 파일 정보와 연결에 필요한 특성 정보를 제공하는것이다.
② dwDesiredAccess :
연결된 메모리의 접근 권한을 지정한다.
치 |
의미 |
FILE_MAP_COPY |
카피 온 라이트 액세스 hMappingObject 파라미터로 지정되는 파일 매핑 오브젝트가 PAGE_WRITECOPY 보호 속성을 지정해 작성되어 한편, 이 플래그를 지정했을 경우는, 이 뷰에 기입을 하면, 페이지가 자동적으로 스왑 되고, 오리지날의 데이터 파일은 변경되지 않습니다. Windows NT/2000/XP: 파일 매핑 오브젝트의 보호 속성의 제한은 없습니다.카피 온 라이트 액세스의 지정은, 어느 보호 속성을 가지는 뷰에 대해서도 유효합니다. 1개의 매핑 오브젝트를 복수의 프로세스간에 공유하고 있는 경우에, 어느 프로세스의 뷰에 기입을 행해도, 다른 프로세스의 뷰는 변경되지 않습니다.오리지날 파일의 데이터는 변화하지 않습니다. |
FILE_MAP_WRITE |
읽고 쓰기 액세스 hMappingObject 파라미터로 지정되는 파일 매핑 오브젝트는 PAGE_READWRITE 보호 속성을 지정해 작성된 것이 아니면 안됩니다. |
FILE_MAP_READ | 읽기 전용 액세스 hMappingObject 파라미터로 지정되는 파일 매핑 오브젝트는 PAGE_READWRITE 또는 PAGE_READONLY 보호 속성을 지정해 작성된 것이 아니면 안됩니다. |
FILE_MAP_ALL_ACCESS |
FILE_MAP_WRITE (와)과 같다 |
③ dwFileOffsetHigh :
메모리에 연결할 파일 오프셋(Offset) 상위 4바이트를 지정한다. 이때 파일 전체가 아닌 일부 영역을 지정하는것도 가능하다.
④ dwFileOffsetLow :
메모리에 연결할 파일 오프셋 하위 4바이트를 지정한다.
⑤ dwNamberOfBytesToMap
매핑하는 파일의 사이즈를 지정한다. 오프셋을 기준으로 지정된 바이트만큼 메모리에 연결된다. 0을 연결하게 되면 지정된 오프셋에서 부터 파일 끝까지 연결된다.
BOOL WINAPI UnmapViewOfFile( _In_ LPCVOID lpBaseAddress --------① );
함수 설명 :
매핑되어 있는 연결을 해제한다. 성공시 0이외의 값이 리턴된다.
① lpBaseAddress :
연결 해제할 메모리의 시작주소를 지정한다. MapViewOdFile을 호출시 반환되었던 주소값을 전달한다.