VisuialStudi2003 VC7でダイアログベースアプリケーションを作成しました。
動作環境はWindowsXP SP1,SP2です。
このアプリケーションから、サービスプログラムを強制終了させたいのですが
プロセスのハンドルを得るための OpenProcess()が ErrorCode=5:Access is deniedと
なります。
アプリケーションからサービスプロセスの操作をしようとしてエラーになっているよう
ですが、これを回避するすることは可能でしょうか?
タスクマネージャの「プロセスの終了」を行いたいのです。
【何故強制終了させるのか?】
現在使用している1つのサービスに不具合があるようで、サービスは停止しても
プロセスが残る場合があり、この時強制終了を行うためです。
宜しくお願いいたします。
デバッガでアタッチして終了すれば巻き込んで終了できると聞いたことがある。
が、svchost等は複数のサービスを一つのプロセスで提供しているのでこのような
方法を取ると何を巻き込むか分かったものではない。
そもそも一つのプロセスで複数のサービスが動作するため、サービスを終了しても
プロセスが残る事自体は正常。
無理やり終了しても他への被害が比較的少ないのは単体のプロセスで動作す
るプロセスの場合のみ。
…それさえサービスである以上影響が無いとは言えませんが。
まあ基本的には「セキュリティ的にできてはならない」のだろうな。
ユーザプログラムから自在に任意のサービスを殺せるのであれば
ウィルスソフトがファイアウォールを殺せることになる。
> 現在使用している1つのサービスに不具合があるようで、
自作ならデバッグ汁。よそ様作ならしてもらえ。これで万事解決。
>サービスプログラムを強制終了させたいのですが
強制終了はやめたほうがいいです。
「サービスプログラム」で直接デバイスドライバー等を利用して
PCのハードを制御している場合があります。
ハードを制御してなくてもOSのシステムに関与している場合もあります。
「強制終了」でなく「サービスプログラム」を作成した方に新たに終了するための
関数等を作ってもらうのがいいと思います。