2016-03-21 15 views
-2

私はサービスを処理し、プロセスを処理します。このプロセスを子プロセスとして再起動することは可能ですか?はいの場合はどうすればいいですか?サービスを子プロセスとしてプロセスを開始します

このサービスとプロセスはどちらも他のアプリケーションによって作成されていますが、ここではそれらを扱っています。

サービスのハンドルを取得:

schService = OpenService(schSCManager, ServiceName, SERVICE_CHANGE_CONFIG); 

プロセスへのハンドルを取得する:

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); 

私はschserviceの子としてhprocessを停止して開始します。

+0

あなたが試したことを見せてください – lmiguelmh

+0

Windowsには、* nixで見つかる親子プロセスという概念はありません。親は 'CreateProcess'を呼び出したプロセスに過ぎず、親プロセスは非常にうまく終了して、親프로세스がなくても処理を続けることができます。 2つのプロセスに対するハンドルがある場合、プロセスはすでに存在しています。あなたの実際の問題は何ですか?なぜ聞くのですか? –

+0

'OpenService()'は実行中のサービスプロセスへのハンドルを返しません。 –

答えて

0

このプロセスをサービスする子プロセスとして再起動することはできますか?

まったくありません。 CreateProcess()またはCreateProcessAsUser()を使用して、同じコマンドラインの新しいコピーを起動するために、最初に起動したコマンドラインのプロセスにクエリを実行し、実行中のサービスプロセスにコードを注入する必要があります。もちろん、インジェクタが動作しているよりも高いインテグリティ/セキュリティレベルでサービスが実行されている場合は、コードをインジェクタに注入することはできません。

schserviceの子としてhprocessを停止して開始します。

なぜですか?それには本当のメリットはありません。 OSがすでに実行していたよりも高いレベルのインテグリティ/セキュリティレベルでプロセスを動作させるために、OSのセキュリティを迂回しようとしている場合を除き、OSが許可していれば非常に危険なセキュリティ違反になります。

関連する問題