WNDOWS编程获取系统磁盘序号及硬件ID
2014-12-16 11:26
302 查看
编程中经常需要排除系统磁盘,如何实现?以下是一些基本概念。
1. 磁盘序号:在磁盘管理页面显示的磁盘0/1/2等,0、1、2即磁盘序号。
2. 磁盘硬件ID:设备管理器页面某设备右键->详细信息->硬件ID。
获取步骤:
1. 通过GetSystemDirectory)获取系统路径。
2. 通过DeviceIOControl获取磁盘序号。
3. 查看注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Disk\Enum,查找磁盘序号对应的磁盘硬件ID。
详细代码如下:
1. 磁盘序号:在磁盘管理页面显示的磁盘0/1/2等,0、1、2即磁盘序号。
2. 磁盘硬件ID:设备管理器页面某设备右键->详细信息->硬件ID。
获取步骤:
1. 通过GetSystemDirectory)获取系统路径。
2. 通过DeviceIOControl获取磁盘序号。
3. 查看注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Disk\Enum,查找磁盘序号对应的磁盘硬件ID。
详细代码如下:
//获取系统磁盘信息,包含系统磁盘序号、硬件ID。 //系统磁盘序号由函数返回,硬件ID以参数的形式获取。 //返回-1,代表函数失败。 int GetSysDiskInfo(char *pDiskHardID, int nBufLen) { int nDiskOrder = -1; HANDLE hDevice = INVALID_HANDLE_VALUE; DWORD nRealRead = 0; STORAGE_DEVICE_NUMBER sdnDisk; char sSystemDriveName[WIN_PATH_MAX_LEN]; //系统所在驱动器,一般为\\.\C:。 memset(&sdnDisk, 0, sizeof(STORAGE_DEVICE_NUMBER)); memset(sSystemDriveName, 0, sizeof(sSystemDriveName)); const char DiskEnumRegPath[] = "SYSTEM\\CurrentControlSet\\Services\\Disk\\Enum\\"; HKEY DiskEnumRegKey = NULL; if (NULL == pDiskHardID || nBufLen < 0) { goto END; } //获取系统盘符 sprintf_s(sSystemDriveName, sizeof(sSystemDriveName), "\\\\.\\"); GetSystemDirectory(sSystemDriveName + strlen(sSystemDriveName), sizeof(sSystemDriveName) - strlen(sSystemDriveName)); if (NULL == strchr(sSystemDriveName + strlen("\\\\.\\"), '\\')) { goto END; } *(strchr(sSystemDriveName + strlen("\\\\.\\"), '\\')) = 0; //获取系统磁盘序号 if ((hDevice = CreateFile(sSystemDriveName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE || 0 == DeviceIoControl(hDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, &sdnDisk, sizeof(sdnDisk), &nRealRead, NULL)) { goto END; } //磁盘序号转换成字符串 memset(sSystemDriveName, 0, sizeof(sSystemDriveName)); itoa(sdnDisk.DeviceNumber, sSystemDriveName, 10); if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, DiskEnumRegPath, 0, KEY_READ, &DiskEnumRegKey) || ERROR_SUCCESS != RegQueryValueEx(DiskEnumRegKey, sSystemDriveName, NULL, NULL, (LPBYTE)pDiskHardID, (LPDWORD)&nBufLen)) { goto END; } nDiskOrder = sdnDisk.DeviceNumber; END: if (hDevice != INVALID_HANDLE_VALUE) { CloseHandle(hDevice); } if (DiskEnumRegKey != NULL) { RegCloseKey(DiskEnumRegKey); } return nDiskOrder; }
相关文章推荐
- UWP 应用获取各类系统、用户信息 (2) - 商店授权信息、零售演示模式信息、广告 ID、EAS 设备信息、硬件识别信息、移动网络信息
- C#编程获取客户端计算机硬件及系统信息功能示例
- linux dmidecode 获取CPU ID等系统硬件信息
- UWP 应用获取各类系统、用户信息 (2) - 商店授权信息、零售演示模式信息、广告 ID、EAS 设备信息、硬件识别信息、移动网络信息
- [Qt]获取Mac系统的有效网卡和序列号及硬件ID等信息(
- JavaScript 获取客户端计算机硬件及系统信息
- JavaScript 获取客户端计算机硬件及系统信息
- 获得计算CPU,网卡硬件地址,获取硬盘ID
- C# 获取机器的硬件信息(CPU ID序列号, 主板信息,硬盘序列号,系统信息)
- .NET中获取系统硬件信息
- JavaScript 获取客户端计算机硬件及系统信息
- asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
- 获取硬件的ID
- JavaScript 获取客户端计算机硬件及系统信息
- JavaScript 获取客户端计算机硬件及系统信息
- JavaScript 获取客户端计算机硬件及系统信息
- JavaScript 获取客户端计算机硬件及系统信息
- 通过编程获取Solaris的系统信息
- VB中使用WMI获取系统硬件和软件有关信息
- Java 程序获取系统硬件信息之网卡MAC地址