2009-05-15 4 views
0

내 OS가 Vista이고 UAC가 켜져 있고 서버 측에서 전역 Mutex 개체를 만든 다음 UI가있는 내 AP가 동일한 이름의 CreateMutex를 사용하여 서버에 만든 Mutex 개체를 가져 오려고합니다. , 그러나 기능은 나에게 그것에 접근 할 권리가 없다고 말해 준다. 내가 어떻게 해?Vista의 Mutex 개체 정보

+0

당신이 서버와를 실행에 이름의 접두사해야합니다 -

또한 당신이 정말 글로벌 뮤텍스를 필요로하는 경우 있음을 유의 동일한 Vista 시스템의 UI? –

+0

예, 큰 문제는 UI가 기존의 뮤텍스가 UI SW보다 더 높은 권한을 가지고 있기 때문에 서버가 만든 MUTEX에 액세스 할 필요가 없다는 것입니다. –

답변

5

당신의 경우에는 해당 보안 속성을 초기화하여 뮤텍스에 대한 모든 액세스를 명시 적으로 허용해야한다고 생각합니다. 이 방법으로 (반 의사 코드로 고려) 뮤텍스를 생성

시도 :

SECURITY_ATTRIBUTES sa; 
SECURITY_DESCRIPTOR sd; 
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION); 
SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE); 
sa.nLength = sizeof(sa); 
sa.lpSecurityDescriptor = &sd; 
CreateMutex(&sa, ...); 

그리고 그런데

-이 괜찮는 기존 뮤텍스를 엽니 다 CreateMutex를 사용합니다. 그러나 OpenMutex에서는 필요한 액세스 수준을 지정할 수 있습니다. 당신이 "글로벌 \"(MSDN의 "커널 개체 이름 공간"을 참조 기사)

+1

글쎄, 좋은 연습 문제는 아닙니다 : 같은 뮤텍스를 초기화하고 액세스해야하는 전역 후크 DLL이 있다고 상상해보십시오 - OpenMutex는이 시나리오에서는 편리하지 않습니다. 하지만 코드에서 뮤텍스를 만들고 뮤텍스에 쉽게 액세스 할 수 있다면 - CreateMutex가 생성되고 OpenMutex가 원하는 액세스 권한을 가진 기존 뮤텍스를 여는 경우 코드가 더 명확 해집니다. – Andrey

+0

감사합니다. –