13

LANで誰かがペンドライブをUSBポートに接続したことを確認する方法はありますか? プログラムで(できればC#で)、または何らかのツールを使用して。基本的に、クライアント アプリケーションが各端末に配置され、USB ポートを監視し、情報をサーバーに送信することを想像します。

a.) コピーされたファイルの詳細を取得できますか? b.) クライアント アプリケーションなしでこれを行う方法はありますか?

編集

USBポートを完全に無効にしたくありません。その必要性に基づいています。基本的には、LAN 上のユーザーが責任を持ってデータを共有し、転送されたデータが監視およびログに記録され、後で質問できることを知ってもらいたいだけです。

4

4 に答える 4

13

[C# の発言を考えると、Windows を想定しています。それに応じてタグ付けしてください]

はい、可能です。そして、ファイルの詳細を取得することができます。ただし、プログラミングが必要になります。WM_DEVICECHANGEを監視し、後でドライブを再列挙します。USBペンドライブだけでなく、SDカードも入手できます。それがあなたにとってのボーナスだと思います。

ドライブが到着したことがわかったら、詳細を取得するには、System.IO.FileSystemWatcherを使用します。

更新 より良い解決策を見つけました。ボリューム インターフェイス通知に登録すると、新しいドライブのボリューム パスが取得されます。まず、 で を作成DEV_BROADCAST_DEVICEINTERFACEdbcc_classguid=GUID_DEVINTERFACE_VOLUMEます。次に、これを に渡しRegisterDeviceNotification()ます。再び WM_DEVICECHANGE を取得しますが、lParam をメッセージから にキャストできるようになりましたDEV_BROADCAST_DEVICEINTERFACE*

dbcc_name受け取った を に渡すことができますGetVolumeNameForVolumeMountPoint()。すべてのドライブ文字を からGetLogicalDriveStrings()に渡すこともできGetVolumeNameForVolumeMountPoint()ます。一致するボリューム名が 1 つあります。これが新しいドライブです。

于 2008-11-07T13:02:43.483 に答える
3

また、USB デバイスに関するすべての情報が保存されているレジストリも確認してください。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB

レジストリ内のそのキーの変更にフックして、それに基づいて行動することができます。

この無料のユーティリティは、いろいろ調べるときに大きな助けになります: http://www.nirsoft.net/utils/usb_devices_view.html

USB ドライブを選択し、そのドライブのレジストリ キーを開き、デバイスの有効化/無効化などを行うことができます。

レジストリでは、デバイスが接続されているかどうか、大容量ストレージ タイプであるかどうか、およびその他の興味深い情報を確認できます。regkey を簡単にフィルタリングして、usb 大容量ドライブを取得し、フックして変更 (接続/切断) を待ちます。

Windows Management Instrumentation を使用すると、登録してレジストリ イベントを受け取ることができます: http://msdn.microsoft.com/en-us/library/aa393035(VS.85).aspx

.Net の System.Management を確認してください

于 2008-11-07T13:28:04.460 に答える
1

小規模な環境で USB デバイスが使用されないようにする場合は、デバイス マネージャーで USB ポートを無効にし、マシン上で管理者としてユーザーが設定されていないことを確認してください。これにより、すべての USB の使用が防止されます。

そして、あなたがそれについて本当に偏執的であるなら、マシンを開いてポートを差し込んでください.

于 2008-11-07T12:34:55.613 に答える
0

USB サム ドライブの使用を防止しようとしていますか? その場合、アクセスを制限できるグループ ポリシーがあります。

于 2008-11-07T12:29:59.103 に答える