USB插拔監測

2021-10-22 01:59:19 字數 611 閱讀 4305

參考:

pf_netlink socket 監測核心裝置插拔事件

udev

參考:linux的檔案系統是非同步的,也就是說寫乙個檔案不是立刻儲存到介質(硬碟,u盤等)中,而是存到緩衝區內,等積累到一定程度再一起儲存到介質中。如果沒有umount就非法拔出u盤,程式是不知道的,fopen,fwrite等函式都依然返回正確,知道作業系統要把寫介質的時候,才會提示i/o錯誤。可是很多資料都會因為這個不及時的錯誤報告而丟失。

事實上,usb驅動程式在u盤插入和拔出時,都對系統配置檔案做了修改。

例如u盤驅動程式會在插入或拔出時往 /proc/scsi/usb-storage-0/0 裡面記上 attached:yes or no

通過檢視這個檔案就不難檢測u盤是否插入或拔出了。

注意:u盤是否插入的狀態與是否掛載(mount)無關。

當然這也不是唯一的方法檢測u盤的狀態。根據核心的設定情況,也可能沒有/proc/scsi目錄,但是/sys目錄下面會有usb的目錄,插拔u盤,目錄會自動建立和消失,如果上面的方法不可行,那麼可以通過檢測這些目錄來判斷u盤或者sd卡等儲存裝置的存在狀態,/sys/目錄下找到相關的usb或者sd卡的目錄,裡面有更詳細的裝置資訊,包括裝置出廠id,傳輸速度,容量等。

USB裝置的插拔事件監測

做usb加密狗時需要監測插拔事件,vc提供了wm devicechange訊息,但還需要registerdevicenotification 註冊要檢測的 device inte ce class guid 才能獲取到有用資訊。裝置相關的guid有device class guid device i...

QT 檢測USB插拔

include include include include include 第一步 定義usb的guid 全域性唯一識別符號 static const guid guid devinte ce list guid devinte ce disk guid devinte ce hid,guid ...

usb插拔電腦記錄

方法一 usb儲存裝置型號在登錄檔中查詢 開始 執行 花鍵 r regedit 然後依次開啟 hkey local machine system currentcontrolset enum usbstor 就是所要找的裝置 reg query hklm system currentcontrols...