본문 바로가기
개발/Windows

Memory Mapped File (MMF) Global로 명명할 때 권한 / winapi

by lucidmaj7 2020. 4. 3.
728x90
반응형

Memory Mapped File, MMF

Memory Mapped File, MMF는 Windows 시스템에서 파일을 다루는 방법 하나입니다. 물리적인 디스크 파일이나 장치, 공유메모리 객체와 같이 운영체제에서 파일로 다루는 모든 대상에 사용이 가능합니다. 이러한 MMF는 프로세스의 가상 메모리 주소 공간에 파일을 맵핑한뒤 가상메모리 주소에 직접 접근 하는 것 만으로도 파일의 읽기와 쓰기 기능을 수행 할 수 있습니다.

또한 Windows에서 두 프로세스간 메모리를 공유하는 방법으로는 유일한 방법이기도 합니다. 이를 잘 활용하면 두 프로세스간 IPC를 구현할 수 있습니다.

자세한 내용은 이미 많은 블로그와 책에 나와 있으므로 이정도까지 설명을 하고 오늘 이야기 하고자하는 이름있는 메모리맵에 Global\을 Prefix로 할경우 권한 설정에 대해 알아 보고자 합니다.

우선 MSDN에서 설명하고 있는 이름 있는 공유 메모리 생성에 관한 글을 먼저 볼 필요가 있습니다.(# Creating Named Shared Memory)
https://docs.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memory

이 글의 예제에는 두개의 프로그램을 가정하고 있습니다. 하나는 이름 있는 공유 메모리를 MMF를 이용하여 생성하고 다른 하나는 생성된 이름 있는 공유 메모리를 열어 값을 읽어오는 예제 입니다.

우리가 주목할 점은 다음 "Global"이라는 이름을 Prefix로 가질 때 입니다.

Prefixing the file mapping object names with "Global" allows processes to communicate with each other even if they are in different terminal server sessions. This requires that the first process must have the SeCreateGlobalPrivilege privilege.

"Global "로 파일 맵핑 오브젝트 이름을 접두어로 사용하면 프로세스가 서로 다른 터미널 서버 세션에 있더라도 프로세스가 서로 통신 할 수 있습니다. 이를 위해서는 첫 번째 프로세스에 SeCreateGlobalPrivilege 권한 이 있어야합니다 .

앞서 작성한 포스트(https://lucidmaj7.tistory.com/140 )에서 이야기 한바와 같이 Windows Vista부터 Session 이라는 개념이 도입 되었으면 서로 다른 Session에 대한 접근이 까다로워 졌습니다.
MMF에서도 마찬가지로 Global로 명명된 MMF에 대한 접근이 까다로워 졌습이다. 이러한 문제의 해결 방법으로 MSDN에서는 SeCreateGlobalPrivilege 권한을 MMF를 만드는 프로세스에서 취하도록 이야기 하고 있습니다.

 

728x90
반응형

댓글