2009-05-20 5 views
1

Microsoft 웹 사이트 (msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx 참조)에서 "서비스가 Windows Vista로 사용자와 직접 상호 작용할 수 없습니다"라고 분명히 말합니다.사용자가 Microsoft Vista에서 직접 서비스와 상호 작용할 수 있습니까?

그래서 "psexec -s cmd.exe"를 사용하여이를 테스트하기로 결정했습니다. 필자가 아는 한 "psexec"은 명령 프롬프트를 열기 위해 서비스를 생성합니다. 말할 필요도없이 효과가있었습니다. 그런 다음 psexec와 함께 "EnumWinSta GUI"를 사용하여 winlogon 데스크톱으로 전환하기로 결정했습니다. 놀랍게도이 바탕 화면에서 "cmd.exe"를 시작할 수도 있습니다. 이것은 서비스에서 생성 된 새로운 프로세스가 상호 작용할 수 있다는 것을 의미합니까?

psexec이 일종의 흑 마술을하기 때문에 그렇습니까? 그렇다면 어떻게 그럴 수 있습니까?

Windows XP뿐만 아니라 Vista의 winlogon 바탕 화면 개체에 전체 화면 창을 표시하려고합니다.

+1

왜 전체 화면으로 winlogon 바탕 화면을 숨기고 싶습니까? 이것은 로그온 UI를 스푸핑하려는 악성 코드와 유사합니다. – Michael

+0

건물 내 화재와 같은 긴급 통보를위한 것입니다 ... –

답변

3

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

그러나 충분한 권한을 가진 서비스로 실행되는 코드는 대화 형 세션의 사용자 토큰을 받고 CreateProcessAsUser를 호출하는 등 특정 사용자의 데스크톱에서 실행되는 새 프로세스를 만들 수 있습니다.

WTSGetActiveConsoleSessionId를 사용하여 실제 콘솔에있는 사용자의 세션 인 활성 콘솔 세션을 가져올 수 있습니다. 그런 다음 WTSQueryUserToken을 사용하여 토큰을 가져올 수 있습니다.

서비스에서는 처리기 기능에서 세션 변경 알림을 사용하여 사용자가 로그온/로그 오프 할시기를 확인하고 세션 잠금을 해제하는 등의 작업을 수행 할 수도 있습니다.

+0

대화 형 세션의 사용자 토큰을 얻으려면 어떻게해야합니까? –

관련 문제