2011-03-17 4 views
4

작동하는 데 사용되는 코드가 있지만 최근에 중지되었습니다. Adobe Reader 플러그인에 포함되어 있으며 최신 Reader 버전에는 내 문제를 일으키는 "보호 모드"가 있습니다.CoCreateInstance에서 E_ACCESSDENIED가 작동했습니다.

내 플러그인로드에서 프로세스 내 정상적인 DLL을, 일부로드 할 수 있습니다 : 내 서비스에 COM 포인터를 얻을 때

MyNormalLib::IMyClassPtr foo; 
HRESULT hr = foo.CreateInstance(__uuidof(MyNormalLib::MyClass)); 

을하지만 (동일한 시스템에서 실행) :

MyOtherLib::IMyServicePtr bar; 
HRESULT hr = bar.CreateInstance(__uuidof(MyOtherLib::MyService)); 

내 HRESULT는 E_ACCESSDENIED입니다.

Adobe Reader X가 출시 될 때까지 제대로 작동하는 데 사용됩니다. 보호 모드가 없으면 Adobe는 정상적으로 실행되며 모든 기능이 작동합니다. Protected Mode를 사용하면 Adobe는 몇 가지 제한 사항과 함께 다른 Reader 프로세스를 생성합니다. Process Explorer에서 이것을 보면 부모 Reader 프로세스의 보안 탭에 거의 모든 것이 필수로 설정되어 있음을 알 수 있습니다. 그러나 하위 리더 프로세스에는 대부분의 그룹이 "거부, 필수"로 설정되어 있으며, 일부는 "필수, 제한"으로 설정되어 있으며, 일부는 필수 항목입니다. 이것이 중요한 경우, 나는 더 자세한 내용을 제공 할 수 있습니다.

모든 프로세스 (내 서비스와 두 리더)는 동일한 사용자 - 나를 통해 실행됩니다. 그게 중요한 일이라면 관리자 권한이 있습니다.

내 서비스에 접속하려고 할 때 AccessDenied 오류가 발생할 수있는 이유는 무엇입니까? 이 기능을 사용하려면 어떤 보안 계통을 뛰어 넘어야합니까?

+0

COM 서버를 코딩하고 있습니까? 그것은 in-proc 또는 out-proc 서버입니까? – sharptooth

+0

@sharptooth out-proc COM 서버라고 생각합니다. – Tim

답변

2

제한된 프로세스에는 관리자 권한이 없습니다. 그것이 운동의 요점입니다. Reader X는 토큰에서 가능한 한 많은 권한을 삭제하므로 컴퓨터가 아닌 경우에는 권한이 없습니다.

(기본적으로 UAC가 작동하는 방식이므로 관리자 그룹을 비활성화 한 후에 커널을 다시 사용하도록 설정해야합니다.)

기본적으로 Reader X에있는 개인 정보를보고 구성 요소가 해당 권한과 함께 사용될 수 있는지 확인해야합니다. Process Monitor는 귀하의 친구입니다. DENIED에 대한 필터 일 뿐이므로 문제는 곧 해결 될 것입니다.

+0

감사합니다. 도움이됩니다. 프로세스 모니터에 관해서, 어떤 범주가 거부되어야합니까? 나는 아무것도 보지 못했다. 나는 ProcessName = AcroRd32에서 모두 보여 주었고 80 개의 메시지를 보여 주었지만 결과는'SUCCESS'였습니다 (이름이 '발견되지 않은'몇 개 제외) – Tim

+0

프로세스 모니터에서 많은 열을 선택할 수 있습니다. 결과를 원해. – Ben