查看主题内容
学习学习
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
527104427 https://pecmd.net/thread-573.htm 跟我这里的代码一样,我这里注释更全面。 实际就是获取trim,不太可靠。
哦,我还以为是获取寻道时间的,谢谢!
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); }
a1ive 按五大前面提供的 C# 代码, Vista 及以上的系统可以通过 DEVICE_SEEK_PENALTY_DESCRIPTOR 中的 IncursSeekPenalty 判断是否为 SSD。 C代码 ...
感谢提供C代码,有这个就能研究一下了。
通过 STORAGE_DEVICE_DESCRIPTOR 获取的磁盘序列号可能是跟真实序列号(比如 AIDA 等程序里)不一致的。
这个的转换方法依协议/厂家等而定。
我没有找到什么好方法,就偷懒直接抄 CrystalDiskInfo 的开源代码。
我把 CrystalDiskInfo 的核心代码封装成了一个 dll,以便调用:https://github.com/a1ive/libcdi/releases
用法可以参考 README 和提供的示例程序:https://github.com/a1ive/libcdi/blob/main/cditest/cditest.c
a1ive 通过 STORAGE_DEVICE_DESCRIPTOR 获取的磁盘序列号可能是跟真实序列号(比如 AIDA 等程序里)不一致的。 这个的转换方法依协议/厂家等而定。 我没有 ...
这个强大,方便实用!!
抱歉,昨天没仔细研究代码,你这段确实是关于结构体 DEVICE_SEEK_PENALTY_DESCRIPTOR 的,也的确是寻道相关的,与 a1ive说的是一个意思。
跟那段C#代码一样。我整理一下发个帖子吧。
527104427 抱歉,昨天没仔细研究代码,你这段确实是关于结构体 DEVICE_SEEK_PENALTY_DESCRIPTOR 的,也的确是寻道相关的,与 a1ive说的是一个意思。 跟那段C#代 ...
很是期待,谢谢!
Thank you
谢谢分享
thanks.
感谢大佬
感谢分享!