2012-02-15 3 views
4

UACポップアップが表示されずにスレッドまたはプロセスの実行権限を昇格させる方法を探しています。 プロセスを実行するユーザーは管理者ユーザーであり、ユーザー名とパスワードを入手できます。Win32:ユーザー/パスワードを使用してUACをバイパスする

サービスを再起動したり、システムディレクトリにファイルを書き込んだりするなどの管理作業を行うためには、これを行う必要があります。私のアプリケーションは遠隔で実行され、UACダイアログを確認するための対話ユーザーはいません。 UACを無効にすることは選択肢ではありません。

は、私はより良い一部または2日間ジャグリングLogonUser()ImpersonateLoggedOnUser()CreateProcessAsUser()DuplicateTokenEx()試してみたが、このすべての適切な組み合わせと場合を把握できなかったことも可能です。いずれかの必要な偽装レベルが提供されていなかった」、

HANDLE token = 0; 
LogonUserA(user, NULL, pass, LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT, &token); 
HANDLE impToken = 0; 
DuplicateToken(token, SecurityImpersonation, &impToken); 
ImpersonateLoggedOnUser(impToken); 
CreateFileA("C:\\windows\\blabla.dll", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 

最後の呼び出しは= 1346 GetLastError()で失敗する、または提供偽装レベルが無効です:


は、具体的にどのような私が試したことはこれです。 "

私は間違っていますか?
注 - これはWin2008 R2で実行されています

+3

これはヒントを与えるかもしれません。 http://stackoverflow.com/questions/5098121/how-can-i-get-elevated-permissions-uac-via-impersonation-under-a-non-interacti –

+0

私はこれをインラインで行うことはできないと思います。おそらく、偽装トークンを使用して別のプロセスを起動する必要があります。 – Luke

+0

@ルーク新しいプロセスを起動するのはOKですが、 'CreateProcessAsUser'を使ってもそれを行う方法を理解できませんでした。何か案は? – shoosh

答えて

1

私はあなたがUACプロンプトをバイパスするためにタスクスケジューラを使用することができると信じています。ここに一連の指示があります: http://www.vikitech.com/253/create-shortcuts-for-trusted-programs-to-bypass-windows-7-uac-check

これはいくつかの作業ですが、確かにコードで実行できます。

+0

スケジュールされたタスクを作成するには、完全な管理者特権が必要です。これは "at"コマンドで行うことができます。 UACで呼び出すと「アクセスが拒否されました」というメッセージが返されます – shoosh

2

通常、UACをバイパスする必要がある場合は、サービスを作成することをお勧めします。サービスは完全な権限で実行され、アプリケーションはアクションを実行するようにアプリケーションに要求します。

+0

サービスをインストールするには、UACを通過する必要があります。そのため、鶏肉と卵があります。 – shoosh

+0

@shooshあなたはアプリケーションの最初のインストール時にUACを避けようとしていますか?またはあなたのアプリは既にインストールされていますか? –

+1

重要な点は、* once *サービスをインストールするだけで、毎回アプリケーションのプロセスを昇格しないことです。 Serge氏によれば、UACが自明に敗北する可能性がある場合、それは無意味です。 –

4

このユーザーまたはそのユーザーにログインしようとすると、どこにも行きません。問題はユーザーではなく、管理者権限を求めるコンテキストです。管理者でもUACプロンプトを確認する必要があります。

あなたが聞いたことが可能だったのであれば、UACのコンセプトを完全に打ち破るでしょう。セッションがインタラクティブである限り(また、Win7では、プログラムはWindowsショートリスト(例えば、サービスアプレット)から来ない)、プロンプトをバイパスすることはできません。

他の人が言っていたように、通常の解決策はサービスを作成し、名前付きパイプなどの標準的なIPCメカニズムを使用して対話型アプリケーションでサービスと対話させることです。 IPCオブジェクトの作成時に必要となるセキュリティ記述子に注意してください。サービスと対話型アプリケーションでは、ユーザーコンテキストが異なります。

1

問題は、偽装レベル(SecurityImpersonation変数)の値が間違っていることです。 「マジックナンバー」