管理者権限のプロセスから、標準モードのプロセスを起動する方法 – プログラミング – Home

管理者権限のプロセスから、標準モードの...
 
通知
すべてクリア

[解決済] 管理者権限のプロセスから、標準モードのプロセスを起動する方法


たけし
 たけし
(@たけし)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

Windows7, VisualStudio 2010 Pro, C++

お世話になります。

自分のプログラムが管理者権限で実行されている場合に、
プログラム中で「ShellExecuteEx」を使用して他のアプリを起動すると、
そのアプリも管理者権限モードで実行されます。

これを標準モードで実行する方法というのはあるのでしょうか?

「CreateProcess」の場合には、「CreateProcessWithTokenW」というAPIを
使用することによって何とか実現できたのですが、「ShellExecuteEx」の場合に
どうすればいいのか分かりません。

もし、ご存じの方がいましたらアドバイスをお願い致します。


引用未解決
トピックタグ
ぺろ
 ぺろ
(@ぺろ)
ゲスト
結合: 20年前
投稿: 6
 

何故ShellExecuteExでないとダメなのが分かりませんけど

こういうのじゃダメですか?
http://eternalwindows.jp/security/securitycontext/securitycontext09.html

CreateProcessWithLogonが使いやすかったです。


返信引用
たけし
 たけし
(@たけし)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

アドバイスありがとうございます。

> 何故ShellExecuteExでないとダメなのが分かりませんけど

例えば、「test.txt」のようなファイルを指定して、
関連付けされているテキストエディタを起動して、そのファイルをロードする。

このような場合に「ShellExecuteEx」を使用しているのですが、
同じことを「CreateProcess」でも実現できるのでしょうか?
もし、できるなら「CreateProcess」にまとめたいと思います。

あと、教えて頂いたURLの一番下のサンプルですが、

> 現在のプロセスが管理者として動作しているとき、 CreateRestrictedToken
> で作成した制限付きトークンを指定することで、制限されたプロセスを作成
> できます。

ここで言う制限されたプロセスというのは、私の質問にある標準モードで起動する
プロセスとは、また別の意味なのでしょうか?

私が「CreateProcessWithTokenW」で、標準モードのプロセスを起動させるために
使用したコードは以下のURLで紹介されていた「LaunchAsNormalUser」という関数です。

http://code.google.com/p/vistaexec/source/browse/trunk/VistaExec/LaunchAsNormalUser.cpp?r=2

もし、「CreateRestrictedToken」で代用できるなら、こちらの方がコードがすっきり
するのですが・・・


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>例えば、「test.txt」のようなファイルを指定して、
>関連付けされているテキストエディタを起動して、そのファイルをロードする。
代替案ですが関連付けを調べて目的のアプリを起動する方法もあるかと思います。
関連付けの取得はこちらが参考になるかもしれません。
http://dobon.net/vb/dotnet/system/findassociatedexe.html

または、ShellExecuteExを呼び出すだけのアプリケーションを別に作成しておき、
それをLaunchAsNormalUserで起動することでもとりあえず目的のことはできそうです。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

「ShellExecuteEx」はWINDOWSのメニューで言えば
 「ファイル名を指定して実行」
 ですね。

「CreateProcess」関連は、WINDOWSのメニューで言えば
  「タクスマネージャ」の「プロセス」としての実行
 ですね。
 よって、「Ex」で何処まで拡張されているかは分からないのですが、
  ShellExecuteExでは
 >これを標準モードで実行する方法というのはあるのでしょうか?
これは無理だと思います。


返信引用
たけし
 たけし
(@たけし)
ゲスト
結合: 22年前
投稿: 27
Topic starter  

みなさん、アドバイスありがとうございました。

subaruさん、

> または、ShellExecuteExを呼び出すだけのアプリケーションを別に作成しておき、
> それをLaunchAsNormalUserで起動することでもとりあえず目的のことはできそうです。

実は私も同じことを考えて昨日試してみたのですが、うまくいきました。
とりあえずこの方法でいこうと思います。

いろいろとありがとうございました。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

試してないですがここで説明されている偽装を行えば、
ShellExecuteExの呼び出しのみでも動作するのかもしれません。
http://eternalwindows.jp/security/securitycontext/securitycontext06.html


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました