2010年1月22日

WindowsのサービスからGUIを持つプロセスを起動

Windows Vista/7ではセッション0の分離が行われたため、単純にサービスからGUIプロセスを起動できなくなりました。そこで
  1. Win32APIのWtsGetActiveConsoleSessionID関数で現在ログオンしているユーザのセッショントークンを取得。
  2. サービス(SYSTEMアカウント上で動作している)のプロセスのユーザトークンを取得。
  3. ユーザトークンを複製。
  4. ログオンユーザのセッションを複製したトークンに設定。
  5. 複製したトークンを使用してWin32APIのCreateProcessAsUser(ja)関数でプロセスを起動。
という手順を踏み、サービスからGUIを持つプロセスを起動する方法を説明した記事。興味深い。とりあえずメモ。

From Zero To One » Blog Archive » How to start a GUI process from service, under Windows Vista/7

0 件のコメント: