如何读取RAW磁盘的内容,然后在C ++中进一步写入?

时间:2017-06-16 10:56:36

标签: c++ windows memory filesystems disk

我想首先将某些内容写入磁盘设备,然后读取相同的数据并进一步写入。我的代码如下所示:

std::string devicePath = "\\\\.\\PhysicalDrive0"; //'0' is only example here
HANDLE source = CreateFile(disk.c_str(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, NULL, NULL);

    BOOST_TEST_REQUIRE(source, "Failed to create file handle.");

        std::unique_ptr<CHAR[]> primaryBuffer(new CHAR[DEFAULT_FILESIZE]);
        std::unique_ptr<CHAR[]> checkBuffer(new CHAR[DEFAULT_FILESIZE]);

        for (auto i = 0; i < DEFAULT_FILESIZE; ++i) {
            primaryBuffer[i] = 'x';
            checkBuffer[i] = ' ';
        }

        WriteFile(source, primaryBuffer.get(), DEFAULT_FILESIZE, NULL, NULL);

//Here I move the pointer to write data in new place.
        DWORD destination = SetFilePointer(source, DEFAULT_FILESIZE, NULL, FILE_BEGIN);           
        WriteFile(&destination, source, DEFAULT_FILESIZE, NULL, NULL);

        ReadFile(source, primaryBuffer.get(), DEFAULT_FILESIZE, NULL, NULL);
        ReadFile(&destination, checkBuffer.get(), DEFAULT_FILESIZE, NULL, NULL);

        BOOST_TEST_MESSAGE(checkBuffer.get());
        BOOST_TEST_MESSAGE(primaryBuffer.get());

不幸的是,两个缓冲区都不同,我几乎尝试了所有的东西来检查是什么问题。也许有人知道我做错了什么?

0 个答案:

没有答案