1

Microsoft の Web サイト ( msdn.microsoft.com/en-us/library/ms683502(VS.85).aspxを参照) から、「Windows Vista 以降、サービスはユーザーと直接やり取りできません」と明確に記載されています。

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

それとも、psexec がなんらかの黒魔術を行っているためでしょうか? もしそうなら、それはどのようにしますか?

Vista および XP で、サービスから winlogon デスクトップ オブジェクトに全画面ウィンドウを表示しようとしています。

4

1 に答える 1

3

サービス内で実行されるコードは、対話型セッションと直接対話できません。

ただし、十分な特権を持つサービスとして実行されるコードは、特定のユーザーのデスクトップ内で実行される新しいプロセスを作成できます。たとえば、インタラクティブ セッションのユーザーのトークンを取得して、CreateProcessAsUser を呼び出します。

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

サービスは、ハンドラー関数でセッション変更通知を使用して、ユーザーのログオン/ログオフ、セッションのロック解除などを確認することもできます。

于 2009-05-20T19:58:22.600 に答える