Kha*_*moz 12 .net c# hardware hard-drive
我需要检查C#,如果硬盘是SSD(固态硬盘),没有寻求惩罚?我用了:
ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection drives = driveClass.GetInstances();
Run Code Online (Sandbox Code Playgroud)
但它只能在属性中提供包含SSD的字符串,我不能依赖它?
我需要直接检查一下吗?
WMI无法轻易确定这一点.这里有一个解决方案,它基于Windows 7用于确定磁盘是否为SSD的相同算法(此处的算法更多:固态驱动器的Windows 7增强功能,第8页以及此处:Windows 7磁盘碎片整理程序用户界面概述):在C#中判断SSD是否存在
来自MSDN博客的引用:
磁盘碎片整理程序查看通过ATA IDENTIFY DEVICE命令直接查询设备的结果.碎片整理程序发出IOCTL_ATA_PASS_THROUGH请求并检查IDENTIFY_DEVICE_DATA结构.如果NomimalMediaRotationRate设置为1,则此磁盘被视为SSD.最新的SSD将通过设置字217(用于将标称介质旋转速率报告为1)来响应该命令.217这个词是在2007年的ATA8-ACS规范中引入的.
小智 6
这会给你在 Win10 上的结果
ManagementScope scope = new ManagementScope(@"\\.\root\microsoft\windows\storage");
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM MSFT_PhysicalDisk");
string type = "";
scope.Connect();
searcher.Scope = scope;
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();
Run Code Online (Sandbox Code Playgroud)
ps字符串类型是最后一个驱动,改成数组获取所有驱动
归档时间: |
|
查看次数: |
6513 次 |
最近记录: |