1

C#でスレッド(特にスレッドから作成されたスレッド)の特定の権限を制御することは可能ですか?

新しいスレッドが作成され、特定のユーザーが指定したコードを実行する C# アプリを開発しています。

ユーザーコードが実行できる操作と実行できない操作を制御するにはどうすればよいですか? これは可能ですか?

特に、使用コードから特定の API へのアクセスを制限したいと考えています。

具体的な例の 1 つは、ユーザー コードから新しいスレッドを生成する機能を無効にしたい場合です。

*これは、例外自体を処理しない新しいスレッドがユーザー コードによって生成されアプリケーション全体がクラッシュする可能性があるためです。

4

3 に答える 3

2

トレッドの作成には追加の権限が必要ないため、.Net でスレッドの作成をブロックする組み込みの方法はありません。

ユーザーのコードが別のスレッドを生成する方法も複数あります。

悪意のある外部アセンブリを実行することが目的の場合は、スレッドの作成以上のものから保護する必要があります (つまり、StackOverflowException は非常に簡単にスローされ、新しいスレッドを作成せずにプロセスをダウンさせます)。

于 2012-05-02T21:14:16.803 に答える
0

アプリケーションを「プラグイン」から隔離する1つの方法は、別のAppDomainを使用してアプリケーションをホストすることです。ただし、これは簡単ではありません。これは主に、絶縁には参照のマーシャリングが必要なためです。別のAppDomainのインスタンスを直接参照することはできません。これは、絶縁を破るため、.NETは高度なプロキシモデルをサポートします。これの欠点は、すべてのコードがこのプロキシを念頭に置いて記述されている必要があることです。プロキシされた参照オブジェクトはMarshalByRefObjectから派生し、プロキシされていないすべてのオブジェクトは、コピーによってリモート境界を越えるためにシリアル化をサポートする必要があります。これらすべてには、当然、パフォーマンスへの影響も伴います。ただし、この作業を完了すると、アプリケーション全体を停止することなく、AppDomainを「クラッシュ」させることができます。

単独での次のステップは、外部ホスティングプロセスを作成し、何らかの形式のプロセス間通信を使用して外部コードと対話することです。これにより、優れた分離が実現します(ほとんどのアンマネージコードの無作法に対する保護でさえ、AppDomain内のバグのあるアンマネージコードはアプリ全体をダウンさせる可能性があります)が、さらに複雑さとパフォーマンスのオーバーヘッドが追加されます。

于 2012-05-02T22:33:11.007 に答える
0

このコードを試してみませんか。

Application.ThreadException += OnHandledException;

private static void OnHandledException(object sender, ThreadExceptionEventArgs e) { //ここで処理 }

あなたの懸念が未処理の例外に関するものである場合。そのスニペットはトリックを行うことができます。

于 2012-05-02T21:31:36.197 に答える