3

サービスから Windows 7 のログオン画面でアプリケーションを実行したいと考えています。

私はこれについて長い間調査を行っており、すでにさまざまな方法を試していますが、残念ながらこれまでのところ完全に成功していません. 現在ログオンしているユーザーのロック画面でアプリケーションを実行することができました。しかし、その後、ユーザーごとに異なるログオン画面と一般的な (ユーザーに依存しない) ログオン画面があることに気付きました。

私の推測では、このユーザーに依存しないログオン画面 (複数のアカウントが利用可能な場合、またはロック画面で「ユーザーの切り替え」をクリックしたときに起動した直後に表示される) はセッション 0 で実行され、ユーザー 1 はセッション 1 で実行され、ユーザー 2 はセッションで実行されます。 2など。問題は、セッション 0 (「winsta0\winlogon」を使用) でアプリケーションを実行すると、アプリケーションが表示されないことです。セッション 1 での実行は問題なく動作しますが、そのためにはユーザーがすでにログインしている必要があるため、あまり役に立ちません。

では、ユーザーに依存しないログオン/ウェルカム画面でアプリケーションを実行するにはどうすればよいでしょうか? この目的のための正しいパラメータと関数は何ですか? 誰かがデモンストレーションのための実例を持っていますか? (Delphi が推奨されますが、実際には他の言語でも同様です!)

4

1 に答える 1

1

これを行うためにサポートされている唯一の方法は、RRUZ のコメントによると、資格情報プロバイダーを実装することです。

ルールを破ってもかまわない場合は、ローカル システムとして実行されているサービスが、選択したセッションでサブプロセスを起動できる必要があります。を使用OpenProcessTokenしてセキュリティ トークンのハンドルを取得し、それを で複製しDuplicateTokenEx、 を使用SetTokenInformationしてトークン セッション識別子を変更し、 を呼び出しCreateProcessAsUserてサブプロセスを起動します。(最初は、別の実行可能ファイルを使用するのが最も簡単ですが、バグを解決したら、たとえばコマンドライン引数または環境変数を使用して区別することにより、サービスとサブプロセスを単一の実行可能ファイルにロールバックできます。 2つの場合。)

このWTSGetActiveConsoleSessionId関数は、現在どのセッションが物理コンソールに接続されているかを示します。

于 2012-05-28T02:48:52.747 に答える