无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: wintoflash
打印 上一主题 下一主题

[原创] 开源的硬件信息工具nwinfo [20260105]

    [复制链接]
661#
发表于 2025-11-18 15:54:05 | 只看该作者
回复

使用道具 举报

662#
发表于 2025-11-18 15:54:35 | 只看该作者
本帖最后由 pda8888 于 2025-11-18 15:56 编辑

另一台

点评

你运行的是32位nwinfo? 是不是wow64重定向的问题? 运行64位nwinfo呢?  详情 回复 发表于 2025-11-18 16:45
看不到图  详情 回复 发表于 2025-11-18 16:40
回复

使用道具 举报

663#
 楼主| 发表于 2025-11-18 16:45:27 | 只看该作者

你运行的是32位nwinfo?install date也是错误的。
是不是wow64重定向的问题?
运行64位nwinfo呢?
回复

使用道具 举报

664#
发表于 2025-11-18 19:37:31 | 只看该作者
运行的是nwinfo.exe
我换用nwinfox64.exe --sys,就对正了。
真是意外!
回复

使用道具 举报

665#
发表于 2025-11-25 18:36:04 | 只看该作者
最新版:Build 20251125.698
命令行:--smbios的Table Type: 17
在一台笔记本取出: Device Size: 4294967296
实际为 4GB,取出的bit
而在台式机上取出:Device Size: 32768
实际为 32GB ,取出的MB
是程序本事就这么设计的还是没统一

点评

试试 https://github.com/a1ive/nwinfo/releases/tag/latest 应该修复了。如果不行,执行 nwinfo --smbios=17 --bin=hex 把16进制数据发我研究。 另外现在可以扔掉HwRwDrv,换CPUZ/HwIo的驱动了。https://github  详情 回复 发表于 2025-11-25 22:12
回复

使用道具 举报

666#
 楼主| 发表于 2025-11-25 22:12:29 | 只看该作者
2012jiashanni 发表于 2025-11-25 18:36
最新版:Build 20251125.698
命令行:--smbios的Table Type: 17
在一台笔记本取出: Device Size: 429496 ...

试试 https://github.com/a1ive/nwinfo/releases/tag/latest
应该修复了。如果不行,执行 nwinfo --smbios=17 --bin=hex 把16进制数据发我研究。

另外现在可以扔掉HwRwDrv,换CPUZ/HwIo的驱动了。https://github.com/a1ive/nwinfo/tree/master/winring0 (cpuid[x64].sys, HwIo[x64].sys)
由于版权原因,不能集成到软件,要单独下载。

点评

可以了 谢谢大佬  详情 回复 发表于 2025-11-25 23:59
回复

使用道具 举报

667#
发表于 2025-11-25 23:59:49 | 只看该作者
wintoflash 发表于 2025-11-25 22:12
试试 https://github.com/a1ive/nwinfo/releases/tag/latest
应该修复了。如果不行,执行 nwinfo --smbi ...

可以了 谢谢大佬
回复

使用道具 举报

668#
发表于 2025-11-26 09:51:47 | 只看该作者
工具真心不错谢谢
回复

使用道具 举报

