-PR-
解決
済み

API  LogonUser() について

  • 困ってます
  • 質問No.12855
  • 閲覧数791
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 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 を返します。」ということらしいです。
しかし、プロセスに特権を持たせるというのがわからないんです。
具体的に何をどうすれば良いのでしょう。
これ一つで、丸二日間頭を抱えています。
誰かおわかりになりませんでしょうか・・・
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル12

ベストアンサー率 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:00
-PR-
-PR-
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