今天又面了一家,問我能不能禁用端口,問我能否在加載OS前攔截,輸入密碼正確後再加載操作系統(這個問題後面再說)。我估計他說的不是網絡端口,就問他是不是網絡的端口,BOSS指了指電腦。我明白了是USB的。正好昨天看了一下注冊表的東西。我說這個理論上是沒有問題的。改註冊表就可以。不過我沒有編過,可以嘗試一下。
折騰註冊表還是用VB,VC#容易。這個java還要用什麼驅動。太複雜了。
剛纔裝上VS2005。百度後。發現把HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/USBSTOR下面的Start的3改成4就OK。現場手動修改了一下。沒有問題。改成3,4確實能看是否打開關閉USB的存儲功能。對USB接口的鼠標無壓力。
好,百度vb程序。太複雜了。又百度C#程序。找到結果。
於是編碼如下
- ...省略該加載的
- using Microsoft.Win32;
- 。。。。省略該省略的。。。
- //禁用u盤的代碼
- private void button1_Click(object sender, EventArgs e)
- {
- RegistryKey hkml = Registry.LocalMachine;
- RegistryKey USBSTOR = hkml.OpenSubKey("system//CurrentControlSet//Services//USBSTOR", true);
- USBSTOR.SetValue("Start","4");//注意這裏的4
- }
- 。。。。省略剩下的。
編譯,報錯,說object什麼void類型。一看範例,是用“”我也就改成了雙引號,再編譯,成功
運行一下。沒有問題。成功禁用掉。
現在再改回來,我繼續手動改。我改,我改,改不會來了 。重啓。問題依舊。
打開註冊表。之前Start的值是reg_dword而程序運行完了之後變成了reg_sz,於是上網百度修復。
重寫整個USBSTOR值
保存爲1.reg
- Windows Registry Editor Version 5.00
- [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/USBSTOR]
- "Type"=dword:00000001
- "Start"=dword:00000003
- "ErrorControl"=dword:00000001
- "ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,/
- 52,00,49,00,56,00,45,00,52,00,53,00,5c,00,55,00,53,00,42,00,53,00,54,00,4f,/
- 00,52,00,2e,00,53,00,59,00,53,00,00,00
- "DisplayName"="USB 大容量存儲設備"
- [HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/USBSTOR/Security]
- "Security"=hex:01,00,14,80,90,00,00,00,9c,00,00,00,14,00,00,00,30,00,00,00,02,/
- 00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,/
- 00,00,02,00,60,00,04,00,00,00,00,00,14,00,fd,01,02,00,01,01,00,00,00,00,00,/
- 05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,/
- 20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,0b,00,00,00,00,/
- 00,18,00,fd,01,02,00,01,02,00,00,00,00,00,05,20,00,00,00,23,02,00,00,01,01,/
- 00,00,00,00,00,05,12,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00
問題解決。太恐怖了。沒事不要動註冊表,第二這個又重新看了set的所有方法,我暫時沒辦法sz改成dword。
用RegistryKey類還不如提前寫好reg文件,直接調用呢。
能否在加載OS前攔截這個也可以。在加載OS的時候相應的地方插入一段代碼就可以了。有意思的需求。