サービスから実行できない BlockInput() 関数や NVIDIA の NVAPI 関数など、デスクトップ関連のリソースにアクセスできるように、ヘルパー インタラクティブ プロセスを管理者として作成するシステム サービスがあります。ログオンしたユーザーが管理者のメンバーである場合、次のことが機能しました。
- SE_TCB_NAME を含む特権レベルの設定
- WTSGetActiveConsoleSessionId() でアクティブなセッション ID を取得する
- WTSQueryUserToken() を使用して、セッション ID からログオン ユーザーを取得します。
- TokenLinkedToken を使用した GetTokenInformation()
- SecurityImpersonation を使用した DuplicateTokenEx()
- CreateProcessAsUser() でプロセスを起動
ただし、現在ログオンしているセッションを管理者ではなく標準ユーザーにすると、おそらく標準ユーザーに管理者レベルのトークンがリンクされていないため、ステップ 4. が失敗します。ここでの解決策は何ですか?管理者ユーザーの 1 人のトークンを取得する必要があると思いますが、どうすればよいですか? また、そのユーザーがログオンしていない場合でも、現在のデスクトップと対話する機能にアクセスできますか?