문제

Microsoft 웹 사이트에서 (참조 msdn.microsoft.com/en-us/library/ms683502(vs.85).aspx) "서비스는 Windows Vista에서 사용자와 직접 상호 작용할 수 없습니다"라고 명확하게 말합니다.

그래서 나는 "psexec -s cmd.exe"를 사용하여 이것을 테스트하기로 결정했습니다. 내가 아는 한, "psexec"은 명령 프롬프트를 열기 위해 서비스를 만듭니다. 말할 것도없이 효과가있었습니다. 그런 다음 PSEXEC와 함께 "enumwinsta gui"를 사용하여 Winlogon 데스크탑으로 전환하기로 결정했습니다. 놀랍게도, 나는이 데스크탑에서 "cmd.exe"를 시작할 수도 있습니다. 이것은 서비스에서 생성 된 새로운 프로세스가 대화식이 될 수 있음을 의미합니까?

아니면 psexec이 일종의 흑 마법을하기 때문입니까? 그렇다면 어떻게합니까?

서비스에서 Vista의 Winlogon 데스크탑 객체 및 XP로 전체 화면 창을 표시하려고합니다.

도움이 되었습니까?

해결책

서비스 내에서 실행되는 코드는 대화식 세션과 직접 상호 작용할 수 없습니다.

그러나 충분한 권한이있는 서비스로 실행되는 코드는 특정 사용자의 데스크탑 내에서 실행되는 새로운 프로세스를 생성 할 수 있습니다. 예를 들어 대화식 세션의 사용자 토큰을 얻고 CreateProcessAsuser를 호출합니다.

wtsgetActiveConsolessessionId를 사용하여 실제로 컴퓨터에있는 사용자 세션 인 활성 콘솔 세션을 얻을 수 있습니다. 그런 다음 WTSQUERYUSTOKE를 사용하여 토큰을 얻을 수 있습니다.

서비스는 핸들러 기능의 세션 변경 알림을 사용하여 사용자 로그온/로그 오프, 세션 잠금 해제 등을 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top