除了 ROOT_HUB20 外,其他键值都是以 VID_ 开始,后面跟着一个 4 位的16 进制数,这就是厂商的 ID 号,其后的 PID_XXXX 则是厂家的产品号。进一步打开这些 VID_ 打头的子键键值,可以看到更多的信息:
例如 Service 表示的是该 USB 设备是由系统服务 HidUSB 进行处理的,而系统服务 HidUSB 表示的是使用 USB 协议的人体工程学输入设备,只要有 USB 类的鼠标、键盘、摄像头等设备连接到计算机,就会触发一个特定于 HID 设备的事件,HidUSB 服务会处理该事件,可以看到有 ClassGUID 这个键值,它的值
{745a17a0-74d3-11d0-b6fe-00a0c90f57da} 就是表示 Class 是 HIDClass 这样的设备。同样的,对于 USB 存储设备,在接入时同样会由一个服务予以处理,这个服务就是 USBSTOR 系统服务。以下列出了在 Enum\\USB 下和 USB 设备有关的服务名称(还有其他的相关服务,这里列出的是我的系统上有的):
[csharp] view plain copy print?
1. Usbccgp: USB 设备控制器服务。 2. HidUsb: USB 人体学工程输入设备服务。 3. USBSTOR: USB 存储设备服务。 4. Usbhub: USB 设备接口服务。
5. WUDFRd: 用户模式驱动框架反射器相关的服务,当连接只能手机等设备时,该服务
会进行处理。
6. VboxUsb: 安装 Oracle 的 VM VirtualBox 虚拟机软件后会出现该服务,用于处
理连接到虚拟机的 USB 设备。
Usbccgp: USB 设备控制器服务。
HidUsb: USB 人体学工程输入设备服务。 USBSTOR: USB 存储设备服务。 Usbhub: USB 设备接口服务。
WUDFRd: 用户模式驱动框架反射器相关的服务,当连接只能手机等设备时,该服务会进行处理。
VboxUsb: 安装 Oracle 的 VM VirtualBox 虚拟机软件后会出现该服务,用于处理连接到虚拟机的 USB 设备。
在本文中,只检测了 USBSTOR、WUDFRd、VboxUsb服务所处理的 USB 设备。对于 Enum\\USBSTOR 子键的键值,其结构和 Enum\\USB 下的键值结构类似。在 USB、USBSTOR 的子键键值中有FriendlyName 这个键值,它表示的是设备的友好名称,可以作为 USB 的设备名称来显示。
第三节 删除 USB 存储设备使用痕迹
检测到之后便是删除这些痕迹的问题。由于注册表的某些键值权限是 SYSTEM 账户的,一般的管理员账号权限无法删除,如果要想通过代码来删除,必须取得 SYSTEM 权限,一个方法是将执行删除的代码做成程序后安装为系统服务(Sysinterals 的工具 PsExec 也是利用了系统服务可以使用 SYSTEM 权限的特性,使得启动的进程继承了 SYSTEM 权限),系统服务是可以运行于 SYSTEM 权限的,这样对注册表就有了完全的控制权,可自由进行删改(但是同时一定要注意不要删除其他的注册表项,以避免麻烦)。如何使用 Visual Studio 制作系统服务呢,Step by Step。
1、右键单击解决方案 USBView,选择“添加”-“新建项目”,项目类型选择“Windows 服务”,项目名称命名为 USBCleaner,随后在 IDE 自动生成的代码中会出现以下方法:
[csharp] view plain copy print?
1. protected override void OnStart(string[] args) 2. protected override void OnStop()
protected override void OnStart(string[] args) protected override void OnStop()
分别表示服务启动和停止时的事件处理过程。在这两个事件处理过程中写入删除注册表键值的代码,逻辑和检测时的一样。在删除过程中,我添加了一个日志功能,记录在执行删除过程中成功和错误的信息。为了在程序运行目录下生成日志文件,需要在系统服务的运行过程中得到其所在路径,网上查阅了一些资料,有许多获取路径的方法,自己实际用注册服务的方式做了一下实验,结果如下:
[csharp] view plain copy print?
1. Assembly.GetExecutingAssembly().Location 2. D:\\DATA\\USBViewer\\bin\\Release\\USBCleaner.exe 3.
4. this.GetType( ).Assembly.Location
5. D:\\DATA\\USBViewer\\bin\\Release\\USBCleaner.exe 6.
7. Process.GetCurrentProcess().MainModule.FileName 8. D:\\DATA\\USBViewer\\bin\\Release\\USBCleaner.exe 9.
10. System.Environment.CurrentDirectory 11. C:\\Windows\\system32 12.
13. System.AppDomain.CurrentDomain.BaseDirectory 14. D:\\DATA\\USBViewer\\bin\\Release\\ 15.
16. System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase 17. D:\\DATA\\USBViewer\\bin\\Release\\ 18.
19. System.IO.Directory.GetCurrentDirectory() 20. C:\\Windows\\system32
Assembly.GetExecutingAssembly().Location D:\\DATA\\USBViewer\\bin\\Release\\USBCleaner.exe
this.GetType( ).Assembly.Location
D:\\DATA\\USBViewer\\bin\\Release\\USBCleaner.exe
Process.GetCurrentProcess().MainModule.FileName D:\\DATA\\USBViewer\\bin\\Release\\USBCleaner.exe
System.Environment.CurrentDirectory C:\\Windows\\system32
System.AppDomain.CurrentDomain.BaseDirectory D:\\DATA\\USBViewer\\bin\\Release\\
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase D:\\DATA\\USBViewer\\bin\\Release\\
System.IO.Directory.GetCurrentDirectory() C:\\Windows\\system32
最后决定用 Assembly.GetExecutingAssembly().Location 这个方法,在 Windows 7 和 Windows XP 及 Windows Server 2003 上运行都能得到正确的结果。 在所有删除代码都编写完毕后,就是给服务添加安装程序了。双击打开 USBCleaner.cs,此时会显示设计界面,在设计界面上单击右键,选择“添加安装程序”,会为该服务项目添加用于服务安装时的支持,这样就可以通过代码来直接安装和卸载服务了。
“添加安装程序”这一步会在项目中自动添加两个组件,一个是服务进程安装类组件,另外一个是服务安装类组件:
服务进程安装类组件具有以下的属性:
其中的“Account”属性即是服务所运行的权限级别,选择“LocalSystem”,即可以使用 SYSTEM 权限。另外一个是服务安装类组件,属性如下:
其中的几个关键属性:
[csharp] view plain copy print?
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库编写 USB 存储设备使用痕迹检测和删除工具(2)在线全文阅读。
相关推荐: