開源ext2read代碼走讀之-在windows下如何判斷有幾個硬碟裝置?

來源:互聯網
上載者:User

標籤:style   blog   http   os   io   檔案   ar   art   cti   


int get_ndisks()
{
    HANDLE hDevice;               // handle to the drive to be examined
    int ndisks = 0;
    char path[20] = {"\\\\.\\PhysicalDrive0"};

    do {
        //TRACE("NDISKS %s", path);
        hDevice = CreateFileA(path, // drive to open
                              GENERIC_READ, //access mode
                              FILE_SHARE_READ,  // share mode
                              NULL,    // default security attributes
                              OPEN_EXISTING,  // disposition
                              0,       // file attributes
                              NULL);   // don‘t copy any file‘s attributes
        if(hDevice != INVALID_HANDLE_VALUE)
            CloseHandle(hDevice);
        ndisks++;
        path[17] = (char)(‘0‘ + ndisks);
    }while(hDevice != INVALID_HANDLE_VALUE);

    return ndisks - 1;
}

其中,path為第一個硬碟的裝置名稱,ndisks的值則表示當前存在幾個硬碟;

do{}while();中的CreateFileA進行裝置的開啟,若返回值不為INVALID_HANDLE_VALUE則表示開啟成功,那麼則使ndisks+1,而path[17]則是硬碟裝置的序號中的第18個字元的值,在“\\\\.\\PhysicalDrive0”中對應的字元為0,因為“\\\\.\\PhysicalDrive0”通過轉義後的實際字串為:“\\.\PhysicalDrive0”。第一個硬碟的序號為0,第二個為1,依次累加之。

CreateFile這個函數可以建立或開啟一個對象的控制代碼,憑藉此控制代碼就可以控制這些對象:
控制台對象、通訊資來源物件、目錄對象(只能開啟)、磁碟裝置對象、檔案對象、郵槽對象、管道對象。

有關CreateFile Function的更具體的說明可進行MS的MSDN進行查詢。
中文介紹REC:
http://www.cnblogs.com/transcom/articles/1384946.html

開源ext2read代碼走讀之-在windows下如何判斷有幾個硬碟裝置?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.