查询硬盘序号总结

文章介绍了查询硬盘序列号的几种方法,包括使用WMI命令行、DeviceIoControl函数、Smartmontools工具以及CrystalDiskInfo软件。提供了相关代码示例和资源链接,强调了获取硬盘序列号的复杂性。
摘要由CSDN通过智能技术生成

查询硬盘序号总结

问题描述

刚开始获取硬件信息的时候找了很多方法,但最终效果并不是特别好,直到现在找到了可靠的方法,现在总结下来,希望你能在这里得到一些思路。

查询硬盘序号的方法

正确的序列号,使用软件CrystalDiskInfo或者AIDA64可以查询到。
CrystalDiskInfo
AIDA64

一、WMI

这两种方式应该没有太大区分

  • WMI命令行
wmic diskdrive get serialnumber

效果:
wmic

  • WQL工具
    WQL

二、DeviceIoControl

参考链接,以下是部分代码,不完全。

/************************************************************************
GetHDSerial:用于获取指定编号的硬盘序列号,无需任何权限提升
参数:
PCHAR pszIDBuff:传入的字符串缓冲区,用于接收硬盘序列号
int nBuffLen:传入的字符串缓冲区大小,当硬盘序列号大于该值时,只复制nBuffLen长度
int nDriveID:要获取的驱动器编号,从0开始,到15为止
返回值:
成功获取到的硬盘序列号长度,为0表示获取失败
作者:
famous214(blog.csdn.net/LPWSTR)
源码参考了diskid32(https://www.winsim.com/diskid32/diskid32.html)
版本历史:
20171226 第一版,从diskid32源码中提取
20171226 第二版,兼容Unicode编译方式
20171230 重构后发布第三版
************************************************************************/
ULONG GetHDSerial(PCHAR pszIDBuff, int nBuffLen, int nDriveID)
{
    HANDLE hPhysicalDrive = INVALID_HANDLE_VALUE;
    ULONG ulSerialLen = 0;
    __try
    {
        //  Try to get a handle to PhysicalDrive IOCTL, report failure
        //  and exit if can't.
        TCHAR szDriveName[32];
        wsprintf(szDriveName, TEXT("\\\\.\\PhysicalDrive%d"), nDriveID);

        //  Windows NT, Windows 2000, Windows XP - admin rights not required
        hPhysicalDrive = CreateFile(szDriveName, 0,
            FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
            OPEN_EXISTING, 0, NULL);
        if (hPhysicalDrive == INVALID_HANDLE_VALUE)
        {
            __leave;
        }
        STORAGE_PROPERTY_QUERY query;
        DWORD cbBytesReturned = 0;
        static char local_buffer[10000];

        memset((void*)&query, 0, sizeof(query));
        query.PropertyId = StorageDeviceProperty;
        query.QueryType = PropertyStandardQuery;

        memset(local_buffer, 0, sizeof(local_buffer));

        if (DeviceIoControl(hPhysicalDrive, IOCTL_STORAGE_QUERY_PROPERTY,
            &query,
            sizeof(query),
            &local_buffer[0],
            sizeof(local_buffer),
            &cbBytesReturned, NULL))
        {
            STORAGE_DEVICE_DESCRIPTOR* descrip = (STORAGE_DEVICE_DESCRIPTOR*)&local_buffer;
            char serialNumber[1000];

            flipAndCodeBytes(local_buffer,
                descrip->SerialNumberOffset,
                1, serialNumber);

            if (isalnum(serialNumber[0]))
            {
                ULONG ulSerialLenTemp = strnlen(serialNumber, nBuffLen - 1);
                memcpy(pszIDBuff, serialNumber, ulSerialLenTemp);
                pszIDBuff[ulSerialLenTemp] = NULL;
                ulSerialLen = ulSerialLenTemp;
                __leave;
            }

        }
    }
    __finally
    {
        if (hPhysicalDrive != INVALID_HANDLE_VALUE)
        {
            CloseHandle(hPhysicalDrive);
        }
        return ulSerialLen;
    }
}


void GetAllHDSerial(void)
{
    const int MAX_IDE_DRIVES = 16;
    static char szBuff[0x100];
    for (int nDriveNum = 0; nDriveNum < MAX_IDE_DRIVES; nDriveNum++)
    {
        ULONG ulLen = GetHDSerial(szBuff, sizeof(szBuff), nDriveNum);
        if (ulLen > 0)
        {
            std::cout << nDriveNum + 1 << "," << szBuff << endl;
            // _tprintf(TEXT("第%d块硬盘的序列号为:%hs\n"), nDriveNum + 1, szBuff);
        }

    }
}