669#
发表于 2025-11-26 13:30:59 | 只看该作者
=========================================================================================
D:\UjyQii\Qiibiosinfo.exe  --smbios=17
---
NWinfo:
    Build Time: 'Nov 25 2025 14:06:18'
    libnw: 'v1.5.0.4'
    MSVC Version: '194435219'
    NT Version: '6.1.7601'
    Driver: 'cpuz161'
    Driver Path: 'D:\UjyQii\cpuidx64.sys'
    Driver Version: '1.0.6.1'
    Language ID: '2052'
    libcpuid: '0.8.1'
    CrystalDiskInfo: '9.7.2'
    PCI ID: '2025.11.24'
    USB ID: '2025.09.15'
    PNP ID: 'UNKNOWN'
    JEP106 ID: '2025.07.17'
    Error: [ 'Cannot open D:\UjyQii\pnp.ids' ]
    SMBIOS:
        - DMI:
            SMBIOS Version: '2.7'
            DMI Reversion: 39
            SMBIOS Length: 2793
        - Table:
            Table Type: 17
            Table Length: 34
            Table Handle: 66
            Description: 'Memory Device'
            Physical Memory Array Handle: 64
            Memory Error Information Handle: 65534
            Total Width (bits): 64
            Data Width (bits): 64
            Device Size: 8589934592
            Form Factor: 'DIMM'
            Device Set: 0
            Device Locator: 'ChannelA-DIMM0'
            Bank Locator: 'BANK 0'
            Device Type: 'DDR3'
            Type Detail: 128
            Speed (MT/s): 0
            Manufacturer: 'A-DATA Technology'
            Serial Number: 'C17A0000'
            Asset Tag Number: '9876543210'
            Part Number: '                  '
            Attributes: 2
            Configured Memory Speed (MT/s): 1333
        - Table:
            Table Type: 17
            Table Length: 34
            Table Handle: 67
            Description: 'Memory Device'
        - Table:
            Table Type: 17
            Table Length: 34
            Table Handle: 68
            Description: 'Memory Device'
            Physical Memory Array Handle: 64
            Memory Error Information Handle: 65534
            Total Width (bits): 64
            Data Width (bits): 64
            Device Size: 8589934592
            Form Factor: 'DIMM'
            Device Set: 0
            Device Locator: 'ChannelB-DIMM0'
            Bank Locator: 'BANK 2'
            Device Type: 'DDR3'
            Type Detail: 128
            Speed (MT/s): 0
            Manufacturer: 'A-DATA Technology'
            Serial Number: '15CB0100'
            Asset Tag Number: '9876543210'
            Part Number: '                  '
            Attributes: 2
            Configured Memory Speed (MT/s): 1333
        - Table:
            Table Type: 17
            Table Length: 34
            Table Handle: 69
            Description: 'Memory Device'
=========================================================================================

频率为1600MHz 而Speed (MT/s): 0 是取不到还是BUG

点评

加上--bin=hex参数看看十六进制。  详情 回复 发表于 2025-11-26 13:35
回复

使用道具 举报

670#
 楼主| 发表于 2025-11-26 13:35:35 | 只看该作者
2012jiashanni 发表于 2025-11-26 13:30
=========================================================================================
D:%ujyQii ...

加上--bin=hex参数看看十六进制。

点评

Serial Number: 'C17A0000' Asset Tag Number: '9876543210' Part Number: ' ' Attributes: 2 Configured Memory Speed (MT/s):  详情 回复 发表于 2025-11-26 13:50
回复

使用道具 举报

671#
发表于 2025-11-26 13:50:39 | 只看该作者
wintoflash 发表于 2025-11-26 13:35
加上--bin=hex参数看看十六进制。

            Serial Number: 'C17A0000'
            Asset Tag Number: '9876543210'
            Part Number: '                  '
            Attributes: 2
            Configured Memory Speed (MT/s): 1333
            Binary Data:
                00000000: '11 22 42 00 40 00 FE FF 40 00 40 00 00 20 09 00'
                00000010: '01 02 18 80 00 00 00 03 04 05 06 02 00 00 00 00'
                00000020: '35 05   

点评

[attachimg]568162[/attachimg] Binary Data: 00000000: '11 22 42 00 40 00 FE FF 40 00 40 00 00 20 09 00' 00000010: '01 02 18 80 00 00 00 03 04 05 06 02 00 00 00 00'  详情 回复 发表于 2025-11-26 14:06
回复

使用道具 举报

672#
 楼主| 发表于 2025-11-26 14:06:07 | 只看该作者
2012jiashanni 发表于 2025-11-26 13:50
Serial Number: 'C17A0000'
            Asset Tag Number: '9876543210'
            Par ...


Binary Data:
                00000000: '11 22 42 00 40 00 FE FF 40 00 40 00 00 20 09 00'
                00000010: '01 02 18 80 00 00 00 03 04 05 06 02 00 00 00 00'
固件提供的SMBIOS表里这个数据就是0。

我这里是没问题的。
回复

使用道具 举报

673#
发表于 2025-11-26 23:13:44 | 只看该作者
可以的
回复

使用道具 举报

674#
发表于 2025-11-27 13:16:54 | 只看该作者
freesoft00 发表于 2025-10-24 14:35
你好。

