4

Windows サービスは Windows と直接通信できないため、Windows サービスと GUI プログラムを含むプログラムを作成しています。

これは、生徒が複数のワークステーションで 1 つのアカウントでログインするのを阻止するサーバー デーモンと相互作用するプログラムです。(パスワードの共有を防ぐため)

GUI プロセスは、Windows の自動起動を使用して起動され、ユーザーのアクセス許可で実行されます。そのため、ユーザーは簡単に GUI プロセスを強制終了できます。GUI プロセスがログオフ (およびユーザー メッセージ) を引き起こしているため、これは好ましくありません。

ユーザーがプロセスを強制終了しないようにするにはどうすればよいですか?

4

8 に答える 8

9

これを防ぐためにOSセキュリティを使用するオプションがないため、技術的な答えはそれを行うことができないということです。それは回避策または代替アプローチのみを残します。

公式にサポートされていない、文書化されていない機能に依存している回避策の1つは、次のとおりです。

public static class Unkillable
{
    [DllImport("ntdll.dll", SetLastError = true)]
    private static extern void RtlSetProcessIsCritical(UInt32 v1, UInt32 v2, UInt32 v3);

    public static void MakeProcessUnkillable()
    {
        Process.EnterDebugMode();
        RtlSetProcessIsCritical(1, 0, 0);
    }

    public static void MakeProcessKillable()
    {
        RtlSetProcessIsCritical(0, 0, 0);
    }
}

を呼び出した後Unkillable.MakeProcessUnkillable、プロセスを強制終了すると、すぐにBSODが発生します。これは本当に醜い解決策ですが、「2分で実装できる」と主張するのは難しいです。

もう1つの回避策は、1人が死亡するたびに相互に再起動することで連携するプロセスのグループを作成することです。

于 2012-06-19T11:13:04.563 に答える
3

GUI プロセスは、Windows の自動起動を使用して起動され、ユーザーのアクセス許可で実行されます。そのため、ユーザーは簡単に GUI プロセスを強制終了できます。

これはどうでしょうか。GUI プロセスを実行してメッセージを表示しますが、サービスを使用して実際にログオフします。次に、ソフトウェアの主要な機能に影響を与えることなく、GUI プロセスを好きなだけ強制終了できます。

于 2012-06-19T11:19:25.743 に答える
1

おそらく、ネットワークをより適切に構成する必要があります。ドメインが適切にセットアップされている場合は、ドメイン コントローラーをチェックしてユーザーが既にログオンしているかどうかを確認するログオン スクリプトをセットアップし、別の場所でログオンしている場合はログオフすることができます。

各 PC が適切なアカウント設定でセットアップされていると仮定します (つまり、管理者としてではありません)。

ログオン スクリプトは、ネットワーク共有の設定など、他のことも実行できます。

于 2012-06-19T11:24:18.460 に答える
0

タスクマネージャーからプロセスを隠すルートキットスタイルの方法を調べることができます。これは特に洗練されたソリューションではありません。

于 2012-06-19T11:13:08.197 に答える
0

最後に、別の RunAs プログラムであるCPAUを使用して、ログオン時に管理者としてプロセスを開始しました。これを行うことで、学生は少なくともタスクマネージャーなどを使用して簡単に殺すことはできません。

後でジョンが提案した方法も実装するかもしれません。このように、学生が何らかの方法でプロセスを強制終了したとしても、成功することはありません。

于 2012-06-22T10:35:44.597 に答える
0

このコードを使用すると、プロセスを強制終了しにくくすることができます(単純な C です。申し訳ありませんが、C# への移植はそれほど難しくありません)。

技術的には、ユーザーはアクセス許可を変更できるため、プロセスを強制終了することはできませんが、そのためにはコードを記述するか、特別に設計されたツールを使用する必要があります。ユーザーが管理者権限を持っていない限り、タスク マネージャーも pskill も機能しません。

サービスがバックアップ/復元権限を使用してプロセスの所有権を取得することで、管理者以外のユーザーがアクセス許可を元に戻すのを防ぐことができる場合があります。

于 2012-06-19T21:07:57.467 に答える
-2

ユーザーがアプリケーションを強制終了することを禁止しないでください。GUIのシャウトダウン後にサービスが失敗した場合は、GUIではなくサービスを修正する必要があります。

しかし、本当にアプリケーションを停止したい場合は、こちらをよく見てください

于 2012-06-19T11:12:08.323 に答える