使用ReadFile读取整个PhysicalDrive内容

时间:2014-10-09 18:06:07

标签: c winapi

我是C的新手,我正在尝试编写一个小应用程序,它将读取驱动器的整个原始内容。

这是我的代码;

int main(int argc, char *argv[]) {
    HANDLE hFile;
    DWORD dwBytesRead;
    char buff[512];

    hFile = CreateFile("\\\\.\\PhysicalDrive2", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);

    if(hFile == INVALID_HANDLE_VALUE){
        printf("%d",GetLastError());
        return;
    }

    SetFilePointer(hFile, 512*0, NULL, FILE_BEGIN);
    ReadFile(hFile, buff, 512, &dwBytesRead, NULL);
    CloseHandle(hFile);

    return 0;
}

如何将ReadFile放入循环中以读取驱动器上的所有数据?我最终需要将缓冲区的内容保存到磁盘。

由于

1 个答案:

答案 0 :(得分:2)

循环可能如下所示:

hFile = CreateFile(...);
if (hFile == INVALID_HANDLE_VALUE)
{
    // handle error
}

while (true)
{
    unsigned char buff[32768]; // needs to be a multiple of sector size
    DWORD dwBytesRead;
    if (!ReadFile(hFile, buff, sizeof buff, &dwBytesRead, NULL))
    {
        // handle error
    }
    if (dwBytesRead == 0)
    {
        break; // we reached the end
    }
    // do something with the dwBytesRead that were read
}

CloseHandle(hFile);