nwinfo是否可以支持类似wimc命令的table格式输出,就是在一行通过分割符分开显示。这样好通过f ...

建议配合jq.exe,非常的方便。
回复

使用道具 举报

675#
发表于 2025-11-27 13:18:29 | 只看该作者
freesoft00 发表于 2025-10-24 14:35
你好。

nwinfo是否可以支持类似wimc命令的table格式输出,就是在一行通过分割符分开显示。这样好通过f ...

建议配合jq.exe,非常的方便。但是,jq的查询翻译到for里面,会让你欲仙欲死的。
给你看看我的一个 jq 在 for 里面的片段:

for /f "tokens=1,2 delims=|" %%a in ('curl -s "%api%" -F "key=%key%" %reqStr:@="% -F "vga=1"^|"%jq%" -cr ".tasks[] | \"\^^^(.save_name^^^)^^^|\^^^([.download_url[] ^^^| tojson] ^^^| join^^^(\" \"^^^)^^^)\""') do (
...
)


点评

用PowerShell啊,PowerShell内置了JSON解析器。 写图形界面都可以。 [attachimg]568228[/attachimg]  详情 回复 发表于 2025-11-27 19:59
回复

使用道具 举报

676#
 楼主| 发表于 2025-11-27 19:59:52 | 只看该作者
本帖最后由 wintoflash 于 2025-11-27 20:27 编辑
pda8888 发表于 2025-11-27 13:18
建议配合jq.exe,非常的方便。但是,jq的查询翻译到for里面,会让你欲仙欲死的。
给你看看我的 ...

用PowerShell啊,PowerShell内置了JSON解析器。
写图形界面都可以。

点评

PE 下 powershell 不可用。  详情 回复 发表于 2025-11-28 14:56
回复

使用道具 举报

677#
发表于 2025-11-27 21:59:53 | 只看该作者
功能强大,支持!
回复

使用道具 举报

678#
发表于 2025-11-28 14:56:29 | 只看该作者
wintoflash 发表于 2025-11-27 19:59
用PowerShell啊,PowerShell内置了JSON解析器。
写图形界面都可以。

PE 下 powershell 不可用。

点评

PE下可以用Lua,也比批处理强多了。 另外我重写了SPD功能,你不怕硬件损坏的话可以下载测试版测试了。  详情 回复 发表于 2025-11-30 09:40
回复

使用道具 举报

679#
发表于 2025-11-30 08:41:39 | 只看该作者
期待正式版,就是多了个PawnIOSetup,比之前大了

点评

用不到可以删掉,换成cpu-z的驱动。 因为版权问题,只能放完整PawnIO安装包。  详情 回复 发表于 2025-11-30 09:39
回复

使用道具 举报

680#
 楼主| 发表于 2025-11-30 09:39:33 | 只看该作者
本帖最后由 wintoflash 于 2025-11-30 09:42 编辑
0cat0 发表于 2025-11-30 08:41
期待正式版,就是多了个PawnIOSetup,比之前大了

用不到可以删掉,换成cpu-z的驱动。
因为版权问题,只能放完整PawnIO安装包。如果软件不开源的话,没人关心有没有侵权,但是开源的话,是要接受大众审查的,有一点侵权都不行。
回复

使用道具 举报

681#
 楼主| 发表于 2025-11-30 09:40:52 | 只看该作者
pda8888 发表于 2025-11-28 14:56
PE 下 powershell 不可用。

PE下可以用Lua,也比批处理强多了。
另外我重写了SPD功能,你不怕硬件损坏的话可以下载测试版测试了。
回复

使用道具 举报

682#
 楼主| 发表于 2025-12-3 13:02:55 | 只看该作者
20251203更新 v1.5.0

支持GPU传感器监测(温度、电压、风扇、显存等),需要电脑安装显卡驱动。
修复PCI设备遍历问题
支持读取内存SPD,获取内存XMP、时序、温度信息
按SMBIOS 3.9规范调整部分SMBIOS表项目显示
优化GUI程序加载速度
移除PDH支持
优化对AMD CPU支持
添加CPU-Z/HwIo驱动支持(见下面说明)
本论坛的压缩包附件包含了CPU-Z的驱动,GitHub的压缩包包含了HwRwDrv和PawnIO驱动,各驱动版权归原作者所有。
CPU-Z,HwIo,HwRwDrv驱动禁止商用。
PawnIO驱动允许商用,但是必须按原样分发。
回复

