Windows 2000では LogonUser APIが通常実行できない
Enabling and Disabling Privileges in C++ (Windows)
// Set the SeTcbPrivilege of the current process BOOL SetSeTcbPrivilege() { TOKEN_PRIVILEGES tp; LUID luid; HANDLE hProcessToken; if ( !OpenProcessToken(GetCurrentProcess(), if ( !LookupPrivilegeValue( tp.PrivilegeCount = 1; // Enable the privilege CloseHandle(hProcessToken); if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) return TRUE; |
Windows 2000 で LogonUser 関数を実行すると 0xc0000022 STATUS_ACCESS_DENIED
が返ってくるのでMSDNを調べてみた所、XPでは問題ないが 2000には SE_TCB_NAME 権限を付加しないと実行できないと書かれていた
Microsoft オペレーティング システムでユーザー資格情報の認証を行う方法
ところが、強制的に権限を付加しようとするとERROR_NOT_ALL_ASSIGNED、権限が与えられていないという旨のエラーが出て権限を付加することもできないのだ。
これを解決する方法が オペレーティングシステムの一部として機能する をユーザーグループに付加する方法なのだが
設定しても有効にならない…なんでや!
と思ったら、一回ログインしなおさないといけないらしい。
試してみた所、これで正常に動作するようになった
ログオンし直さないと効かないのはハマりどころですよね。ところでLogonUserにSE_TCB_NAMEが必要なのはXP以降もそれ以降も変わっていないですよ。