Re: API


[コメントツリー表示を見る] [発言時刻順表示を見る]

Posted by Uz on 2001/06/28 00:21:53

In Reply to: API"LogonUser"で異常終了してしまう! Posted by ITO on 2001/06/27 15:31:54


    > 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;
    }


    どうでしょう?
    うまくいきませんか?


記事スレッド一覧