10

DelphiアプリケーションがWindowsタスクマネージャー(またはProcess Explorerなど)によって強制終了されないように保護する方法はありますか?

Windowsメッセージはそれを行うことができると思います(フックを実行し、TerminateProcessメッセージをインターセプトすることによって)。

この保護の例が欲しいです。KasperskyAnti-Virusスイートは次のようなものです。タスクマネージャーでプロセスを終了することはできません。

4

6 に答える 6

14

Kornelが言うように、ユーザーによって分離されたプロセスのOSレベルの保護があります。しかし、一般的に言って、許可を得たユーザーがプロセスを終了するのを止める方法はありません。また、ユーザーには、そのユーザーとして実行されているプロセスを終了する権限があります。

SYSTEMとして実行したい場合でも、このプロセスを使用してログオンしているユーザーと対話することはできません。サービスとして実行する必要があり、GUIはありません。Explorer.exeのようなプロセスにDLLをロードするなど、他のアプローチを試すこともできます。ユーザーは、ユーザーが終了したくないために終了しませんが、それは単に悪用です。

開発者が終了できないアプリケーションを作成できれば、エンドユーザーにとっては非常に悪い状況になります。これが内部アプリケーションである場合は、サーバーの障害をチェックして、グループポリシーでそれを達成する方法があるかどうかを確認できます。

于 2009-12-31T02:45:05.480 に答える
11

KasperskyのようなAVプログラムは、おそらくドライバーを使用し、フックを使用して終了を防ぎます。あなたの状況では、プロセスにACLを設定することをお勧めします。これにより、タスクマネージャーまたはコマンドラインツールでの終了が防止されます(ユーザーがデバッグ権限を持っていない場合)。もちろん、ユーザーはいつでもProcess Explorerなどのツールを使用して、プロセスの所有権を取得し、新しいACLを設定して終了することができます。

ユーザーが管理者でない場合は、別のユーザーコンテキストでプロセスを実行するだけで十分です(たとえば、サービスからプロセスを起動します)。

このサンプルが示すように、プロセスACLの設定はJediWindowsセキュリティライブラリを使用すると非常に簡単です。

于 2009-12-31T08:05:45.357 に答える
5

これは非常に悪い考えです。あなたのプログラムが他の誰かのコンピュータで実行されている場合、それはあなたの所有物ではなく彼らの所有物にあり、彼らの家でゲストとして振る舞う必要があります。つまり、自分がその場所を所有しているように振る舞うことはなく、コンピューターの所有者に、実行したくないタスクを強制終了するなど、自分の所有物でできないことを伝えないことも確かです。そうすると、プログラムはマルウェアに勝るものはなく、マルウェアのように扱われる可能性があります。

于 2009-12-31T15:52:21.890 に答える
3

あなたは間違った質問をしていると思います。

「サーバーとのチャットの途中で接続が終了した場合」の問題を間違った方法で解決しようとしています。答えは「プロセスの終了を拒否する」ではなく、「接続の問題を予測し、エラーフォールバックコードを書く」ことです。

なんで?明らかに、接続の終了は、クライアントの終了ではなく、ネットワークの問題(ユーザーがネットワークからマシンのプラグを抜くことを拒否することはできません)が原因である可能性があります。

なぜTerminateProcessをトラップできないのですか?

また、アプリケーションのクラッシュが心配な場合は、Application Reset&RecoveryAPIを使用してください。

于 2010-06-20T08:44:16.193 に答える
0

最も簡単な方法:2つのプロセスを開始して、それらを互いに「見せる」ことができます。
それらの1つが閉じられた場合は、他のプロセスに再起動させます。それは(あなたが言ったように)初心者がそのプロセスを殺すことを防ぎます。

申し訳ありませんが、あなたの「サーバー/クライアントアプリケーション」にはトロイの木馬/バックドア機能があると思います。「クライアントアプリはいくつかの有用なデータを送信します」、「殺せないプロセス」(あなたのコメントで)は私にはあまりにも疑わしいようです。

于 2013-06-24T10:53:14.070 に答える
-1

NTサービスプロジェクトを作成します。サービスプロセスはProcessManagerで強制終了できませんが、内部サービスマネージャーによって制御されます。

于 2009-12-31T13:35:31.103 に答える