• ベストアンサー
  • 困ってます

API  LogonUser() について

  • 質問No.12855
  • 閲覧数1111
  • ありがとう数1
  • 回答数1

お礼率 79% (173/218)

お世話になります。
LogonUser()というAPI使いたいんです。でもこのAPIを使おうとすると、「ERROR:0x522 クライアントは要求された特権を保有していません。」というエラーが発生してしまいます。

この原因は下記のWebページにも書いてありますが、
http://www.microsoft.com/japan/developer/library/jpsecupf/_win32_LogonUser.htm

「LogonUser 関数を呼び出すプロセスは、SE_TCB_NAME 特権を備えていなければなりません。ただし、この特権を有効にしておく必要はありません。LogonUser 関数は、必要に応じてこの特権を有効にします。呼び出し側のプロセスがこの特権を備えていない場合、LogonUser 関数は失敗し、GetLastError 関数は ERROR_PRIVILEGE_NOT_HELD を返します。」ということらしいです。
しかし、プロセスに特権を持たせるというのがわからないんです。
具体的に何をどうすれば良いのでしょう。
これ一つで、丸二日間頭を抱えています。
誰かおわかりになりませんでしょうか・・・

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 41% (324/772)

Win NT/2000を使っている物としてお話しします。

そもそも、NT/2000は「セキュリティ」という概念が存在します。
つまり、NT/2000上で動作しているすべてのプログラムは
あるユーザの権限で動作しています。
たとえば、あなたが起動したメモ帳アプリケーションは
あなたの権限で動作しているため、他人(管理者をのぞく)は
あなたが起動したメモ帳アプリケーションに対する干渉は
できません。

要は LogonUser APIは、あるユーザ(他人)の権限でログオンし、
そのユーザの権限でプログラムを実行する為のモノです。

つまり「他人になりすます」ため誰でも実行出来て
しまうと困るわけです。「セキュリティ」という概念
と矛盾することになります。

通常あなたが実行するプログラムはあなたの権限で動作し、
他人の権限で動作させることは出来ません。

そのため「他人になりすます」ために「SE_TCB_NAME特権」が
必要になるため、事前にSE_TCB_NAME特権を取得する必要が
あります。
お礼コメント
yasu

お礼率 79% (173/218)

ありがとうございました。
概念はよくわかりました。

OpenProcessToken
LookupPrivilegeValue
AdjustTokenPrivileges

をつかって、なんとか解決することができました。
投稿日時:0000/00/00 00:00
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