效果:
win32

三、Smartmontools

这个工具是监控硬盘用的,里面包含了硬件信息我顺便拿过来测试了下,开源有代码,以命令行的形式还是可能用在程序里面的,主页
SmartCtrl

四、CrystalDiskInfo

没想到这个软件也是可以下到源代码的,主页

查看了内部实现的代码,本质上也就是DeviceIoControl+WQL的方式再把硬盘的序列号提取再拼凑起来的,这时才明白过来看似简单的得到硬盘序号并没有想象的那么简单。

相关代码已上传,
下载地址:https://www.123pan.com/s/R0XNjv-QwxGd.html提取码:6666

DiskInfoExtend

最后

感谢各位大佬的无私奉献。

### 回答1: 要查看SSD-Z中的固态硬盘颗粒,首先需要下载并安装SSD-Z软件。安装完成后,打开软件并选择要查询的固态硬盘。 在软件主界面的"SSD"选项卡中,您将看到包含固态硬盘的详细信息的列表。在列表中找到您要查询的固态硬盘,并点击该项。 接下来,在右侧的详细信息窗口中,您可以看到各种信息,包括固态硬盘的型号、容量、Firmware版本以及制造商等。要查看固态硬盘颗粒的信息,您需要查找“Flash”的相关部分。 在“Flash”部分下,您将看到有关固态硬盘颗粒的详细信息,包括颗粒类型、容量、数量等。SSD-Z通常以16个颗粒为一个组,并显示组的数量。您可以通过阅读这些信息来了解固态硬盘中颗粒的相关情况。 此外,SSD-Z还提供了其他有关固态硬盘的信息,如固态硬盘的温度、健康状况、读写速度等。您可以利用这些信息来了解固态硬盘的性能和使用情况。 总的来说,要查看SSD-Z中固态硬盘颗粒的信息,您需要安装并打开SSD-Z软件,选择要查询的固态硬盘,然后在详细信息窗口中找到“Flash”部分,以查看颗粒的相关信息。 ### 回答2: 要查找SSD-Z的固态硬盘颗粒,可以按照以下步骤进行: 1. 在计算机上下载并安装SSD-Z软件。这是一款专门用于查看固态硬盘信息的工具,可以从SSD-Z官方网站或其他可信的软件下载网站获取。 2. 打开SSD-Z软件。一般情况下,软件会自动扫描并显示计算机上连接的所有固态硬盘的信息。 3. 在软件界面上,可以看到各种硬盘的详细信息,包括制造商、型号、容量等。找到你要查找颗粒的固态硬盘,并点击该硬盘的详细信息。 4. 在硬盘的详细信息页面上,可以看到更多关于这个固态硬盘的信息,包括固件版本、健康状态、温度等。 5. 在硬盘详细信息页面中,可能还有一个“芯片”或“NAND”选项,点击这个选项可以查看固态硬盘的颗粒信息。这个选项会显示固态硬盘使用的闪存颗粒的制造商、序列号等相关信息。 6. 根据这些信息,你可以了解到你的固态硬盘所使用的颗粒制造商和其他相关细节。 需要注意的是,SSD-Z软件的界面可能会因不同的版本而有所差异,但基本上都会提供以上的信息。另外,有些固态硬盘可能不会公开显示颗粒信息,或者这些信息可能没有在软件中提供。 ### 回答3: 查找固态硬盘(SSD)使用的闪存颗粒主要有两种方法:通过固态硬盘的规格表和通过软件工具。 第一种方法是通过参考所购买的固态硬盘的规格表。在规格表中,制造商通常会提供有关硬盘内部闪存颗粒的详细信息。您可以查看固态硬盘的型号、闪存容量、制造商、型号和制造工艺等信息。这将帮助您了解固态硬盘使用的闪存颗粒类型和规格。 另一种方法是使用可用的软件工具来查找固态硬盘中的闪存颗粒信息。有一些第三方软件工具可以帮助您查看固态硬盘的详细信息,包括闪存颗粒类型。例如,CrystalDiskInfo是一款常用的硬盘信息查看工具,通过该工具您可以获取固态硬盘的详细信息,包括闪存颗粒型号和制造工艺等。 需要注意的是,使用第三方软件工具查看固态硬盘信息时,请确保从可信赖的来源下载,并且仔细阅读并理解软件供应商的条款和隐私政策。 总结起来,查找固态硬盘使用的闪存颗粒可以通过参考规格表和使用软件工具两种方法来实现。这些方法将帮助您确定固态硬盘的闪存颗粒型号、制造商和其他相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值