2017-10-19 22 views
4

내 응용 프로그램이 아닌 UAC 프롬프트가 실행되면 화면에 움직이는 이미지 대신 마지막으로 표시되는 프레임이 표시되는 특정 작업이 중단됩니다 (Direct3D 장치 핸들이라고 생각합니다).Windows UAC 프롬프트가 트리거 될 때 WinAPI 메시지가 있습니까?

3D 이미지를 표시하는 코드 (플러그인 임)를 작성하지 않았지만 UAC 프롬프트 이후에 창 크기를 조정하면 이미지가 반환됩니다.

UAC 프롬프트가 닫히는 것을 감지하여 보상을 위해 화면을 새로 고치는 코드를 호출 할 수 있습니까?

답변

6

일반적으로 UAC 프롬프트는 보안 된 바탕 화면에 표시되므로 다른 바탕 화면으로 전환됩니다 (참조 : SwitchDesktop 참조). 이 옵션을 해제하고 이 아닌 UAC 프롬프트에서 바탕 화면 전환이 발생하더라도 보안상의 이유로 기본적으로 켜져 있기 때문에 시각 장애가 발생하는 경우가 거의 확실합니다.

EVENT_SYSTEM_DESKTOPSWITCH event에 대한 청취를 위해 SetWinEventHook function을 사용하여이 문제가 발생했음을 알릴 수 있습니다. 다른 상황으로 인해 데스크톱 스위치가 발생할 수 있기 때문에 오탐 (false positive)이 발생하지만 모든 경우에 다시 그리기 만하면되는 것은 아닙니다.

이것은 일반적인 해결책이지만 신뢰할 수는 없습니다. 일반적으로 으로 보안 데스크톱이 표시 될 때이를 감지 할 수 없으므로 보안 구멍이 열릴 수 있습니다.

질문에 사용중인 Direct3D의 버전이 지정되어 있지 않지만 레거시 버전 (예 : Direct3D 9) 인 경우 렌더링 장치가 분실 된 것처럼이 데스크톱 전환이 처리됩니다. 귀하의 경우에는 더 나은 해결책은 아마도 장치 분실 (EC_DEVICE_LOST)에 대한 처리기를 설치하여 핸들을 다시 설정하고 다시 그리기를 강제하는 등 적절하게 대응할 수 있도록하는 것입니다.

그러나 이것은 데스크탑 스위치 이벤트를 인식하도록 작성 되었기 때문에 최신 버전의 Direct3D에서는 문제가되지 않습니다. UAC 프롬프트는 데스크톱 스위치로 이어질 수있는 하나의 일반적인 시나리오입니다. 워크 스테이션을 잠그는 것은 또 다른 일입니다. 이 두 가지 모두 안전한 Winlogon 데스크톱으로 전환합니다. 새로운 WDDM 인식 버전의 Direct3D (예 :, Direct3D 9Ex 또는 Direct3D 10 이상) should handle this seamlessly, without losing the rendering device and without experiencing any visual disruption.