2009-05-20 11 views
1

MicrosoftのWebサイト(msdn.microsoft.com/en-us/library/ms683502(VS.85).aspxを参照)では、「Windows Vistaの場合、サービスはユーザーと直接対話できません」と明記されています。ユーザーはMicrosoft Vistaでサービスと直接対話できますか?

だから私はこれを "psexec -s cmd.exe"を使ってテストすることにしました。私が知る限り、 "psexec"はコマンドプロンプトを開くためのサービスを作成します。言うまでもなくそれは働いた。私はその後、「EnumWinSta GUI」をpsexecと組み合わせて使用​​してwinlogonデスクトップに切り替えることにしました。私の驚いたことに、私もこのデスクトップ上で "cmd.exe"を起動することができます。これは、サービスから作成された新しいプロセスがインタラクティブになることを意味しますか?

psexecは何らかの黒い魔法をしているのでしょうか?もしそうなら、それはどうやってそれをしますか?

私はVistaからXPのwinlogonデスクトップオブジェクトにフルスクリーンウィンドウを表示しようとしています。

+1

なぜ、全画面ウィンドウでwinlogonデスクトップを覆いたいのですか?これは、ログオンUIを偽装しようとしているマルウェアのように聞こえます。 – Michael

+0

これは、建物内の火災などの緊急通知用です。 –

答えて

3

サービス内で動作するコードは、対話型セッションと直接対話できません。

ただし、十分な特権を持つサービスとして実行されているコードは、特定のユーザーのデスクトップ内で実行される新しいプロセス、つまり対話型セッションのユーザーのトークンを取得し、CreateProcessAsUserなどを呼び出すことができます。

WTSGetActiveConsoleSessionIdを使用して、実際にマシン上にあるユーザーのセッションであるアクティブなコンソールセッションを取得できます。 WTSQueryUserTokenを使用してトークンを取得できます。

サービスでは、ハンドラ機能でセッション変更通知を使用して、ユーザーがいつログオン/ログオフしたかを確認したり、セッションをロック解除したりすることもできます。

+0

対話型セッションのユーザーのトークンを取得するにはどうすればよいですか? –

関連する問題