无忧启动论坛

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

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

    [复制链接]
跳转到指定楼层
#
发表于 2021-12-3 14:34:52 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 wintoflash 于 2025-12-4 20:10 编辑

下载:
    v1.5.1
        GitHub
         nwinfo.zip (2.35 MB, 下载次数: 3056)
    附加驱动
        HwIo Driver_HwIo.zip (39.83 KB, 下载次数: 12)
        HwRwDrv Driver_HwRwDrv.zip (25.71 KB, 下载次数: 10)
        WinRing0 Driver_WinRing0.zip (16.41 KB, 下载次数: 8)
        PawnIO Driver_PawnIO.zip (19.2 KB, 下载次数: 8) 另外需要下载安装器
主页:https://a1ive.github.io/nwinfo/
源码:https://github.com/a1ive/nwinfo
需要管理员权限。
版权说明:
本软件使用 Unlicense 许可协议,放弃版权。你可以自由分发、修改、使用此软件,且无需告知开发者,也不需要注明。
本软件不对可靠性做出任何保证,不对使用此软件造成的硬件及数据损坏负任何责任
本软件支持多种驱动,本论坛的压缩包附件包含了CPU-Z的驱动,GitHub的压缩包包含了HwRwDrv和PawnIO驱动,各驱动版权归原作者所有。
CPU-Z,HwIo,HwRwDrv驱动禁止商用
PawnIO驱动允许商用,但是必须按原样分发

图形界面:

命令行用法见压缩包中README.pdf文档。

点评

牛逼,大佬出手,就是不同  发表于 2025-2-21 20:26
辛苦了  发表于 2024-4-17 17:46

评分

参与人数 17无忧币 +80 收起 理由
张小仙 + 5 赞一个!
zqjiang + 5
Allreal + 5 赞一个!
hlstudio + 5 很给力!
yyz2191958 + 2 赞一个!
lps4290 + 5
807979023 + 5 赞一个!
cuicongyuan + 5 赞一个!
shmoss + 5 很给力!
wybuct + 5 赞一个!
15159050498 + 3 很给力!
wmx400 + 5 赞一个!
xzf680 + 5 抓白嫖一葱,很给力
纯脆entropy + 5
江南一根葱 + 5 亲自白嫖
freesoft00 + 5
slore + 5 很给力!

查看全部评分

694#
发表于 2 小时前 | 只看该作者
wintoflash 发表于 2025-12-16 15:59
删掉cpuid*.sys
下载1楼的HwIo驱动,解压到nwinfo同一目录

OK,没有问题了
回复

使用道具 举报

693#
 楼主| 发表于 2 小时前 | 只看该作者
0cat0 发表于 2025-12-16 16:09
1楼下载的最新版,运行程序后,再运行CPU-Z最新版,提示:

删掉cpuid*.sys
下载1楼的HwIo驱动,解压到nwinfo同一目录

点评

OK,没有问题了  详情 回复 发表于 2 小时前
回复

使用道具 举报

692#
发表于 3 小时前 | 只看该作者
赞一个,一定要升起!
回复

使用道具 举报

691#
发表于 3 小时前 | 只看该作者
1楼下载的最新版,运行程序后,再运行CPU-Z最新版,提示:





怎么样才能不干涉,2个同时运行呢

点评

删掉cpuid*.sys 下载1楼的HwIo驱动,解压到nwinfo同一目录  详情 回复 发表于 2 小时前
回复

使用道具 举报

690#
发表于 7 小时前 | 只看该作者
感谢开源,收藏了
回复

使用道具 举报

689#
 楼主| 发表于 8 小时前 | 只看该作者
红毛樱木 发表于 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。如果前面没初始化,还是得卡半天。。。
回复

使用道具 举报

688#
发表于 13 小时前 | 只看该作者
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的这部分代码写得太烂了,全是屎山。 另外读取部分  详情 回复 发表于 8 小时前
回复

使用道具 举报

687#
 楼主| 发表于 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)
回复

使用道具 举报

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

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

使用道具 举报

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

点评

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

681#
 楼主| 发表于 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驱动允许商用,但是必须按原样分发。
回复

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

点评

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

使用道具 举报

677#
发表于 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
回复

使用道具 举报

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

使用道具 举报

675#
 楼主| 发表于 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
回复

使用道具 举报

674#
发表于 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
回复

使用道具 举报

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

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

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

使用道具 举报

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

使用道具 举报

671#
 楼主| 发表于 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。

我这里是没问题的。
回复

使用道具 举报

670#
发表于 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
回复

使用道具 举报

669#
 楼主| 发表于 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
回复

使用道具 举报

668#
发表于 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
回复

使用道具 举报

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

使用道具 举报

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

可以了 谢谢大佬
回复

使用道具 举报

665#
 楼主| 发表于 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
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-12-16 18:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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