rally 发表于 2021-10-8 16:13:45

如何调用API 读取WIN10存储控制器信息

本帖最后由 rally 于 2021-10-13 16:46 编辑

如图,NVMeSSD ,想读取位置信息,不知道AU3相关的函数,还请赐教
这个地方,找到相关API 含税,但不知道如何调用,,


https://docs.microsoft.com/zh-cn/windows/win32/fileio/working-with-nvme-devices用于处理 NVMe 驱动器的 Api你可以使用以下通用 Api 在 Windows 10 中访问 NVMe 驱动器。 这些 Api 可在用户模式应用程序的 winioctl 中找到,对于内核模式驱动程序可在 ntddstor 中找到。 有关标头文件的详细信息,请参阅 标头文件。
[*]IOCTL _存储 _ 协议 _ 命令 :通过 存储 _ 协议 _ 命令 结构使用此 IOCTL 发出 NVMe 命令。 此 IOCTL 允许 NVMe 传递,并在 NVMe 中支持命令效果日志。 你可以将其用于特定于供应商的命令。 有关详细信息,请参阅 直通机制。
[*]存储 _协议 _ 命令 :此输入缓冲区结构包含一个 ReturnStatus 字段,该字段可用于报告以下状态值。
[*]存储 _ 协议 _ 状态 _ 挂起
[*]存储 _ 协议 _ 状态 _ 成功
[*]存储 _ 协议 _ 状态 _ 错误
[*]存储 _ 协议 _ 状态 _ 无效 _ 请求
[*]存储 _ 协议 _ 状态 _ 无 _ 设备
[*]存储 _ 协议 _ 状态 _ 忙碌
[*]存储 _ 协议 _ 状态 _ 数据 _ 超限
[*]存储 _ 协议 _ 状态 _ _ 资源不足
[*]存储 _ 协议 _ 状态 _ 不 _ 受支持

[*]IOCTL _存储 _ 查询 _ 属性 :将此 IOCTL 与 存储 _ 属性 _ 查询 结构一起使用来检索设备信息。 有关详细信息,请参阅 特定于协议的查询 和 温度查询。
[*]存储 _属性 _ 查询 :此结构包括 " PropertyId " 和 " AdditionalParameters " 字段,用于指定要查询的数据。 在 PropertyId 字段中,使用 存储 _ 属性 _ ID 枚举来指定数据的类型。 使用 AdditionalParameters 字段来指定更多详细信息,具体取决于数据的类型。 对于特定于协议的数据,请在 AdditionalParameters 字段中使用 _ 特定于存储协议的 _ _ 数据 结构。 对于温度数据,请使用 AdditionalParameters 字段中的 存储 _ 温度 _ 信息 结构。
[*]存储 _属性 _ ID :此枚举包含允许 IOCTL _ 存储 _ 查询 _ 属性 检索特定于协议和温度信息的新值。
[*]StorageAdapterProtocolSpecificProperty:如果 ProtocolType = ProtocolTypeNvme,DataType = NVMeDataTypeLogPage,则调用方应请求512字节块的数据。
[*]StorageDeviceProtocolSpecificProperty
将这些特定于协议的属性 Id 之一与特定于 存储 _ 协议 _ 的 _ 数据 结合使用,以在 存储 _ 协议 _ 数据 _ 描述符 结构中检索特定于协议的数据。
[*]StorageAdapterTemperatureProperty
[*]StorageDeviceTemperatureProperty
使用这些温度属性 Id 之一来检索 存储 _ 温度 _ 数据 _ 描述符 结构中的温度数据。
[*]存储 _特定于协议的 _ _ 数据:当此结构用于 存储 _ 属性 _ 查询 的 AdditionalParameters 字段,并指定 存储 _ 协议 _ NVMe _ 数据 _ 类型枚举值时,检索 NVMe 特定数据。 在 _ _ 特定于 _ 存储协议的数据 结构的 "数据类型" 字段中,使用以下 存储 _ 协议 _ NVME _ 数据 _ 类型 值之一:
[*]使用 NVMeDataTypeIdentify 可获取标识控制器数据或标识命名空间数据。
[*]使用 NVMeDataTypeLogPage 获取日志页 (包括智能/运行状况数据) 。
[*]使用 NVMeDataTypeFeature 获取 NVMe 驱动器的功能。

[*]存储 _温度 _ 信息 :此结构用于保存特定温度数据。 它在 存储 _ TEMERATURE _ 数据 _ 描述符 中用于返回温度查询的结果。
[*]IOCTL _存储 _ 集 _ 温度 _ 阈值 :将此 IOCTL 与 存储 _ 温度 _ 阈值 结构配合使用可设置温度阈值。 有关详细信息,请参阅 行为更改命令。
[*]存储 _温度 _ 阈值 :此结构用作指定温度阈值的输入缓冲区。 OverThreshold 字段 (布尔) 指定 阈值 字段是超出阈值还是不 (; 否则,该值为低于阈值) 。

sh1536 发表于 2021-10-8 23:51:48

不知道读取位置信息有啥用,但是首先想到了通过WMI方式查询,不过没找到对应的类,帮顶一下

rally 发表于 2021-10-10 09:52:55

也没有找到对应的说明,不知道磁盘控制器和存储控制器有什么差异,读这个位置信息主要想知道NVME挂在哪个总线上面,以此做区分,可以卸载盘。只找到liux下的操作,不知道WINDOWS上如何读取相应的信息
https://blog.weixiaoline.com/956.html

gyp2000 发表于 2021-10-24 21:26:16

本帖最后由 gyp2000 于 2021-10-24 21:36 编辑

下载一个程序 devcon64.exe
然后使用命令行:
devcon64 find =SCSIADAPTER *PCI*
可以返回设备信息。



然后读取注册表项目中的 键值 LocationInformation
就可以获取他的硬件位置信息


afan 发表于 2021-10-24 21:53:07

gyp2000 发表于 2021-10-24 21:26
下载一个程序 devcon64.exe
然后使用命令行:
devcon64 find =SCSIADAPTER *PCI*


你这不是可以直接读注册表吗…… 上面返回的信息在注册表都有吧~

rally 发表于 2021-10-30 21:27:57

afan 大大,能给行代码参考一下吗?读取注册表是最直接的            gpy2000是否考虑先列出物理地址,再根据物理地址来读取相应的位置信息。

afan 发表于 2021-10-30 21:43:10

rally 发表于 2021-10-30 21:27
afan 大大,能给行代码参考一下吗?读取注册表是最直接的            gpy2000是否考虑先列出物理地址,再 ...

我没用这系统… 你自己到注册表搜一下不就知道位置了~

rally 发表于 2021-10-30 21:55:35

好,我试试,感谢afan大大 和 gpy2000 的指点

rally 发表于 2021-11-13 16:07:35

gyp2000 发表于 2021-10-24 21:26
下载一个程序 devcon64.exe
然后使用命令行:
devcon64 find =SCSIADAPTER *PCI*


能帮上传您这个Devcon64.exe版本吗?我这样读出来的是全部的PCI硬件设备,并不单只有NVMe盘,
页: [1]
查看完整版本: 如何调用API 读取WIN10存储控制器信息