- PR -

Windows Vistaにおけるセッション0分離対応

1
投稿者投稿内容
moto
会議室デビュー日: 2007/03/27
投稿数: 1
投稿日時: 2007-03-28 00:04
お世話になっております。

Windows2000 SP4
VC++6.0 SP6+PlatForm SDK Feb 2003
にて開発しております。

■現象
クライアントに常駐するサービスからユーザアプリケーションを実行して、
そのアプリケーション内で通知ウィンウを表示させているのですが、
Vistaで検証したところログオンユーザのデスクトップにウィンドウが出力されません。

■やりたいこと
Vistaにおいても、サービスからキックしたプロセス内で表示させているウィンドウを、
ログオンユーザのデスクトップ上に表示させたいです。

■質問
Vistaのセッション0の分離による影響だということが判明し、
LogonUser関数とCreateProcessAsUser関数を用いて、
サービスからプロセスを立ち上げればいいというところまではわかりました。

しかし、LogonUser関数に渡すパスワードを特定のログオンユーザに依存することなく
指定したいのですが、現在ログオンしているユーザのパスワードを取得することは
できないのではないかと邪推しております。

LogonUser+CreateProcessAsUser以外の方法で、目的を満たす方法はありますでしょうか?
間違った解釈をしていましたら、ご指摘お願い致します。

//////////ソース
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
StartupInfo.cb = sizeof(STARTUPINFO);
HANDLE hToken = 0;
char userName[256+1];
DWORD userSize = sizeof(userName);

GetUserName(userName, &userSize);

LogonUser(userName, NULL, NULL, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken);
→第3引数(パスワード)に何を設定すればよいか・・・?

CreateProcessAsUser(hToken, NULL, commandLine, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, currentPath, &StartupInfo, &ProcessInfo);
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-03-28 08:00
Windows Vista デベロッパ ストーリー: アプリケーション互換性解説書

上記の「Windows Vista に対応した解決策の活用: 」を参照。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-05 20:57
ずっと気になっていたんだけど、今日やっと目的の文書を見つけたので。

引用:

甕星さんの書き込み (2007-03-28 08:00) より:
上記の「Windows Vista に対応した解決策の活用: 」を参照。


いやいや、甕星さん。ちゃんとそれを読んで、
引用:

しかし、LogonUser関数に渡すパスワードを特定のログオンユーザに依存することなく
指定したいのですが、現在ログオンしているユーザのパスワードを取得することは
できないのではないかと邪推しております。


じゃないでしょうか?そこにも、現在ログオン中のアカウントのトークンを、パスワードを入力することなく取得する方法は書かれていませんから。


 で、私も「logging on account token」を中心に検索したのですが、見つかりませんでした。ところが、ひょんなことから、見つけました。
Displaying a UI That Works with Fast User Switching<microsoft.com>
Displaying a UI in Operating Systems Prior to Windows Vista<microsoft.com>

 これらはプリント スプーラ サービスから、ポート モニタで表示する UI を表示するための方法です。お望みのことにぴったりでしょ?
_________________
1

スキルアップ/キャリアアップ(JOB@IT)