无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 1643|回复: 26
打印 上一主题 下一主题

[求助] nwinfo 0.9.5.1 bug 汇报

[复制链接]
跳转到指定楼层
1#
发表于 2024-3-28 14:32:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pda8888 于 2024-3-28 15:38 编辑

请看视频:
请看视频
当使用pnputil /restart-device "硬盘设备之后",nwinfo --disk 出现错误

环境:virtualbox 7.0.14
4个虚拟硬盘,物理编号是0,1,2,3,即 \\.\Physicaldrive0 …… \\.\Physicaldrive3
1个虚拟U盘,物理编号是\\.\Physicaldrive4

先用
  1. nwinfo_x64.exe --disk --no-smart --format=json|jq -r -c ".Disks[]|\"\(.Path)=\(.HWID)\""
复制代码

得到:
  1. \\.\PhysicalDrive0=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&000000
  2. \\.\PhysicalDrive1=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&010000
  3. \\.\PhysicalDrive2=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&020000
  4. \\.\PhysicalDrive3=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&030000
  5. \\.\PhysicalDrive4=USBSTOR\Disk&Ven_VBOX&Prod_HARDDISK&Rev_1.0\6&36787cab&0
复制代码



此时输入命令:
  1. pnputil /restart-device "SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&030000"
复制代码

相当于把3号磁盘禁用再启用。
再用先前相同的命令:
  1. nwinfo_x64.exe --disk --no-smart --format=json|jq -r -c ".Disks[]|\"\(.Path)=\(.HWID)\""
复制代码

结果却是:
  1. \\.\PhysicalDrive0=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&000000
  2. \\.\PhysicalDrive1=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&010000
  3. \\.\PhysicalDrive2=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&020000
  4. \\.\PhysicalDrive3=USBSTOR\Disk&Ven_VBOX&Prod_HARDDISK&Rev_1.0\6&36787cab&0
  5. \\.\PhysicalDrive4=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&030000
复制代码

可以看到,3号和4号物理盘的hwid被互换了,这是不正确的结果。







点评

辛苦了  发表于 2024-3-28 14:41

评分

参与人数 1无忧币 +2 收起 理由
yyz2191958 + 2 赞一个!

查看全部评分

2#
发表于 2024-3-28 14:40:46 | 只看该作者
谢谢分享
回复

使用道具 举报

3#
发表于 2024-3-28 14:47:15 | 只看该作者
留个脚印,,,,
回复

使用道具 举报

4#
发表于 2024-3-28 14:59:55 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
发表于 2024-3-28 15:04:53 | 只看该作者

留个脚印,,,,
回复

使用道具 举报

6#
 楼主| 发表于 2024-3-28 15:14:34 | 只看该作者
本帖最后由 pda8888 于 2024-3-28 15:37 编辑

补充一下:
这次重启第0个物理磁盘:
  1. x:\>pnputil /restart-device "SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&000000"
复制代码
Microsoft PnP 工具

正在重启设备:         SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&000000
已成功重启设备。

再用nwinfo与jq列出硬盘信息:
  1. x:\>nwinfo_x64.exe --disk --no-smart --format=json|jq -r -c ".Disks[]|\"\(.Path)=\(.HWID)\""
复制代码
\\.\PhysicalDrive0=USBSTOR\Disk&Ven_VBOX&Prod_HARDDISK&Rev_1.0\6&36787cab&0
\\.\PhysicalDrive1=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&010000
\\.\PhysicalDrive2=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&020000
\\.\PhysicalDrive3=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&030000
\\.\PhysicalDrive4=SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&000000

这次轮到第0号硬盘与第4号硬盘的hwid互换了。
回复

使用道具 举报

7#
发表于 2024-3-28 15:32:49 | 只看该作者
在系统自带的   磁盘管理  里看下磁盘号到底有没有变呢

点评

没有变化。 在设备管理器、磁盘管理器里面,都是正确的,没有发生错误变化。  详情 回复 发表于 2024-3-28 15:36
回复

使用道具 举报

8#
 楼主| 发表于 2024-3-28 15:35:01 | 只看该作者
