前些日子看到一篇博文谈到企业内部USB存储设备的管制问题,谈了很多方面,讲的也算比较全面了,并且利用批处理,效率也非常高。看后深受启发。
        但文中有一点是利用系统本身附带的USB存储设备驱动的,后来在微软官网上看到有一点,如果之前就使用过USB存储设备的,这时这种方法就不太好使了。并且微软的网站上也给出了解决方案
        其中利用注册表键值这一点觉得非常实用,并且也安全,实际使用中只需要在两个值之间切换即可。但在不同的电脑上都要进到注册表中,然后再修改键值不免麻烦,于是想到了VS中的GetValue和SetValue方法,有些日子没写程序了,于是就测试了一下。
        一、程序主界面及最终效果
        1.主界面如下图所示。
也谈对USB存储设备的管制
        2.执行效果。
        程序运行自动检测“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor”项下的Start键值,如果为“4”,则表示当前为USB存储不可用状态,则在程序的灰色文本框中会显示“不可用状态”,如果是非“4”的键值,则会显示“可用状态”,并且同时,在可用状态和不可用状态下,Enable和Disable两个按钮只有一个可用(也就是通过这两个按钮也可以判断的)。单击相应按钮,状态改变,文本框中的文字跟着改变。
        二、程序实现
        1.打开VS 2008,新建一个“Windows窗体应用程序”,具体的项目名随你取。
        2.在Form1中分别添加两个TextBox和Button控件,一个Label控件,如下图所示。
也谈对USB存储设备的管制
        其中第一个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环境下测试通过。

转载于:https://blog.51cto.com/windyli/318051

相关文章: