일반적으로 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.