2014-04-25 5 views
1

Windows 탐색기 네임 스페이스 확장을 개발 중입니다. 내 응용 프로그램은 잠시 explorer.exe에서로드하여 사용하는 동적 라이브러리입니다. 내 DLL을 C : \ 및 때때로 그러한 작업을 수행하기위한 고도가 필요한 다른 위치에 파일을 생성해야합니다.C++ winapi elevation

어떻게 그런 고도를 수행하고 C에서 파일을 만들 수 있습니다 : \를 예를 들면? 코드가 다른 프로세스 내에서 실행하는 경우

+0

@DavidHeffernan, DLL에 대한 이러한 매니페스트 기능이있다? – JimmyB

+0

나는 그렇게 생각했다. 그래서 이것은 OP의 DLL을위한 옵션이 아닙니다. – JimmyB

+1

[This (http://stackoverflow.com/a/4337793/1015327) 꽤 잘 요약합니다. – JimmyB

답변

1

그것은 그 과정의 고도 국가의 자비에 있습니다. 해당 프로세스가 상승 된 상태로 실행되지 않고 탐색기가 실행되지 않으면 DLL의 코드가 상승 된 권한을 실행할 수 없습니다.

귀하의 솔루션은 그러므로 상승을 필요로하는 작업을 수행하기 위해 다른 프로세스를 만드는 것입니다. 이러한 방법을 사용하여 하나 그렇게 :

  • 은 응용 프로그램 매니페스트에 requestedExecutionLevel에 대한 requireAdministrator 옵션을 지정합니다.
  • runas 동사와 ShellExecuteEx를 사용하여 프로세스를 시작
  • .
  • 코드를 COM 개체에 올려 놓고 COM 권한 상승 모니 커를 사용하십시오.
+0

다른 옵션은 고도가 필요한 작업을 별도의 COM 개체로 구현하는 것입니다 (네임 스페이스 확장 자체는 COM 개체이므로 COM 개발자에게는보다 자연스러운 솔루션이 될 수 있습니다). 그런 다음 [COM Elevation Moniker] (http : //msdn.microsoft.com/ko-kr/library/windows/desktop/ms679687.aspx) 필요한 경우 작업 개체를 인스턴스화합니다. UAC 매니페스트가 필요하지 않습니다. –

+0

좋은 지적입니다. com 접근 방식은 또한 가장 깨끗한 통신 방법을 제공합니다. –