ペンドライブがUSBポートに接続されている場合、C#を使用して検出する方法は?
-
07-07-2019 - |
質問
LANで誰かがペンドライブをUSBポートに接続したことを知る方法はありますか? プログラムで(できればC#で)または何らかのツールを通じて。基本的に、各端末にクライアントアプリケーションが配置され、USBポートを監視してサーバーに情報を送信すると想像します。
a。)コピー中のファイルの詳細を取得できますか? b。)クライアントアプリケーションなしでこれを行う方法はありますか?
編集
USBポートを完全に無効にしたくありません。それは基礎を持つ必要があることです。基本的には、LAN上のユーザーに責任を持ってデータを共有し、転送されたデータはすべて監視および記録され、後で質問できることを知ってほしいだけです。
解決
はい、これは可能です。また、ファイルの詳細を取得することもできます。ただし、プログラミングが必要になります。 WM_DEVICECHANGE を監視し、その後ドライブを再度列挙します。 USBペンドライブだけでなく、SDカードも入手できます。それはあなたにとってボーナスだと思います。
ドライブが到着したことがわかったら詳細を取得するには、 System.IO.FileSystemWatcher
更新
より良い解決策を見つけました-ボリュームインターフェイス通知に登録すると、新しいドライブのボリュームパスを取得できます。
まず、 dbcc_classguid = GUID_DEVINTERFACE_VOLUME
で DEV_BROADCAST_DEVICEINTERFACE
を作成します。次に、これを RegisterDeviceNotification()
に渡します。再びWM_DEVICECHANGEを取得しますが、メッセージのlParamを DEV_BROADCAST_DEVICEINTERFACE *
にキャストできるようになりました。
受け取った dbcc_name
を GetVolumeNameForVolumeMountPoint()
に渡すことができます。 GetLogicalDriveStrings()
から GetVolumeNameForVolumeMountPoint()
にすべてのドライブ文字を渡すこともできます。一致するボリューム名が1つあります。これが新しいドライブです。
他のヒント
また、USBデバイスに関するすべての情報が保存されているレジストリをチェックアウトします。 HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ USB
レジストリでそのキーの変更にフックして、それに基づいて行動できます。
この無料のユーティリティは、 http://www.nirsoftをうろついているときに大きな助けになります。 net / utils / usb_devices_view.html
USBドライブを選択し、そのドライブのレジストリキーを開いて、デバイスなどを有効/無効にすることができます。
レジストリでは、デバイスが接続されているかどうか、マスストレージタイプであるか、その他の情報があるかを確認できます。 regkeysを簡単にフィルタリングして、usb-massstorageドライブを取得し、フックして変更を待ちます(接続/切断)。
Windows Management Instrumentationを使用して、レジストリイベントを受信するために登録できます。 http://msdn.microsoft.com/en-us /library/aa393035(VS.85).aspx
.NetのSystem.Managementをチェックしてください
環境が小さく、USBデバイスの使用を禁止する場合は、デバイスマネージャーでUSBポートを無効にし、マシンの管理者としてユーザーが設定されていないことを確認します。 。
そして、あなたがそれについて本当に妄想的であるならば、単にマシンを開いて、ポートを差し込んでください。
この記事をご覧ください。メッセージとそれらの操作方法について説明します。 USBドライブの取り外しの検出
使用したことはありませんが、ic#code(sharpdevelop)のユーザーにはusblibがあります。多分それはあなたを助けることができます。
http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx
USBサムドライブの使用を防止しようとしていますか?その場合、アクセスを制限できるグループポリシーがあります。