什么确切地当我将 USB 插入计算机时会发生什么?
答案1
我必须从标签中猜测你提问的‘为什么’。
您的计算机通过 USB 协议上的简单握手来识别它 -比如这个并决定是否需要驱动程序。如果需要,它通常会从互联网上下载,从设备上抓取(如果设备设计为这样)或请求它。如果不需要,它会安装它,或者以其他方式初始化并开始与设备通信。
问题就出在这里。回到过去的美好时光,当时 CD-ROM 驱动器是酷孩子们的必备物品,人们决定允许程序在 autorun.inf 文件要求时自动运行。
这种情况在 USB 密钥上继续存在。虽然运行安装程序让生活变得更轻松,但这也意味着你可以自动加载恶意软件(如果你想偷偷摸摸的话,然后是安装程序)。现代操作系统通常会禁用此选项。
现在,在信任的基础上让系统运行任意程序对政府来说是很差的,在工业和政府间谍活动的时代,黑客“简单地”把 USB 密钥留在身边供不疲倦的人使用之类的事情,这是一个相当糟糕的想法。
答案2
- 督政府: 驱动程序安装在 2 个目录中。运行部分(在大多数情况下)安装到 %RootDir%\system32,设备信息部分安装到 %RootDir%\inf。在 inf 目录下,对于已安装/注册的驱动程序,会创建一个 oem*.inf 文件。(* 为数字)。在 Vista 下,驱动程序被复制到 %RootDir%\system32\driverstore 目录中,作为安装尚未遇到的设备时的参考。
- 註冊地區: 驱动程序作为内核模式服务安装。为此,会为驱动程序服务创建某些注册表项。在总线驱动程序下还有另一个位置,相应的设备会获得单独的设备实例键。在此键中,设备具有对此设备当前使用的驱动程序的引用。
- 设备‘到达’:当总线驱动程序在其总线上发现新设备时,它会在其自己的密钥下创建一个密钥注册表,该密钥对应于唯一的设备实例 ID,可用于唯一地标识系统上的设备。如果此密钥已存在,则总线驱动程序会尝试加载此节点引用的设备。当此节点不存在或驱动程序未加载时,系统会尝试通过扫描 %RootDir%\inf 下已注册的设备驱动程序来查找设备的兼容驱动程序。符合此设备条件的驱动程序将被枚举和排序。然后选择并为设备加载最佳驱动程序。
- 駕駛員搜索:首先在 inf 目录中搜索驱动程序。如果未找到驱动程序,Windows 会询问用户是否可以提供驱动程序或是否应在 Microsoft 服务器上查找。驱动程序制造商可以提交其驱动程序以纳入 Microsoft 设备驱动程序服务器。
这是适用于 Windows 的:
当 USB 设备插入系统时,USB 总线驱动程序会收到通知。总线驱动程序会向设备发送标准 USB 请求 (USB_DEVICE_DESCRIPTOR)。设备会据此报告其名称和类型。(bDeviceClass/bDeviceSubClass/bDeviceProtocol)。
有了这些信息,Windows 会在系统中创建一个设备条目。这就是硬件 ID。系统现在会尝试找到可以处理该设备的通用驱动程序 (HID/UVC) 或专门注册以支持此硬件 ID 的驱动程序。
要将驱动程序注册为特定设备的处理程序,您必须将该驱动程序安装到系统中,或者必须向 Microsoft 提供一个驱动程序,他们可以在其服务器上提供该驱动程序。