很多情況下,我們在程序中需要獲知操作系統安裝在哪個分區上或者哪個物理磁盤上,進而對其進行一些操作或避免一些操作。例如要避免對系統磁盤分區表的刪除操作。本節討論如何獲取操作系統所在的邏輯分區號和物理驅動器號。
還是先上代碼。
/******************************************************************************
* 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函數即可獲得操作系統所在的物理磁盤號。