一、登錄檔中與u盤相關的鍵
1. \\hkey_local_machinesystem\\currentcontrolset\\services\\usbstor\\enum ,該鍵中有本機連線的所有u盤的裝置路徑,count為u盤的數量,數字鍵對應的值為u盤的裝置路徑,形如:usb\vid_1e3d&pid_2096\ccbb123456ee012b;
2. \\hkey_local_machinesystem\\currentcontrolset\\services\\disk\\enum,該鍵中儲存有物理磁碟裝置的路徑;count為磁碟數量,數字鍵對應的值為裝置路徑,形如:usbstor\disk&ven_2.0&prod_flash_disk&rev_2.61\ccbb123456ee012b&1;
3. \\hkey_local_machinesystem\\currentcontrolset\\services\\cdrom\\enum,該鍵中儲存有光碟機的裝置路徑,count為數量,數字鍵名對應的鍵值為裝置路徑,形如:usbstor\cdrom&ven_2.0&prod_flash_disk&rev_2.60\ccbb123456ee012b&0;
4. \\hkey_local_machinesystem\\mounteddevices,該鍵中有\dosdevices\x:的鍵名,x為碟符,其值為對應裝置的路徑,如:「\dosdevices\e:」的鍵值為:\??\usbstor#cdrom&ven_2.0&prod_flash_disk&rev_2.60#ccbb123456ee012b&0#,「\dosdevices\f:」的鍵值為:_??_usbstor#disk&ven_2.0&prod_flash_disk&rev_2.61#ccbb123456ee012b&1#;
二、檢測u盤的流程
1. 查詢上述1-3所有的鍵值,儲存在三個vector中,然後逐個遍歷通過關鍵字找出各自的對應關係,把對應的值存入usbnod中,usbnode定義如下:
struct usbnod //檢索本機u盤節點,通過檢索登錄檔獲取
;
遍歷對應關係的**如下:
//構造系統usb裝置的節點陣列
char* usbstor_key = "system\\currentcontrolset\\services\\usbstor\\enum";
vectorusbstor_vals;
getregenumvalues(usbstor_key , usbstor_vals);
char* usbdisk_key = "system\\currentcontrolset\\services\\disk\\enum";
vectorusbdisk_vals;
getregenumvalues(usbdisk_key , usbdisk_vals);
char* usbcdrom_key = "system\\currentcontrolset\\services\\cdrom\\enum";
vectorusbcdrom_vals;
getregenumvalues(usbcdrom_key , usbcdrom_vals);
usbnod usbdisknod[26];
int count = 0;
for (unsigned int i = 0; i < usbcdrom_vals.size(); i++)
}}
讀取登錄檔鍵值構造vector的函式
//檢索emnu型別的usb裝置相關的登錄檔鍵值,返回獲取到的數量,迴圈讀取內容內容儲存在 vector&values
int getregenumvalues(lpctstr key, vector&values)
", pdpath.data());
devicenum = getphysicaldrivefromdevicepath(ph_path);
//獲取磁碟裝置位址對應的物理磁碟號
}string vol; //得到u盤碟符;
lptstr lpdrives = new tchar[max_path];
dword dwlen = ::getlogicaldrivestrings(max_path, lpdrives);
char* sdrives[26] = ;
for (dword nindex = 0; nindex < dwlen / 4; nindex++)}}
}delete lpdrives;
return vol;
}
以上登錄檔鍵值由windows系統服務維持,經使用還是比較可靠的,未盡問題是對於u盤僅檢測有乙個u盤碟符的情況,多個u盤碟符未做處理,不過根據原始碼應該很容易寫出。
通過csdn學習了很多,今天終於自己寫了一點東西,不對之處歡迎拍磚。
Windows 檢測碟符是否為U盤
storage property query結構體 typedef struct storage property query storage property query,pstorage property query 用於儲存將要查詢的碟符裝置的屬性 storage device descrip...
使用U盤安裝windows系統大全
u盤一枚 8g以上 u盤一枚 8g以上 如何製作pe系統 為什麼要製作pe系統 在安裝系統的時候,往往會出現 windows系統無法安裝到gpt分割槽格式的磁碟 這時候需要對計算機的磁碟重新分割槽成mrb格式等,這些需要用到磁碟分割槽工具。pe系統,就是可以從u盤進入系統,將計算機磁碟分割槽,十分方...
將windows10系統裝入u盤
背景 自win8.1的企業版開始才可以通過window to go 工具將win系統裝入u盤,但是有很多侷限,對u盤要求也很高,解決不了大部分實際問題。用途 將win系統裝入u盤,就可以隨時隨地的攜帶自己的系統。對於需要一些開發環境,或對軟體有要求的工作非常方便,只用插入u盤就可以再其它電腦上打自己...