使用道具 举报

683#
发表于 2025-12-3 13:13:55 | 只看该作者
感谢楼主分享
回复

使用道具 举报

684#
发表于 2025-12-4 09:03:00 | 只看该作者
多谢更新分享
回复

使用道具 举报

685#
发表于 2025-12-5 16:29:20 | 只看该作者
好工具,谢谢更新了。
回复

使用道具 举报

686#
发表于 2025-12-5 22:50:13 | 只看该作者
这应该问题不大吧

点评

SMBIOS Type 17 (Memory Device) 从3.2版本后优先使用JEP106 ID来确定制造商。目前是每个Memory Device表解析时都尝试加载jep106.ids。可以考虑只在初始化的时候加载一次。  详情 回复 发表于 2025-12-6 09:27
回复

使用道具 举报

687#
 楼主| 发表于 2025-12-6 09:27:50 | 只看该作者

SMBIOS Type 17 (Memory Device) 从3.2版本后优先使用JEP106 ID来确定制造商。目前是每个Memory Device表解析时都尝试加载jep106.ids。可以考虑只在初始化的时候加载一次。
回复

使用道具 举报

688#
 楼主| 发表于 2025-12-6 09:38:39 | 只看该作者
2012jiashanni 发表于 2025-9-3 04:41
1、在英特尔酷睿Ultra 9 285K+华硕Z890 Pro上,GUI显示的处理器温度与aida64的接近,在运行GUI后,aida64显 ...

现在提供nwinfo动态库(dll)了,其他程序可以直接调DLL了。
目前导出函数还没弄全,也暂时不保证API稳定。
除了cdi_*函数是__stdcall调用约定以外其他函数都是__cdecl调用约定。
测试程序: NWMonitor.7z (672.09 KB, 下载次数: 2)
回复

使用道具 举报

689#
发表于 2025-12-16 05:12:39 | 只看该作者
libcdi 的 github 好像你设置为只读了,没法回复了。在这里回。
改了一个地方。修正一处获取 physicalDriveId 的错误,在我这个INTEL VMD 的机器下,NVME设备SMART读取成功。

  1. ULONG cbPdo = sizeof(szBuf);
  2. if (CM_Get_DevNode_Registry_PropertyW(devInst, CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME, NULL, szBuf, &cbPdo, 0) == CR_SUCCESS)
  3. {
  4.                                 DebugPrint(szBuf);
  5.                                 CString pdo(szBuf);
  6.                                 int pos = pdo.Find(L"Harddisk");
  7.                                 if (pos >= 0)
  8.                                 {
  9.                                         pos += (int)wcslen(L"Harddisk");
  10.                                         CString num;
  11.                                         while (pos < pdo.GetLength() && iswdigit(pdo[pos]))
  12.                                         {
  13.                                                 num += pdo[pos];
  14.                                                 pos++;
  15.                                         }
  16.                                         if (!num.IsEmpty())
  17.                                         {
  18.                                                 physicalDriveId = _wtoi(num);
  19.                                         }
  20.                                 }
  21. }
