このトピックについては多くの混乱があり、ここでのケイトからの回答は正しくなく、不完全であることがわかります。
Vista以降、管理者はログインできますが、彼のプロセスは自動的に昇格して実行されません。管理者は、いわゆる「スプリットトークン」を持っています。これは、同じ管理者ユーザーに対して実行されているプロセスが存在する可能性があり、一部のプロセスは昇格して実行され、その他のプロセスは昇格して実行されないことを意味します。管理者が昇格されていないプロセスを実行すると、彼のトークンの特権の一部が削除されました。すべてのプロセスが昇格または昇格せずに実行されるXPの場合とは異なります。
www.sysinternals.comからProcessExplorerをインストールし、「IntegrityLevel」列を有効にします。「中」と表示されている場合、このプロセスは昇格して実行されません。そこに「高」が表示されている場合、プロセスは高架で実行されます。プロセスが整合性レベル「高」で実行されている場合、昇格された別のプロセスを開始するためにUACプロンプトは必要ありません。
UACが完全にオフになると、すべてのプロセスが「高」で実行されるため、昇格は必要ありません。UACは下でオフにすることができます
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System
キー" EnableLUA
"を設定します。この設定を変更するには、再起動する必要があります。
しかし、ここでまだ言及されていない別のポイントがあります。コントロールパネルでは、「プロンプトなしで昇格」を設定できます。この場合、管理者ユーザーは昇格されていない別のプロセスから昇格されたプロセスを開始でき、UACプロンプトは表示されません。
ConsentPromptBehaviorAdmin
この設定は、管理者ユーザーのキー""の同じレジストリパスに保存されます。
管理者以外のすべてのユーザーにはキー" ConsentPromptBehaviorUser
"がありますが、これは動作のみを変更しますが、高度をオフにすることはできません。非管理者は常にUACプロンプトを受け取ります。(UACが完全にオフになっていない場合)
プロセスが昇格して実行されているかどうかをどのように確認しますか:、、、、OpenProcess()
の順OpenProcessToken()
に呼び出しGetTokenInformation(TokenElevation)
ます。
そして、整合性レベルの呼び出しを取得してGetTokenInformation(TokenIntegrityLevel)
からGetSidSubAuthority()
したがって、昇格が本当に必要な場合にのみアイコンを表示する場合は、プロセスが昇格して実行されているかどうかを確認し、さらにこれらのレジストリキーを確認し、ユーザーが管理者であるかどうかを確認する必要があります。これには数行のコードが含まれ、単純にするために標高が必要な場合は常にこのアイコンを表示することを検討します。
IsUserAnAdmin()
APIは非推奨であることに注意してください。Vista以降は使用しないでください。ユーザーが管理者グループに属しているかどうかを確認することは、今でははるかに多くのコードです。