下文转载自http://blog.51cto.com/cutebunny/624609
很多情况下,我们在程序中需要获知操作系统安装在哪个分区上或者哪个物理磁盘上,进而对其进行一些操作或避免一些操作。例如要避免对系统磁盘分区表的删除操作。本节讨论如何获取操作系统所在的逻辑分区号和物理驱动器号。
还是先上代码。
/******************************************************************************* Function: get the number of disk which the system installed on* input: N/A* output: N/A* return: Succeed, disk number* Fail, -1******************************************************************************/DWORD GetSystemDiskPhysicalNumber(void){CHAR sysPath[DISK_PATH_LEN];CHAR diskLetter;DWORD diskNumber;DWORD ret = GetSystemDirectory(sysPath, sizeof(sysPath));if (ret == 0){fprintf(stderr, "GetSystemDirectory() Error: %ld\n", GetLastError());return (DWORD)-1;}diskLetter = sysPath[0];diskNumber = GetPhysicalDriveFromPartitionLetter(diskLetter);return diskNumber;}
代码分析:
1.
先调用
GetSystemDirectory
函数获取windows
路径。
sysPath
中存储的路径形式为C:\WINDOWS\system32
。
2.
截取
sysPath
字符串的第一个字符,即可获得系统所在的分区盘符。
3.
根据逻辑分区号,调用第四节http://cutebunny.blog.51cto.com/301216/624379中讨论的
GetPhysicalDriveFromPartitionLetter
函数即可获得操作系统所在的物理磁盘号。