获取磁盘样本代码的旋转速度

我不是很擅长VC ++但是有没有人有一个示例代码来获得计算机中磁盘的旋转速度。 我一直致力于检测SSD驱动器,一天研究的一个解决方案就是获得转速,而且由于SSD的转速为0 rpm,这可能是检测SSD驱动器的唯一方法。

来自谷歌wmi ssd检测

有一个用于ReadyDrive的NV缓存管理器接口,这是Vista的新function。 我认为它正在测试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-qa-for-solid-state-drives-and.aspx

SSD上默认会禁用磁盘碎片整理吗?

是。 碎片整理的自动调度将排除声称自己为SSD的设备上的分区。 此外,如果系统磁盘具有高于8 MB /秒阈值的随机读取性能特征,那么它也将被排除。 阈值由内部分析确定。

您最好寻找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; }