WNDOWS编程获取系统磁盘序号及硬件ID
来源:互联网 发布:宝德网络江西分公司 编辑:程序博客网 时间:2024/06/05 21:55
编程中经常需要排除系统磁盘,如何实现?以下是一些基本概念。
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;}
0 0
- WNDOWS编程获取系统磁盘序号及硬件ID
- [Qt]获取Mac系统的有效网卡和序列号及硬件ID等信息(
- windows 下查看服务器序号 硬件序号 服务器ID
- 获取硬件的ID
- Linux 获取系统及硬件环境总结
- wndows系统文件
- VISUAL C++ 系统及硬件编程
- android 获取硬件的ID
- python win系统获取磁盘及文件夹大小
- C#获取当前计算机的硬件及系统信息
- 获取系统硬件信息
- 获取系统硬件信息
- 获取系统硬件信息
- 获取系统硬件信息
- 获取系统硬件信息
- 用WMI获取磁盘硬件信息
- C# 获取机器的硬件信息(CPU ID序列号, 主板信息,硬盘序列号,系统信息)
- 获取机器的硬件信息(CPU ID序列号, 主板信息,硬盘序列号,系统信息)
- 在目录下查找某内容
- 第三周编程作业1-奇偶个数
- linux内核mount系统调用源码分析
- mvvm+DataSet使编程变得简单
- 61条Java面向对象设计的经验原则
- WNDOWS编程获取系统磁盘序号及硬件ID
- linux获取时间和时区函数
- 某银行高级软件需求分析师内训圆满结束!
- 正确设置 php-fpm子进程用户 提高网站安全性 防止被挂木马
- C/C++基本数据类型所占字节数
- 模拟浏览器、屏幕大小和 GPS 位置
- BZOJ 2820 YY的GCD 莫比乌斯反演
- 接触core dump
- 为什么Android系统需要使用C、C++和Java语言共同开发