2013-02-23 3 views
2

권한 상승없이 실행되는 Windows 응용 프로그램이 있습니다. 실행중인 모든 응용 프로그램 인스턴스간에 메모리 배열을 공유 할 파일 매핑 개체를 만들어야합니다. 일부 인스턴스는 다른 로그온 세션에서 실행될 수 있습니다.사용자 모드 프로세스에서 전역 파일 매핑 개체를 만들지 못했습니다.

나는 CreateFileMapping API를 호출하여 만듭니다. Global\sharedname과 같은 보안 설명자를 사용하고 everyone에 대한 액세스가 all이지만 해당 API는 오류 코드 5 또는 ERROR_ACCESS_DENIED으로 실패합니다.

그런 다음 문서를 읽기 시작하고 내 프로세스에 SeCreateGlobalPrivilege 권한이 필요하다는 것을 알았습니다. 하지만 그 특권을 할당하려고하면 AdjustTokenPrivileges은 오류 코드 ERROR_NOT_ALL_ASSIGNED을 반환하고 나는 막혔습니다. ...

그래서 여기 트릭은 무엇입니까, 그 freakin 'MS는 어떻게 우리가 그것을 원하니 ???

추신. 이전에 동일한 all access for everyone 보안 설명자와 Global\sharedmutex 이름을 사용하여 전역 적으로 이름이 지정된 뮤텍스 (공유 메모리에 대한 동기화 된 액세스 용)를 만들 수 있습니다.

+0

내가 알 수있는 바로는 "GLOBAL \ sharedname"은 모든 세션에서 액세스 할 수있는 개체를 만드는 것입니다. 여러 세션에서 액세스하거나 여러 프로세스에서 액세스해야합니까? –

답변

5

세션 0에서 실행중인 관리자 및 서비스 만 Global 네임 스페이스에 파일 매핑을 만드는 데 필요한 SeCreateGlobalPrivilege 권한을 얻을 수 있습니다. 코드를 서비스에 다시 쓰지 않으려는 경우 파일 매핑을 만들기 위해 별도의 승격 된 프로세스를 생성해야합니다.

+0

확인해 주셔서 감사합니다. 나는 그렇게 생각하는 경향이 있었다. 참고로이 제한을 부과하는 것은 얼마나 우스 웠습니까? 비 승강 된 프로세스간에 데이터를 공유 할 수없는 이유는 ... 어쨌든, 그것은 문제가 아닙니다. 플랫폼에 대한 좌절입니다. 그리고 당신의 요점에 대답하기 위해, 아니오, 나는 상승 된 과정을 산란시킬 수 없습니다. 해결 방법은 공유 파일 시스템 파일을 사용하여 데이터를 공유하는 것입니다. 유일한 단점은'모든 사람이 읽기 - 쓰기 권한을 갖도록 ACL을 변경해야하기 때문에 꽤 불안 할 것입니다. – c00000fd

관련 문제