[原创]调用 api 实例(检索指定磁盘设备描述符,即磁盘型号、序列号、总线类型等)(storage_device_descriptor)
2023-7-11 1388
收藏
点赞
道具卡
分享
https://www.123pan.com/s/NflRVv-Cm5Sh
最新回复 (40)
  • avatar image
    a1ive 2023-11-8

    学习学习

  • avatar image
    anson4 2023-11-9
    527104427 这里的 DeviceType 无意义,有意义的在这里: https://pecmd.net/thread-558.htm   但这个并不能作为判断是否 SSD 的依据,网上判断 ...

    我曾经在某个QQ群里面得到一段代码,没看明白,但效果似乎不错。

    现在贴上来,5 大可以研究研究,看看是否能够优化一下,代码中的备注现在不记得是否正确了。

    // 判断硬盘是否固态磁盘(检测的好像是寻道时间),%&C%=1为机械硬盘,%&C%=0为固态硬盘、U盘或者其他。
    CALL $--qd --ret:&x Kernel32.dll,CreateFileW,$\\.\PhysicalDrive0,#0,#3,#0,#3,#0,#0
    SET$ &T=07*11 0
    SET$ &C=*12 0
    SET$#  &d=*8 0 
    CALL $--qd --ret:&a Kernel32.dll,DeviceIoControl,#%&x%,#2954240,*&T,#12,*&C,#12,*&d,#0
    SET?char &C=&C:8
    MESS %&C%  HDD/1  SSD USB/0
    
    单机计算
  • avatar image
    爱心会员VIP会员
    527104427 2023-11-9
    楼主   28
    此楼层已删除
    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    anson4 2023-11-9
    527104427 https://pecmd.net/thread-573.htm 跟我这里的代码一样,我这里注释更全面。 实际就是获取trim,不太可靠。

    哦,我还以为是获取寻道时间的,谢谢!

    单机计算
  • avatar image
    a1ive 2023-11-9
    anson4 我曾经在某个QQ群里面得到一段代码,没看明白,但效果似乎不错。 现在贴上来,5 大可以研究研究,看看是否能够优化一下,代码中的备注现在不记得是否正确了。 // 判断硬盘是否固态磁盘(检测的好像是寻 ...

    按五大前面提供的 C# 代码, Vista 及以上的系统可以通过 DEVICE_SEEK_PENALTY_DESCRIPTOR 中的 IncursSeekPenalty 判断是否为 SSD。

    C代码:

    STORAGE_PROPERTY_QUERY propQuery = { .QueryType = PropertyStandardQuery, .PropertyId = StorageDeviceSeekPenaltyProperty };
    DEVICE_SEEK_PENALTY_DESCRIPTOR dspd = { 0 };
    
    if (DeviceIoControl(hDisk, IOCTL_STORAGE_QUERY_PROPERTY, &propQuery, sizeof(propQuery),
        &dspd, sizeof(dspd), NULL, NULL))
    {
        return (dspd.IncursSeekPenalty == FALSE);
    }
  • avatar image
    爱心会员VIP会员
    527104427 2023-11-9
    楼主   31
    此楼层已删除
    最后于 2023-11-10 被527104427编辑 ,原因:
    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    爱心会员VIP会员
    527104427 2023-11-9
    楼主   32
    a1ive 按五大前面提供的 C# 代码, Vista 及以上的系统可以通过 DEVICE_SEEK_PENALTY_DESCRIPTOR 中的 IncursSeekPenalty 判断是否为 SSD。 C代码 ...

    感谢提供C代码,有这个就能研究一下了。

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    a1ive 2023-11-9

    通过 STORAGE_DEVICE_DESCRIPTOR 获取的磁盘序列号可能是跟真实序列号(比如 AIDA 等程序里)不一致的。

    1.webp

    这个的转换方法依协议/厂家等而定。

    我没有找到什么好方法,就偷懒直接抄 CrystalDiskInfo 的开源代码。

     我把 CrystalDiskInfo 的核心代码封装成了一个 dll,以便调用:https://github.com/a1ive/libcdi/releases

    用法可以参考 README 和提供的示例程序:https://github.com/a1ive/libcdi/blob/main/cditest/cditest.c

    2.webp

  • avatar image
    爱心会员VIP会员
    527104427 2023-11-9
    楼主   34
    a1ive 通过 STORAGE_DEVICE_DESCRIPTOR 获取的磁盘序列号可能是跟真实序列号(比如 AIDA 等程序里)不一致的。 这个的转换方法依协议/厂家等而定。 我没有 ...

    这个强大,方便实用!!

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    爱心会员VIP会员
    527104427 2023-11-10
    楼主   35
    anson4 我曾经在某个QQ群里面得到一段代码,没看明白,但效果似乎不错。 现在贴上来,5 大可以研究研究,看看是否能够优化一下,代码中的备注现在不记得是否正确了。 // 判断硬盘是否固态磁盘(检测的好像是寻 ...

    抱歉,昨天没仔细研究代码,你这段确实是关于结构体 DEVICE_SEEK_PENALTY_DESCRIPTOR 的,也的确是寻道相关的,与 a1ive说的是一个意思。

    跟那段C#代码一样。我整理一下发个帖子吧。

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    anson4 2023-11-10
    527104427 抱歉,昨天没仔细研究代码,你这段确实是关于结构体 DEVICE_SEEK_PENALTY_DESCRIPTOR 的,也的确是寻道相关的,与 a1ive说的是一个意思。 跟那段C#代 ...

    很是期待,谢谢!

    单机计算
  • avatar image
    anhdv 2024-1-6

    Thank you

    anhdv
  • avatar image
    liangnijian 2024-4-3

    谢谢分享

    : )
  • avatar image
    goofoonet 15天前

    thanks.

    mbr
  • avatar image
    blue003 14天前

    感谢大佬

    pecmd不错的编程
  • avatar image
    flyingdancex 10天前

    感谢分享!

返回