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で実行されています
これはヒントを与えるかもしれません。 http://stackoverflow.com/questions/5098121/how-can-i-get-elevated-permissions-uac-via-impersonation-under-a-non-interacti –
私はこれをインラインで行うことはできないと思います。おそらく、偽装トークンを使用して別のプロセスを起動する必要があります。 – Luke
@ルーク新しいプロセスを起動するのはOKですが、 'CreateProcessAsUser'を使ってもそれを行う方法を理解できませんでした。何か案は? – shoosh