怎么识别硬盘是SSD还HDD

wsktx 2013-04-02 04:13:54
在windows下怎么识别一块硬盘是SSD还是HDD
...全文
2219 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
杰瑞大杰瑞 2015-05-20
  • 打赏
  • 举报
回复
上面截的图相关内容我是参考的这个:如何检查是否开启Trim功能http://ask.zol.com.cn/q/27817.html
杰瑞大杰瑞 2015-05-20
  • 打赏
  • 举报
回复
引用 8 楼 CandPointer 的回复:
当然, 有更简单的,但不是100%可靠的


检查TRIM


一般SSD都有, TRIM 属性(但,早期SSD,在个别芯片组,RAID情况下,Trim无法启用)

BOOLEAN TrimEnabled;

typedef struct _DEVICE_TRIM_DESCRIPTOR {
DWORD Version;
DWORD Size;
BOOLEAN TrimEnabled;
} DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR;





typedef struct _STORAGE_DEVICE_DESCRIPTOR {
DWORD Version;
DWORD Size;
BYTE DeviceType;
BYTE DeviceTypeModifier;
BOOLEAN RemovableMedia;
BOOLEAN CommandQueueing;
DWORD VendorIdOffset;
DWORD ProductIdOffset;
DWORD ProductRevisionOffset;
DWORD SerialNumberOffset;
STORAGE_BUS_TYPE BusType;
DWORD RawPropertiesLength;
BYTE RawDeviceProperties[1];
} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;

最近也在写设备系统检测,
经过实际测试(十几个样本),其他电脑上面都可以正确判断,不过在我开发用的笔记本(机械硬盘)上 DEVICE_TRIM_DESCRIPTOR的TrimEnabled项返回的是1,说明机械硬盘也开启了tirm功能?原因不详,个人猜测只要是有相关驱动的话,都能够读取到这个信息吧,因为我直接在本机上面查询是否开启tirm,结果如下:

等于0,表示trim开启,但是我的是机械硬盘。

ps:测实际读取速度,结果是固态还没有机械的快
  • 打赏
  • 举报
回复
我最近也在做这一方面的问题,在MFC编程中,目前找到了几种方法来区分本地硬盘和可移动硬盘(SSD)。 1、获取当前系统盘路径GetSystemDirectory(),据此路径根目录(即卷标)查找所属盘的物理硬盘序号,然后其他物理盘就有你要的可移动硬盘 了。 2、读取注册表中的内容,根据注册表前几位的类型判定,例如IDE、RISD、USBSTRO等字符串可以初步判定。 3、还是根据卷标获取当前磁盘的特性,根据总线类型区分。
BYTE buff[1024] = {0};
	 PSTORAGE_DEVICE_DESCRIPTOR pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)buff;
	 pDevDesc->Size = sizeof(buff);

         DeviceIoControl( hDevice,
		 IOCTL_STORAGE_QUERY_PROPERTY,
		 &StoragePropertyQuery,
		 sizeof(STORAGE_PROPERTY_QUERY),
		 pDevDesc,
		 pDevDesc->Size,
		 &dwOutLen,
		 NULL);
http://bbs.csdn.net/topics/300238119 http://hi.baidu.com/nmn714/item/46997ff032a4664a922af249 这两个帖子你都可以好好琢磨一下。
owen1759 2014-02-26
  • 打赏
  • 举报
回复
如果你做的不是硬件检测之类涉及底层的软件,只是为了充分利用SSD的性能而对程序进行一些特别的优化的话,可以提供一个设置选项:“启用SSD优化”,让用户自行选择。
wsktx 2013-04-04
  • 打赏
  • 举报
回复
引用 7 楼 CandPointer 的回复:
答案是, 217: Plain Text code?12345678910111213141516171819202122232425262728293031323334353637383940414243This section describes structures used by storage drivers in NT-based operating s……
这种方法也不能准确检测是不是SSD,一开始采用的就是这种方案,对有些SSD还是不能识别
wsktx 2013-04-03
  • 打赏
  • 举报
回复
wmi中的什么字段可以判断是SSD还是HDD呢?
赵4老师 2013-04-03
  • 打赏
  • 举报
回复
感觉还是听听读写时有没有机械噪声比较靠谱。呵呵!
CandPointer 2013-04-03
  • 打赏
  • 举报
回复
当然, 有更简单的,但不是100%可靠的 检查TRIM 一般SSD都有, TRIM 属性(但,早期SSD,在个别芯片组,RAID情况下,Trim无法启用) BOOLEAN TrimEnabled;

typedef struct _DEVICE_TRIM_DESCRIPTOR {
  DWORD   Version;
  DWORD   Size;
  BOOLEAN TrimEnabled;
} DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR;



typedef struct _STORAGE_DEVICE_DESCRIPTOR {
  DWORD            Version;
  DWORD            Size;
  BYTE             DeviceType;
  BYTE             DeviceTypeModifier;
  BOOLEAN          RemovableMedia;
  BOOLEAN          CommandQueueing;
  DWORD            VendorIdOffset;
  DWORD            ProductIdOffset;
  DWORD            ProductRevisionOffset;
  DWORD            SerialNumberOffset;
  STORAGE_BUS_TYPE BusType;
  DWORD            RawPropertiesLength;
  BYTE             RawDeviceProperties[1];
} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
CandPointer 2013-04-03
  • 打赏
  • 举报
回复
答案是, 217:


This section describes structures used by storage drivers in NT-based operating systems, including class, miniclass, and filter drivers.

This section includes:

ATA Port and Miniport Driver Structures

CD-ROM Structures

Changer Structures

Disk Structures

DVD Structures

Fibre Channel Structures

Crash Dump Filter Driver Structures

General Storage Structures

IDE Bus Structures

iSCSI Structures

Mount Manager Structures

NV Cache Manager Structures

SCSI Port Driver Structures

SCSI Bus Structures

MPIO Structures

Storport Driver Structures

Storport Virtual Miniport Driver Structures

Storage Silo Driver Structures

Tape Structures

Volume Manager Structures




测试速度的话,不太可靠.
因为, 可能的情况是, RAID, 或者 设置了速度上限的RamDisk. 更有可能是受限于磁盘读写等情况. 速度检测不合适

比如,这个,特殊情况下的SSD



wsktx 2013-04-03
  • 打赏
  • 举报
回复
在windows下SSD硬盘也能有柱面和扇区 采用过随机读取的方式来判断,不过这种方式耗时比较长
赵4老师 2013-04-03
  • 打赏
  • 举报
回复
瞎猜:如果没有磁头、柱面、扇区就是SSD
bluesky12312388 2013-04-03
  • 打赏
  • 举报
回复
换个思路,测试下顺序写入的性能。以10MB为例子,目前的HDD大概需要,10MB/60MB 秒,而SDD的性能大概是10MB/450MB 秒,可以利用小数据测试多次以提高准确率。
shen_wei 2013-04-03
  • 打赏
  • 举报
回复
这个没办法区分吧,SSD是最近才出现的新技术 你用这个函数试试看GetDriveType
赵4老师 2013-04-02
  • 打赏
  • 举报
回复
WMI ?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