再补充一个在真机环境的情况:
U:\>nwinfo_x64.exe --disk --no-smart --format=json|jq -r -c ".Disks[]|\"\(.Path)=\(.HWID)\""
\\.\PhysicalDrive0=SCSI\Disk&Ven_NVMe&Prod_XPG_GAMMIX_S70_S\5&204bb58c&0&000000
\\.\PhysicalDrive1=SCSI\Disk&Ven_NVMe&Prod_HP_SSD_EX900_500\5&27a2bec5&0&000000
\\.\PhysicalDrive2=SCSI\Disk&Ven_WDS100T1&Prod_X0E-00AFY0\6&1d7f4af2&0&000000

U:\nwinfo>pnputil /restart-device "SCSI\Disk&Ven_NVMe&Prod_HP_SSD_EX900_500\5&27a2bec5&0&000000"
Microsoft PnP 工具

正在重启设备:         SCSI\Disk&Ven_NVMe&Prod_HP_SSD_EX900_500\5&27a2bec5&0&000000
已成功重启设备。


U:\>nwinfo_x64.exe --disk --no-smart --format=json|jq -r -c ".Disks[]|\"\(.Path)=\(.HWID)\""
\\.\PhysicalDrive0=SCSI\Disk&Ven_NVMe&Prod_XPG_GAMMIX_S70_S\5&204bb58c&0&000000
\\.\PhysicalDrive1=SCSI\Disk&Ven_WDS100T1&Prod_X0E-00AFY0\6&1d7f4af2&0&000000
\\.\PhysicalDrive2=SCSI\Disk&Ven_NVMe&Prod_HP_SSD_EX900_500\5&27a2bec5&0&000000

仍然是重启哪个硬盘,它的hwid就会与USB设备的hwid互换。
回复

使用道具 举报

9#
 楼主| 发表于 2024-3-28 15:36:19 | 只看该作者
红毛樱木 发表于 2024-3-28 15:32
在系统自带的   磁盘管理  里看下磁盘号到底有没有变呢

没有变化。
在设备管理器、磁盘管理器里面,都是正确的,没有发生错误变化。

点评

那应该是BUG了  详情 回复 发表于 2024-3-28 16:00
回复

使用道具 举报

10#
 楼主| 发表于 2024-3-28 15:55:03 | 只看该作者
我拔掉U盘,对第2个硬盘进行restart-device,没有再现错误。
好像没有USB储存,就不会出错这种错误。
回复

使用道具 举报

11#
发表于 2024-3-28 16:00:48 | 只看该作者
pda8888 发表于 2024-3-28 15:36
没有变化。
在设备管理器、磁盘管理器里面,都是正确的,没有发生错误变化。

那应该是BUG了
回复

使用道具 举报

12#
发表于 2024-3-28 20:25:00 | 只看该作者
感谢分享
回复

使用道具 举报

13#
发表于 2024-3-29 08:10:05 | 只看该作者
谢谢分享
回复

使用道具 举报

14#
发表于 2024-3-29 11:56:40 | 只看该作者
nwinfo是通过注册表读hwid的,看来这样不行。

点评

明白了,没有重启注册表不生效,是吗?  详情 回复 发表于 2024-3-29 16:20
回复

使用道具 举报

15#
 楼主| 发表于 2024-3-29 16:20:55 | 只看该作者
wintoflash 发表于 2024-3-29 11:56
nwinfo是通过注册表读hwid的,看来这样不行。

明白了,没有重启注册表不生效,是吗?
回复

使用道具 举报

16#
发表于 2024-3-30 10:59:43 | 只看该作者
代码好长啊,看不懂
回复

使用道具 举报

17#
 楼主| 发表于 2024-4-1 16:38:50 | 只看该作者
本帖最后由 pda8888 于 2024-4-1 17:13 编辑

果然。
在系统启动之初,查询注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum,导出是这样的:
  1. Windows Registry Editor Version 5.00

  2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum]
  3. "0"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&000000"
  4. "Count"=dword:00000005
  5. "NextInstance"=dword:00000005
  6. "1"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&010000"
  7. "2"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&020000"
  8. "3"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&030000"
  9. "4"="USBSTOR\\Disk&Ven_VBOX&Prod_HARDDISK&Rev_1.0\\6&36787cab&0"

