首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言實現硬盤分區的工程化方案:調用系統工具而非直接寫扇區

     編輯:程式設計綜合問答

不可行路徑

Windows 內核禁止用戶態進程直接讀寫磁盤扇區(CreateFile("\\\\.\\PhysicalDrive0") 需管理員權限且受寫保護),直接操作極易導致數據損壞、系統崩潰。

推薦方案:調用 diskpart

#include 
#include 

bool createPartition(const char* disk, int sizeMB, char driveLetter) {
    char script[512];
    sprintf(script,
        "select disk %s\n"
        "create partition primary size=%d\n"
        "format fs=ntfs quick\n"
        "assign letter=%c\n",
        disk, sizeMB, driveLetter);
    
    FILE* fp = fopen("part_script.txt", "w");
    fputs(script, fp); fclose(fp);
    
    STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION pi;
    char cmd[260];
    sprintf(cmd, "diskpart /s part_script.txt");
    if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
        return false;
    WaitForSingleObject(pi.hProcess, INFINITE);
    DWORD exitCode; GetExitCodeProcess(pi.hProcess, &exitCode);
    CloseHandle(pi.hProcess); CloseHandle(pi.hThread);
    return exitCode == 0;
}

關鍵點

  • 生成臨時腳本文件,避免命令行長度限制與轉義問題。
  • 使用 CreateProcess 隱藏窗口(si.wShowWindow = SW_HIDE)。
  • 檢查返回碼,解析 diskpart 輸出獲取詳細錯誤信息。
  • 生產環境建議使用 WMI (Win32_DiskPartition) 或 Storage Management API 獲得更豐富的控制。

diskpart 官方文檔

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved