Windows平台下使用C++检测硬盘分区是否属于SSD硬盘的方法

复制代码
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include <string>
#include <cassert>

typedef std::basic_string<TCHAR> StringT;

bool IsDriveSSD(const StringT& driveName)
{
    assert(driveName.size()>=2);

    HANDLE hDevice = CreateFile((_T("\\\\.\\") + driveName.substr(0, 2)).c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

    if (hDevice == INVALID_HANDLE_VALUE)
    {
        return false;
    }

    STORAGE_PROPERTY_QUERY query{};
    query.PropertyId = StorageDeviceSeekPenaltyProperty;
    query.QueryType = PropertyStandardQuery;
    DWORD count;
    DEVICE_SEEK_PENALTY_DESCRIPTOR result{};
    if (DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY,
        &query, sizeof(query), &result, sizeof(result), &count, nullptr))
    {
        CloseHandle(hDevice);
        return !result.IncursSeekPenalty;
    }

    CloseHandle(hDevice);

    return false;
}

int main()
{
    DWORD len = GetLogicalDriveStrings(0, NULL);
    if (len == 0)
    {
        return 0;
    }

    TCHAR* buffer = new TCHAR[len];
    
    GetLogicalDriveStrings(len, buffer);

    for (TCHAR* drive = buffer; *drive; drive += _tcslen(drive) + 1)
    {
        // ULARGE_INTEGER freeBytesAvailable;
        // ULARGE_INTEGER totalNumberOfBytes;
        // ULARGE_INTEGER totalNumberOfFreeBytes;

        // if (GetDiskFreeSpaceEx(drive, &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes))
        {
        #if UNICODE
        #define  _tcout std::wcout
        #else
        #define  _tcout std::cout
        #endif

            _tcout << drive << _T("  ") << (IsDriveSSD(drive)?_T("True") : _T("False")) << std::endl;
        }
    }

    delete[] buffer;

    return 0;
}
复制代码

 

输出:

C:\  True
D:\  False
E:\  False
F:\  False
G:\  True
H:\  True
I:\  True

 

posted @   bodong  阅读(242)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示