复制代码

在使用了一次 pnputil /restart-device "SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&030000" 之后,再查询相同键值,导出,得:
  1. Windows Registry Editor Version 5.00

  2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum]
  3. "0"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&000000"
  4. "Count"=dword:00000005
  5. "NextInstance"=dword:00000005
  6. "1"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&010000"
  7. "2"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&020000"
  8. "3"="USBSTOR\\Disk&Ven_VBOX&Prod_HARDDISK&Rev_1.0\\6&36787cab&0"
  9. "4"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&030000"
复制代码


此时再使用 pnputil /restart-device "SCSI\Disk&Ven_VBOX&Prod_HARDDISK\4&1c07620b&0&020000" ,即重启“2号”盘,再查询注册表导出,又得到:
  1. Windows Registry Editor Version 5.00

  2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum]
  3. "0"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&000000"
  4. "Count"=dword:00000005
  5. "NextInstance"=dword:00000005
  6. "1"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&010000"
  7. "2"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&030000"
  8. "3"="USBSTOR\\Disk&Ven_VBOX&Prod_HARDDISK&Rev_1.0\\6&36787cab&0"
  9. "4"="SCSI\\Disk&Ven_VBOX&Prod_HARDDISK\\4&1c07620b&0&020000"
复制代码


这规律真是奇怪得很,就是只要重启哪个非USB设备,那个非USB设备就变成第4号盘,第3号变成USB设备,而本来USB设备是排在第4号盘位置上的。
回复

使用道具 举报

18#
 楼主| 发表于 2024-4-1 17:19:15 | 只看该作者
本帖最后由 pda8888 于 2024-4-1 17:26 编辑

https://learn.microsoft.com/zh-cn/windows-hardware/drivers/install/hklm-system-currentcontrolset-enum-registry-tree
微软官网说:
枚举树保留供操作系统组件使用,其布局可能会更改。 驱动程序和用户模式设备安装组件必须使用系统提供的功能

全文如下:

HKLM\SYSTEM\CurrentControlSet\Enum 注册表树
  • 项目
  • 2023/06/15
  • 4 个参与者
[size=0.875em]反馈

枚举树保留供操作系统组件使用,其布局可能会更改。 驱动程序和用户模式设备安装组件必须使用系统提供的功能(例如 IoGetDeviceProperty、 CM_Get_DevNode_Registry_Property和 SetupDiGetDeviceRegistryProperty )从此树中提取信息。

备注
驱动程序和 Windows 应用程序不得直接访问 枚举 树。




回复

使用道具 举报

19#
发表于 2024-4-2 20:17:31 | 只看该作者
学习了,感谢大神们的留言
回复

使用道具 举报

20#
发表于 2024-4-14 20:51:21 | 只看该作者

点评

感谢分享,明天试试。  发表于 2024-4-14 22:14
回复

使用道具 举报

21#
 楼主| 发表于 2024-4-14 22:19:02 | 只看该作者
有点好奇,这次不读注册表,是用什么方法呢?
我同时也测试了nirsoft的driverview,它也会有同样的问题。

点评

用的是Setup API。 Ventoy 可能也有类似的问题。  详情 回复 发表于 2024-4-15 06:48
回复

使用道具 举报

22#
 楼主| 发表于 2024-4-14 22:29:17 | 只看该作者
刚刚忍不住测试了一下,这次结果正确,我注意到跟0.9.5的不一样是把USB设备列到最前面了,接着是physicaldrive0、physicaldrive1……physicaldriven
回复

使用道具 举报

23#
发表于 2024-4-15 06:48:53 | 只看该作者
pda8888 发表于 2024-4-14 22:19
有点好奇,这次不读注册表,是用什么方法呢?
我同时也测试了nirsoft的driverview,它也会有同样的问题。

用的是Setup API。
Ventoy 可能也有类似的问题。
回复

使用道具 举报

24#
 楼主| 发表于 2024-4-15 12:55:39 | 只看该作者
调用windowsAPI就对了,微软自己的文档也说了注册表不可靠。微软是自己打脸啊。
回复

使用道具 举报

25#
发表于 2024-4-16 15:26:33 | 只看该作者
,辛苦了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-27 19:01

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表