> API"LogonUser"で偽装し他アプリケーションを起動させているのですが、 難しいことしてますね。僕に答えが出せるか不安だ・・・。
> パスワードが設定されているユーザーは正常に起動できるのですが とのことですので、権限等の問題はクリアされていると判断して 話を進めます。
> パスワードの設定がないユーザーですと以下のメッセージボックス > ゛ダイナミックリンクライブラリ C:\WINNT\system32\user32.dll > の初期化に失敗しました。プロセスは異常終了します。" > が表示され"LogonUser"が異常終了してしまいます。 ん〜ん。
>(パスワード文字列にはNULL('\0')をセット) NULLではなく、空文字を指定したらどうでしょうか?
> WinNt4.0 VC++5.0 NT4のSPはちゃんと当てていますでしょうか?
うちにはこの環境がないので試せませんが、 Win2000pro SP2 VC6 SP4 のマシンで、 テスト用アカウントを Test999をUserグループで作成し、 ”オペレーティングシステムの一部として機能”の権限を 与えて、 Test888(パスワード無し)をグループ指定なしで作成し、 以下のコードをTest999で実行したところ、 LogonUserは成功しています。
#define USERNAME "Test888" #define PASSWORD ""
INT Test() { LPTSTR lpszUsername; LPTSTR lpszDomain; LPTSTR lpszPassword; DWORD dwLogonType; DWORD dwLogonProvider; HANDLE hToken;
lpszUsername = USERNAME; lpszDomain = "."; lpszPassword = PASSWORD; dwLogonType = LOGON32_LOGON_INTERACTIVE; dwLogonProvider = LOGON32_PROVIDER_DEFAULT; if (!LogonUser(lpszUsername, lpszDomain, lpszPassword, dwLogonType, dwLogonProvider, &hToken)){ return 1; }
if (!ImpersonateLoggedOnUser(hToken)){ CloseHandle(hToken); return 1; }
if (!RevertToSelf()){ CloseHandle(hToken); return 1; }
MessageBox(NULL, "正常終了しました。", "OK", MB_OK); CloseHandle(hToken);
return 0; }
どうでしょう? うまくいきませんか?
|