1

C# プログラムで com ポートを使用しようとすると、ポートが開いていて、別のプログラムで使用されていることがあります。具体的にして、次のような警告メッセージを生成したい:

"COM1ポートは という名前の他のプログラムによって使用されていSomeApplicationます。そのプログラムを閉じますか (データやその他の結果が失われる可能性があることに注意してください)?"-Yes -No

このシナリオを C# で実装するには?

4

1 に答える 1

3

これは Windows ではサポートされていません。カーネル コードでのみアクセス可能な文書化されていないカーネル構造を歩く必要があります。この情報を非表示にしておくことは非常に意図的であり、プログラムが意図したとおりに実行するのを妨げ、プロセスを強制終了してリソースを取得します。そして一般的には、ハンドル リサイクル攻撃を利用しようとするマルウェアへの対策です。

ユーザーは、SysInternals の Handle ユーティリティを使用してプロセスを見つけることができます。C# コードで Handle.exe が行うことは非常に困難であり、絶対にコミットすべきではありません。デバイス ドライバーを動的にインストールするため、リング 0 のアクセス許可を取得してカーネル データにアクセスできます。また、カーネル構造は Windows バージョン間で変更されており、将来のバージョンで再び変更される可能性があります。

于 2012-12-25T15:21:37.727 に答える