21xrx.com
2024-12-27 21:45:40 Friday
登录
文章检索 我的文章 写文章
如何使用C++获取硬盘序列号?
2023-07-05 09:08:24 深夜i     --     --
C++ 获取 硬盘序列号

对于C++开发者来说,获取硬盘序列号或其他硬件信息是一项非常重要的任务。在Windows操作系统下,可以通过“DeviceIoControl”函数来获取硬盘序列号。

以下是简单的C++代码示例,演示如何获取硬盘序列号:


#include <windows.h>

#include <winioctl.h>

// 函数:获取硬盘序列号

bool GetDiskSerialNumber(char* diskSerialNumber)

{

  HANDLE hDevice = NULL;

  STORAGE_PROPERTY_QUERY storageQuery = {0};

  STORAGE_DEVICE_DESCRIPTOR storageDescriptor = {0};

  DWORD dwBytesReturned = 0;

  bool bResult = false;

  // 打开物理磁盘

  hDevice = CreateFile("\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE,

             NULL, OPEN_EXISTING, 0, NULL);

  if (hDevice == INVALID_HANDLE_VALUE)

    return false;

  // 获取查询属性

  storageQuery.PropertyType = StorageDeviceProperty;

  storageQuery.QueryType = PropertyStandardQuery;

  memset(&storageDescriptor, 0, sizeof(storageDescriptor));

  // 发送请求获取属性

  bResult = DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &storageQuery, sizeof(storageQuery),

               &storageDescriptor, sizeof(storageDescriptor), &dwBytesReturned, NULL);

  if (bResult && (storageDescriptor.SerialNumberOffset > 0))

  {

    char* serialNumber = (char*)(&storageDescriptor) + storageDescriptor.SerialNumberOffset;

    memcpy(diskSerialNumber, serialNumber, 20);

    bResult = true;

  }

  else

  

    bResult = false;

  

  CloseHandle(hDevice);

  return bResult;

}

int main()

{

  char diskSerialNumber[20];

  if (GetDiskSerialNumber(diskSerialNumber))

    printf("Disk Serial Number: %s\n", diskSerialNumber);

  return 0;

}

这段代码使用CreateFile函数打开物理磁盘,并使用DeviceIoControl函数获取硬盘序列号。最后,如果获取成功,就将硬盘序列号打印出来。

需要注意的是,在实际应用中需要处理异常情况,例如打开磁盘失败,获取属性失败等等。同时,根据不同的操作系统和硬件,需要进行一些特定的处理。但上述代码可用作一个基本框架,可以使开发者更好地了解如何获取硬盘序列号。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复