使用CreateFile, ReadFile, WriteFile在Windows NT/2000/XP下讀寫絕對扇區的方法

來源:互聯網
上載者:User

也就是在CreateFile的時候開啟檔案名稱指定:  “//./Device”就可以了.

因為代碼比較短, 所以我不做注釋, 相信大家看代碼就能明白意思了.

另外這裡讀寫的都是磁碟片A盤第0扇區, 如果想讀寫其他的扇區, 那麼可以使用API SetFilePointer.

讀扇區的方法(下面的代碼示範從A盤的第0扇區讀出資料, 寫入到檔案BOOT.BIN中):

#include <windows.h>
#include <assert.h>
#include <stdio.h>

void main()
{
    HANDLE hFile;
    hFile = CreateFile("////.//A:",
                       GENERIC_READ,
                       FILE_SHARE_READ,
                       NULL,
                       OPEN_EXISTING,
                       0,
                       NULL);
    assert(hFile && "CreateFile failed!");

    PBYTE pBuffer = (PBYTE)malloc(512);
    assert(pBuffer && "Allocate memory failed!");
    DWORD dwLen;
    ReadFile(hFile, pBuffer, 512, &dwLen, NULL);
  
    FILE * fp;
    fp = fopen("boot.bin", "wb");
    assert(fp && "Open file failed!");
    fwrite(pBuffer, 512, 1, fp);
    fclose(fp);

    CloseHandle(hFile);

    free(pBuffer);
}

那麼相應的, 寫扇區的方法的就是這樣的咯(以下代碼示範從BOOT.BIN中讀出資料寫入到A盤第0扇區):

#include <windows.h>
#include <assert.h>
#include <stdio.h>

void main()
{
    HANDLE hFile;
    hFile = CreateFile("////.//A:",
                       GENERIC_WRITE,
                       FILE_SHARE_WRITE,
                       NULL,
                       OPEN_EXISTING,
                       0,
                       NULL);
    assert(hFile && "CreateFile failed!");

    PBYTE pBuffer = (PBYTE)malloc(512);
    assert(pBuffer && "Allocate memory failed!");
       
    FILE * fp;
    fp = fopen("boot.bin", "rb");
    assert(fp && "Open file failed!");
    fread(pBuffer, 512, 1, fp);
    fclose(fp);
   
    DWORD dwLen;
    WriteFile(hFile, pBuffer, 512, &dwLen, NULL);

    CloseHandle(hFile);

    free(pBuffer);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.