2009-05-20 1 views
6

管理者以外のユーザーとしてログインしたときにAddIPAddressを使用してNICに一時IPアドレスを追加しようとしています。 AddIPAddressのMSDNドキュメントでは、管理者以外のユーザーが関数を呼び出すと、エラーとしてERROR_INVALID_HANDLEが返されます。管理者を偽装するときにAddIPAddressを使用する際の問題

私は、LogonUser()とImpersonateLoggedOnUser()へのAPI呼び出しでAddIPAddressへの呼び出しを先行しています。今私のアプリケーションは、Adminとしてログインしていると思っていますが、AddIPAddressはERROR_INVALID_HANDLEで失敗します。

MSDNも..

は、「グループポリシー、エンタープライズポリシー、およびネットワーク上の他の制限が正常に完了することから、これらの機能を妨げる可能性がありますことを述べている。アプリケーションはこれらを使用する前に必要なネットワークアクセス権を持っていることを確認してください機能。"

偽装を使用してAddIPAddressを呼び出すことはできますか?もしそうなら、どのように?私は上記のパーミッションを変更する必要があると推測していますが、私はこの領域で何を変更するのかについては迷っています。

助けていただけたら幸いです!

Additonal:プロセスを起動するために偽装された管理者へのハンドルを使用してCreateProcessAsUserを使用してnetsh(通常のユーザーとして再度ログイン)を呼び出そうとしている間も空白を描画しました。不十分な特権を示すエラーを常に返します。

+0

実際、成功することなくそれを稼働させようとしました。 LogonUser/ImpersonateLoggedOnUserもCoInitializeSecurityも役に立ちませんでした。 GpEdit.mscに掘り起こすようなものが必要です。 – Andrey

+0

あなたはこれを調べる時間を割いたことを感謝します。私はそれが達成するのがとても難しいはずだとはまだ信じられません! –

+0

関連する設定は、GpEdit.msc、User configuration、Network、Network connectionsのように見えます。 (私はドイツ語版のWindows版をここから翻訳しているので、名前は多少異なるかもしれません。)実際に管理者として実行するとコードは機能しますか? –

答えて

1

Windows Vistaを使用している場合は、権限を昇格する必要があります。

Vistaでは、デフォルトでUACが有効になっています。これにより、明示的に昇格しない限り、管理者としても限定的なユーザートークンを使用するようになります。これを行うと、要求を許可または拒否するダイアログがユーザに表示されます。

詳細については、Windows Vista Application Development Requirements for User Account Control Compatibilityを参照してください。

CheckTokenMembershipを使用して、管理者としてログオンした後に正しく昇格したことを確認してください。私はあなたが限られたユーザートークンを取得していると思われ、したがって特権リソースの要求に失敗しています。

幸運のベスト。

+0

ありがとう、私はチャンスを得るときこれを調べます。私はユーザーに強制的に管理者としてアプリケーションを実行させることで問題を回避しています。私が本当に望んでいたものではなく、今のところできます。 アプリケーションはすべての種類のウィンドウで実行する必要があります。 –

関連する問題