复制代码
改成:
  1. ULONG ulLength = 0;
  2. if (CM_Get_Device_Interface_List_SizeW(&ulLength, (LPGUID)&GUID_DEVINTERFACE_DISK, (DEVINSTID_W)pszId, CM_GET_DEVICE_INTERFACE_LIST_PRESENT) == CR_SUCCESS && ulLength > 0)
  3. {
  4.                                 PWSTR pInterfaceList = (PWSTR)malloc(ulLength * sizeof(WCHAR));
  5.                                 if (pInterfaceList)
  6.                                 {
  7.                                         ZeroMemory(pInterfaceList, ulLength * sizeof(WCHAR));
  8.                                         if (CM_Get_Device_Interface_ListW((LPGUID)&GUID_DEVINTERFACE_DISK, (DEVINSTID_W)pszId, pInterfaceList, ulLength, CM_GET_DEVICE_INTERFACE_LIST_PRESENT) == CR_SUCCESS && pInterfaceList[0] != L'\0')
  9.                                         {
  10.                                                 HANDLE hDisk = CreateFileW(
  11.                                                         pInterfaceList,
  12.                                                         GENERIC_READ,
  13.                                                         FILE_SHARE_READ | FILE_SHARE_WRITE,
  14.                                                         NULL,
  15.                                                         OPEN_EXISTING,
  16.                                                         FILE_ATTRIBUTE_NORMAL,
  17.                                                         NULL
  18.                                                 );

  19.                                                 if (hDisk != INVALID_HANDLE_VALUE)
  20.                                                 {
  21.                                                         STORAGE_DEVICE_NUMBER sdn = { 0 };
  22.                                                         DWORD bytesReturned = 0;
  23.                                                         if (DeviceIoControl(
  24.                                                                 hDisk,
  25.                                                                 IOCTL_STORAGE_GET_DEVICE_NUMBER,
  26.                                                                 NULL,
  27.                                                                 0,
  28.                                                                 &sdn,
  29.                                                                 sizeof(sdn),
  30.                                                                 &bytesReturned,
  31.                                                                 NULL
  32.                                                         ))
  33.                                                         {
  34.                                                                 physicalDriveId = sdn.DeviceNumber;
  35.                                                         }
  36.                                                         safeCloseHandle(hDisk);
  37.                                                 }
  38.                                         }
  39.                                         free(pInterfaceList);
  40.                                 }
  41. }
复制代码


另外 pszIdBase 生成时,应该可以一次过滤掉非 "DiskDrive" 的类型列表。
补充:
if (!deviceName.IsEmpty() && deviceName.Find(L"AMD-RAID Config") >= 0)
发现这里的判断不是“优势”所在,  应该是用  CM_Get_Parent 获取磁盘的父设备(实际就是磁盘控制器),然后通过父设备的 硬件ID和兼容ID 列表判断(实际使用的是 兼容ID),比如这里的AMD RAID和AMD的硬件ID对应,实际就是"PCI\VEN_1022&CC_0104", AMD的NVME RAID 是 "PCI\VEN_1022&CC_0108"。
然后INTEL的RAID或者RST或者VMD,就是: "PCI\VEN_8086&CC_0104"

点评

是的。和nwinfo分别放两个仓库不方便开发,所以直接全放nwinfo里面了。 这样啊。感觉这个流程可以优化,应该可以直接遍历磁盘控制器吧。CrystalDiskInfo的这部分代码写得太烂了,全是屎山。 另外读取部分  详情 回复 发表于 2025-12-16 09:40
回复

使用道具 举报

690#
 楼主| 发表于 2025-12-16 09:40:43 | 只看该作者
红毛樱木 发表于 2025-12-16 06:12
libcdi 的 github 好像你设置为只读了,没法回复了。在这里回。
改了一个地方。修正一处获取 physicalDriv ...
libcdi 的 github 好像你设置为只读了,没法回复了。

是的。和nwinfo分别放两个仓库不方便开发,所以直接全放nwinfo里面了。

if (!deviceName.IsEmpty() && deviceName.Find(L"AMD-RAID Config") >= 0)
发现这里的判断不是“优势”所在,  应该是用  CM_Get_Parent 获取磁盘的父设备(实际就是磁盘控制器),然后通过父设备的 硬件ID和兼容ID 列表判断(实际使用的是 兼容ID)

这样啊。感觉这个流程可以优化,应该可以直接遍历磁盘控制器吧。CrystalDiskInfo的这部分代码写得太烂了,全是屎山。

另外读取部分磁盘SMART的时候还是需要WMI。如果前面没初始化,还是得卡半天。。。

点评

另外读取部分磁盘SMART的时候还是需要WMI。如果前面没初始化,还是得卡半天。。。 --------------------------- 应该就是这地方的磁盘号没获取正确,导致别的信息都要从后面重新获取的吧。 整个逻辑不知道是啥样  详情 回复 发表于 2025-12-17 02:56
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2026-1-10 01:08

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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