1

Windows のプログラムは、起動時に管理者権限が必要です。ユーザーの許可を得る必要があります。また、EXE を右クリックして [管理者として実行] を選択することにより、管理者権限で実行することもできます。ただし、EXE が開始する前に、メッセージ ボックスが表示されます。それは本当に嫌です。

ここで、アプリケーションを管理者として実行したいのですが、ユーザーが EXE ファイルをクリックしたときにポップアップ メッセージ ボックスが表示されないようにします。

今、AdjustTokenPrivileges 関数がこれを達成するのに役立つかどうか疑問に思っています。

誰でも私を助けることができますか?

4

2 に答える 2

9

権利と特権の間で混乱しています。少なくとも Windows API の観点からは、この 2 つはまったく異なります (ただし、少なくとも「Windows でできること」を扱う場合は、多くの場合同義語として扱われます)。

あなたが本当に求めているのは、権利を昇格させる能力です。システムのセキュリティ モデルに何らかの欠陥がなければ、これを行うことはできません。管理者権限を取得するには、コードを管理者アカウントで実行する必要があります。ユーザーが最初に管理者としてログインするか、実行時に資格情報を入力する必要があります。

特権 (AdjustTokenPrivileges実際に操作するもの) は、実行する権利がありますが、その特権を具体的に有効にしない限り、実行することはできません。たとえば、最初から管理者としてログインしているとします。これにより、システムクロックを調整する権利が与えられます-しかし、システムクロックを調整することは、通常のプログラムではほとんど行う理由がないため、実行する前に追加の手順が追加されました-SE_SYSTEMTIME前に特権を有効にする必要がありますその権利を行使することができます。

システム時刻を変更する権限のないアカウントでログインしている場合、それを行うことはできません。変更できるアカウントにログインしている場合は、まず権限を有効にする必要があります。

結論:AdjustTokenPrivilegesあなたがやろうとしていることは達成されません。

于 2012-08-18T14:43:16.327 に答える
0

LogonUser実際には、 API 関数を呼び出してスレッドのセキュリティ資格情報を変更できる方法があります。ImpersonateLoggedOnUserおよびCreateProcessAsUser呼び出しで使用できるトークンへのハンドルを返します。この手法は非個人化と呼ばれます。

ただし、別のことを達成しようとしていると思います-UACユーザー通知なしで昇格された管理者権限でプロセスを実行します。msconfig ユーティリティで UAC を完全に無効にすることもできますが、これはかなり悪い解決策ですが、プログラムをそのままにしておくこともできます。通知は彼の決定であるべきです。

于 2012-08-19T14:55:15.360 に答える