也談對USB存儲設備的管制

        前些日子看到一篇博文談到企業內部USB存儲設備的管制問題,談了很多方面,講的也算比較全面了,並且利用批處理,效率也非常高。看後深受啓發。
        但文中有一點是利用系統本身附帶的USB存儲設備驅動的,後來在微軟官網上看到有一點,如果之前就使用過USB存儲設備的,這時這種方法就不太好使了。並且微軟的網站上也給出了解決方案
        其中利用註冊表鍵值這一點覺得非常實用,並且也安全,實際使用中只需要在兩個值之間切換即可。但在不同的電腦上都要進到註冊表中,然後再修改鍵值不免麻煩,於是想到了VS中的GetValue和SetValue方法,有些日子沒寫程序了,於是就測試了一下。
        一、程序主界面及最終效果
        1.主界面如下圖所示。
        2.執行效果。
        程序運行自動檢測“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor”項下的Start鍵值,如果爲“4”,則表示當前爲USB存儲不可用狀態,則在程序的灰色文本框中會顯示“不可用狀態”,如果是非“4”的鍵值,則會顯示“可用狀態”,並且同時,在可用狀態和不可用狀態下,Enable和Disable兩個按鈕只有一個可用(也就是通過這兩個按鈕也可以判斷的)。單擊相應按鈕,狀態改變,文本框中的文字跟着改變。
        二、程序實現
        1.打開VS 2008,新建一個“Windows窗體應用程序”,具體的項目名隨你取。
        2.在Form1中分別添加兩個TextBox和Button控件,一個Label控件,如下圖所示。
        其中第一個TextBox控件是用來“記錄”Start的鍵值的,其實也可以直接用一個變量來存儲,一開始爲了看註冊表的讀寫效果,所以用了個文本框,可以實時看到讀寫註冊表的情況。最後將該文本框的Visible屬性改成False就可以了,在程序運行的時候就看不見了。
        Label標籤中就是用來輸入提示性字符的,可根據自己喜好用控件都可以。第二個TextBox控件的Enabled屬性設置成False,最後運行的效果就是灰色不可改狀態了。再分別設置一下兩個按鈕的名稱。
        3.雙擊窗體空白處進入代碼窗口,完成代碼。
Public Class Form1
        Dim UsbStorageValue As String
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                '窗體加載時讀取Start鍵值,並根據鍵值判斷狀態
                ReadUsbStateValue()
                CheckState()
        End Sub

        Private Sub btnUsbStorageDisable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUsbStorageDisable.Click
                '單擊Disable按鈕時,將Start的值設置爲4,並重新獲取Start值,判斷狀態
                My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", 4)
                ReadUsbStateValue()
        End Sub

        Private Sub btnUsbStorageEnable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUsbStorageEnable.Click
                '單擊Enable按鈕,將Start的值設置爲3(系統默認值,其他值未做測試),重獲Start值,判斷狀態
                My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", 3)
                ReadUsbStateValue()
        End Sub

        Private Sub txtUsbStorValue_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtUsbStorValue.TextChanged
                '存放鍵值的文本框中的數據發生變化時,重新判斷狀態
                CheckState()
        End Sub

        Private Sub ReadUsbStateValue()
                '將Start的值傳到文本框控件
                UsbStorageValue = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\USBSTOR", "Start", Nothing)
                txtUsbStorValue.Text = UsbStorageValue
        End Sub

        Private Sub CheckState()
                '根據Start鍵值是否爲4來決定文本框的文本以及兩個按鈕的狀態
                If txtUsbStorValue.Text = 4 Then
                        btnUsbStorageEnable.Enabled = True
                        btnUsbStorageDisable.Enabled = False
                        txtUsbStorageState.Text = "不可用狀態"
                Else
                        btnUsbStorageEnable.Enabled = False
                        btnUsbStorageDisable.Enabled = True
                        txtUsbStorageState.Text = "可用狀態"
                End If
        End Sub
End Class
        我本身就是VB小菜鳥,代碼也很簡單,不再多說,後面附上完成工程代碼,有興趣的可以自己改造一下。
 
        本程序在VS2008+Windows Server 2008 R2環境下測試通過。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章