작동하는 데 사용되는 코드가 있지만 최근에 중지되었습니다. 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 오류가 발생할 수있는 이유는 무엇입니까? 이 기능을 사용하려면 어떤 보안 계통을 뛰어 넘어야합니까?
COM 서버를 코딩하고 있습니까? 그것은 in-proc 또는 out-proc 서버입니까? – sharptooth
@sharptooth out-proc COM 서버라고 생각합니다. – Tim