- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:API LogonUser() について)
LogonUser() APIについて
このQ&Aのポイント
- LogonUser() APIを使用する際に発生する「ERROR:0x522 クライアントは要求された特権を保有していません。」というエラーの原因と対処方法について
- LogonUser()というAPIを使用すると、特権のエラーが発生することがあります。このエラーの原因として、呼び出し側のプロセスが必要な特権を持っていないことが挙げられます。特権の持たせ方や解決方法について説明します。
- LogonUser() APIの利用時に発生する「ERROR:0x522 クライアントは要求された特権を保有していません。」というエラーについて、原因と解決方法を紹介します。呼び出し側のプロセスに特権を持たせることでエラーを回避することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Win NT/2000を使っている物としてお話しします。 そもそも、NT/2000は「セキュリティ」という概念が存在します。 つまり、NT/2000上で動作しているすべてのプログラムは あるユーザの権限で動作しています。 たとえば、あなたが起動したメモ帳アプリケーションは あなたの権限で動作しているため、他人(管理者をのぞく)は あなたが起動したメモ帳アプリケーションに対する干渉は できません。 要は LogonUser APIは、あるユーザ(他人)の権限でログオンし、 そのユーザの権限でプログラムを実行する為のモノです。 つまり「他人になりすます」ため誰でも実行出来て しまうと困るわけです。「セキュリティ」という概念 と矛盾することになります。 通常あなたが実行するプログラムはあなたの権限で動作し、 他人の権限で動作させることは出来ません。 そのため「他人になりすます」ために「SE_TCB_NAME特権」が 必要になるため、事前にSE_TCB_NAME特権を取得する必要が あります。
お礼
ありがとうございました。 概念はよくわかりました。 OpenProcessToken LookupPrivilegeValue AdjustTokenPrivileges をつかって、なんとか解決することができました。