答案1
例如,为什么当我将闪存驱动器插入计算机时,Windows 会显示“SanDisk Ultra USB 3.0 USB Device”字符串?
或者,为什么当我将鼠标插入计算机时,Windows 会显示“GXT 922 游戏鼠标”字符串?
Windows 主要从设备中的 USB 控制器接收这些信息。每个 USB 设备都会报告其“设备描述符”,其中包括其供应商 ID 和产品 ID(数字 VID&PID 值)以及制造商名称和产品名称的文本版本,此外还有种类它是什么样的设备以及它支持哪些“接口”。
设备的 USB 控制器会将其存储在某种 EEPROM 或闪存中,但这可能因设备而异,并且不会向主机系统显示 - 操作系统只能获取完全格式化的 USB 设备描述符,而不会真正读取原始内存。
但是由于这些标签的长度有限,Windows 还允许驱动程序在需要时使用更好的标签覆盖它们(将描述符中的 VID 和 PID 映射到驱动程序中的标签)。许多设备都有 .inf-only“驱动程序”,它们本身并没有真正安装驱动程序,而只是为设备提供更好的标签(PCI 设备也会出现这种情况,它们甚至无法报告名称)。通常,这些标签都是从 Windows Update 获得的,但一些这样的驱动程序包可能仍与 Windows 本身离线捆绑在一起。
更多细节:
以视频形式(我上个月看过的):https://www.youtube.com/watch?v=N0O5Uwc3C0o– 大约 14 分钟后,所有发现请求都得到详细解释。
我可以通过低级语言(例如 Assembly)访问和/或重写/修改此信息吗?
有时可能,但语言帮不了你太多忙。原因有二:
低级语言:在每个现代操作系统中,程序都没有特殊的硬件访问权限不管它们是用什么语言编写的?也就是说,操作系统要么让进程做某事(使用 I/O 寄存器、访问原始内存等),要么不让进程做某事,但语言对此没有帮助。另一方面,你能用汇编语言来做,你也可以用 C 和类似语言来做。
该设备必须支持编辑这些数据,大多数设备根本不会这样做。整个 USB 描述符可能只是存储在一次性可编程 ROM 中,一旦写入,您就无法物理更改。此外,没有标准命令 - 通常只有制造商才需要这样做。
(对于某些设备,可能泄露的制造工具使用“隐藏”命令来重新标记设备 - 特别是对于 USB 记忆棒,我过去至少使用过两种不同的工具,但每种工具都只针对特定系列的 USB 闪存芯片。我真的不希望鼠标或打印机存在类似的东西......)
...或 Hex?
那甚至不是一种编程语言。Hex 不做任何东西——它实际上只是书写数字的不同方式。