0

私は次のことをしようとしています:

computer         computer
   A                B
   |                | Computer B is logged off 
   |--login-------->|
   |                | Computer B logs in as an interactive user
   |<------SUCESS---|
   |-Start notepad->|
   |                | Computer B shows desktop with notepad instance open.

Session0 分離により、メモ帳を対話型ユーザーとして表示できなくなります。

私は多くの解決策を試しましたが、どれもうまくいきません。WMI ( http://msdn.microsoft.com/en-us/library/ms257337(v=vs.80).aspx ) を使用してトークンを取得しようとしましたが、うまくいきません。

LogonUser 関数 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx ) を使用しようとしましたが、機能しません。

このリンクで提案されているように、複数の解決策を試しました: プログラムで Windows ワークステーションのロックを解除します が、何も機能しません。

これを行う方法は何ですか?

4

2 に答える 2

0

対話型ユーザーをプログラムで完全に偽装して、物理コンソールと関連する GDI コンストラクトを取得することはできないようです。

これを行う唯一の方法は、対話型セッションへの自動ログオンを有効にし、対話型セッションで新しいクライアント コンポーネントと対話するようにサービスをリファクタリングすることです。このセキュリティ上の欠点に対処するために、Microsoft は、ログオン時にサーバーを「キオスク」モードにする (つまり、適切な資格情報がないと Explorer にアクセスできない) シェルの置き換えを実装することをお勧めします。

Windows 7 SDK の「セッション 0 分離」の問題を解決しました。チュートリアルでは、CreateProcessAsUser 関数を使用して、要求しているユーザーのデスクトップにプロセスを作成する必要があると述べています。提供されたソリューションを試してみましたが、プロセスをインタラクティブに表示するには、CreateProcessAsUser 呼び出しで指定されたユーザーとしてログインする必要があります。

于 2013-09-30T13:54:33.480 に答える
0

agent applicationユーザーのログイン時に自動的に開始される を作成する必要があります。Startupフォルダーの下のフォルダーにアプリケーションの exe ファイルへのショートカットをドロップするだけAll Usersで十分です。

このアプリケーションは Windows サービスに接続し、コマンドを待機する必要があります。

Names Pipesとを介して 2 つのプロセスを通信させることができます.NET Remoting

合計 N + 1 の実行中のプロセスを持つ 2 つのアプリケーションが作成されます。対話型セッションごとに 1 つのメイン サービスと 1 つのエージェント。

于 2013-09-10T09:41:17.373 に答える