'CoCreateInstanceAsAdmin'에 해당되는 글 1건

  1. 2009/02/10 비스타에서 표준사용자계정으로 이지키텍을 사용할때의 문제점과 해결방법. (1) - 뇽이
안녕하세요. 뇽이입니다~ 오랜만에 글을 쓰네요.^^;;;

얼마전에 비스타의 표준사용자계정으로 이지키텍 웹 버전실행했을 경우 문제가 있는것을 확인했습니다.
비스타에서 표준사용자계정으로 쓰는일이 없었고 문의도 없었서 미쳐 몰랐었는데요.
어제 문의가 들어와서 알게되었습니다. (__)
이런 버그를 미연에 발견했었으면 좋았을텐데 이렇게라도 확인이 되어서 다행이네요.


이 글에서는 표준사용자계정으로 권한상승 후 발생되는 문제점을 소개해 드리려고 합니다.
비스타에서 "표준 사용자"계정이 있고, "Administrator" 계정이 존재합니다.
(일반적으로 사용하고 계시는게 "Administrator"계정입니다.)

"표준 사용자"계정으로 권한이 필요한 프로그램을 실행시키면 권한상승창이 뜨게 되고 "Administrator"계정과 똑같이 권한이 상승됩니다.
그러나 권한상승된 COM 객체의 메소드를 호출할 수가 없게 됩니다. (E_ACCESSDENIED 가 반환됩니다.)
여기서 부턴 좀 기술적인 부분이라 일반사용자분은 힘들게 이해하실 필요는 없으시고요. 그냥 "그렇게 있어서 문제가 되었었구나..."정도로 생각해주시면 될 것 같습니다.^^;;

위 부분을 좀더 정확히 설명드리자면, CoCreateInstanceAsAdmin() 함수는 정상적으로 호출되서 성공했지만 이 후 COM객체의 실질적인 메소드를 호출할때 어느 메소드와 상관없이 E_ACCESSDENIED가 반환되는 문제입니다.

자, 그럼 본론으로 들어가서 "이 문제를 어떻게 해결하느냐?"가 핵심인데요.
COM객체에 권한을 부여해주면 됩니다!
어떻게 하냐고요? 아래 순서대로 하시면 됩니다. ^^;

1. "실행"창에 "dcomcnfg"를 입력한 후 실행을 시킵니다.
2. "구성 요소 서비스"라는 프로그램이 실행됩니다.
3. 구성 요소 서비스 -> 컴퓨터 -> 내 컴퓨터 -> DCOM 구성 순으로 탐색합니다.
사용자 삽입 이미지
(위와 같은 화면이 나오시면 됩니다. 또한 COM객체에 대한 AppID값을 확인할 수 있습니다.)
4. 권한을 부여해줄 COM객체를 선택한 수 오른쪽 마우스클릭하여 "속성"탭을 선택니다.
5. 보안탭의 액세스 권한을 "사용자 지정" 으로 선택하신 후 "편집"을 누릅합니다.
6. "추가"버튼을 누른 후 "interactive"를 입력하여 추가시킵니다.

위 순서대로 진행이 되면 다음 화면처럼 나옵니다.
사용자 삽입 이미지
"INTERACTIVE"란게 추기되었죠?

위 과정대로 처리를 하면 비스타의 "표준 사용자"계정으로 COM객체를 만들어 오류없이 COM객체의 메소드를 호출할 수가 있습니다.
이 처리과정을 프로그램적으로 구현이 가능한데요.
다행히 샘플프로그램이 존재합니다. ^^;
"DComPerm"이란 샘플프로그램이 Windows SDK내에 있습니다. (소스코드존재함)
이 샘플프로그램을 이용해서 프로그램적으로 구현해주면 되겠습니다.

샘플을 빌드하고 실행할때 실행인자값을 아래 처럼사용하시면 interactive가 등록이 됩니다.
-aa "AppID" set interactive permit level:l,r


참고자료)
http://blogs.msdn.com/vistacompatteam/archive/2006/09/28/CoCreateInstanceAsAdmin-or-CreateElevatedComObject-sample.aspx


PS)
현재 이지키텍도 이 글에서 언급된 문제가 있으며 곧 패치될 예정입니다.
빠른 패치로 불편을 최소화하도록 노력하겠습니다. ^^;

이올린에 북마크하기(0) 이올린에 추천하기(0)
2009/02/10 14:20 2009/02/10 14:20