我不是很擅长VC ++,但是有没有人有一个示例代码来获取计算机中磁盘的旋转速度。我一直致力于检测SSD驱动器,一整天研究的一个解决方案就是获得转速,而且由于SSD的转速为0 rpm,这可能是检测SSD驱动器的唯一方法。
答案 0 :(得分:7)
有一个NV缓存管理器interface used for ReadyDrive,它是Vista的新功能。我认为它正在测试NV_FEATURE_PARAMETER的NVReadSpeed和NVWrtSpeed值。
Windows 7通过使用ATA8-ACS标识字217检测SSD:标称介质旋转速率,值为0001h,如非固态设备等非旋转介质。但并非所有SSD都遵循ATA8-ACS1规范第7.16.7.77节,有些可能需要固件更新。
如果您想更多地关注在Windows中发送ATA命令,我建议您深入了解Storage Platform ATA论坛。该论坛正在存档,因此行动迅速。
也非常有启发性:
http://blogs.msdn.com/b/e7/archive/2009/05/05/support-and-q-a-for-solid-state-drives-and.aspx
SSD上默认会禁用磁盘碎片整理吗?
是。碎片整理的自动调度将排除声称自己为SSD的设备上的分区。此外,如果系统磁盘具有高于8 MB /秒阈值的随机读取性能特征,那么它也将被排除。阈值由内部分析确定。
答案 1 :(得分:1)
您最好寻找TRIM命令。
BOOL IsDriveSSD(){
DWORD dwBytesReturned;
HANDLE volhand = INVALID_HANDLE_VALUE;
try{
volhand = CreateFile("\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
}
catch(...){
volhand = INVALID_HANDLE_VALUE;
}
if (volhand == INVALID_HANDLE_VALUE) return FALSE;
// Test 1: See if we have a TRIM command, if so, we're SSD.
STORAGE_PROPERTY_QUERY spq;
DEVICE_TRIM_DESCRIPTOR dtr;
memset(&dtr,0,sizeof(DEVICE_TRIM_DESCRIPTOR));
memset(&spq,0,sizeof(STORAGE_PROPERTY_QUERY));
spq.PropertyId=StorageDeviceTrimProperty;
spq.QueryType=PropertyStandardQuery;
BOOL ret = DeviceIoControl(volhand, IOCTL_STORAGE_QUERY_PROPERTY,
&spq,sizeof(spq),
&dtr,sizeof(dtr),
&dwBytesReturned,FALSE);
if(ret){
ret = dtr.TrimEnabled;
}
CloseHandle(volhand);
return ret;
}
答案 2 :(得分:1)
我知道这是一个旧线程,但是它将在Windows 10上运行
ManagementScope scope = new ManagementScope(@"\\.\root\microsoft\windows\storage");
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM MSFT_PhysicalDisk");
scope.Connect();
searcher.Scope = scope;
string type = "";
foreach (ManagementObject queryObj in searcher.Get())
{
switch (Convert.ToInt16(queryObj["MediaType"]))
{
case 1:
type = "Unspecified";
break;
case 3:
type = "HDD";
break;
case 4:
type = "SSD";
break;
case 5:
type = "SCM";
break;
default:
type = "Unspecified";
break;
}
}
searcher.Dispose();