通常のユーザーとして実行されているアプリケーションと、ローカルシステムとして実行されているサービスがあります。私は、サービスが他の何かをやった後、アプリケーションがアプリケーションを再び起動するようにアプリケーションに指示することができるようにしたい。 (したがって、サービスは「もの」を実行している間、アプリケーションは実行されません。)サービスが最初に起動したユーザーとしてアプリケーションを起動できるようにするには、ユーザートークンが必要です。アプリケーションはサービスを終了する前にトークンを送信しますが、トークン/ハンドルはサービスがトークンを使用しようとすると無効です。CreateProcessAsUserの有効なユーザートークンを取得するにはどうすればよいですか?
ユーザートークンは、常にOpenProcessTokenを呼び出したプロセスでのみ有効ですか?
これには他にもいくつかの方法がありますか?私はlogonuserでアプリケーションに "ログオン"する必要はありません。それはちょうど愚かであろう。私は、サービスからユーザートークンを取得するために使用できるサービスに、アプリケーションから "explorer.exe"のプロセスハンドルを渡すことができたと思いますが、これはPROCESS DUP HANDLEアクセス権が必要です。私はその解決策について興奮しているわけではありませんが、おそらくそれを行う方法ですか?
ありがとう、私は最初の記事で、ZwCreateTokenでトークンを作成しています。メッセージに必要なものをすべて詰め込むのはちょっと面倒ですが、明らかに他の人のために働いています。 –
最初の記事にはいくつかのエラーがあるようですが、2番目の記事はかなり良いです。しかし、ZwCreateToken(文書化されていない、サポートされていない、まったく安定したメソッドではない)を使用する理由がわかりません。 –
申し訳ありませんが、私は2番目の意味です。最初のものを見つけることさえできませんでした。私はhttp://www.apnilife.com/E-Books_apnilife/Windows%20Programming_apnilife/Windows%20NT%20Undocumented%20APIs/1996%20Ch08_apnilife.pdfのようなことをしています。 CreateTokenを参照していますか? –