본문 바로가기

C#

UAC(사용자 계정 컨트롤)로 인하여 Drag & Drop 기능 작동 안할 시

프르그램을 관리자 권한으로 실행해야하는 경우가 존재합니다.
ex)시스템 드라이버 혹은 C 드라이브의 특정 폴더
 내 파일을 읽고 쓸 경우

이 때 관리자 권한으로 권한 상승을 하기 위한 방안은 2가지입니다.
1. 프로세스 객체를 통해 관리자 권한으로 권한 상승
2. 프로젝트 내 매니페스트 파일을 통해 관리자 권한으로만 프로그램을 실행할 수 있도록 권한 상승
두번째 방안의 경우 주의해야할 점이 있는데요. 특정 프로그램에서 관리자 권한의 프로그램을 실행할 경우 특정 프로그램 또한 관리자 권한을 가지고 있어야 하는 단점이 존재합니다.

이슈사항 - 가상프린터드라이버에서 특정 관리자 권한의 프로그램 실행 불가능

관리자 권한으로 권한이 상승된 프로그램의 경우 윈도우 탐색기에서 프로그램 내로 Drag&Drop 기능이 보안상 이유로 불가능합니다. 윈도우 탐색기의 권한은 중간레벨이며 관리자 권한 프로그램의 권한은 높음레벨이기 때문에 중간레벨에서 높음레벨로 작동하지 않습니다.

Drag & Drop 기능을 작동하기 위해서는 Win32 API 함수 중 운영체제 버전에 따라 ChangeWindowMessageFilter 혹은 
ChangeWindowMessageFilterEx 함수를 사용하여 운영체제에게 Drag & Drop 메시지를 변형하여 전달합니다.
이 때 주의할 점은  Drag & Drop 기능을 수행할 컨트롤의 속성 중 AllowDrop을 False값으로 변경해주셔야 합니다.
True 값일경우 위의 보안상 문제로 인하여 Drag & Drop 기능 불가