windows - Sådan læser du noget til RAW disken og skriver det lidt videre i C ++?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne skrive noget til en diskenhed, så læs de samme data og skriv det videre. Min kode ser sådan ud:


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());


Desværre er begge buffere forskellige, og jeg har forsøgt næsten alt for at kontrollere, hvad der er forkert. Måske har nogen nogen ide om, hvad jeg gør galt?

Bedste reference