Windows DD-esque implementation in Qt 5

Posted by user1777667 on Stack Overflow See other posts from Stack Overflow or by user1777667
Published on 2014-03-16T05:16:31Z Indexed on 2014/06/01 15:28 UTC
Read the original article Hit count: 226

Filed under:
|
|
|
|

I'm trying to get into Qt and as a project I want to try and pull a binary image from a hard drive in Windows. This is what I have:

QFile dsk("//./PhysicalDrive1");
dsk.open(QIODevice::ReadOnly);
QByteArray readBytes = dsk.read(512);
dsk.close();
QFile img("C:/out.bin");
img.open(QIODevice::WriteOnly);
img.write(readBytes);
img.close();

When I run it, it creates the file, but when I view it in a hex editor, it says:

ëR.NTFS    ..........ø..?.ÿ.€.......€.€.ÿç......UT..............ö.......ì§á.Íá.`....ú3ÀŽÐ¼.|ûhÀ...hf.ˈ...f.>..NTFSu.´A»ªUÍ.r..ûUªu.÷Á..u.éÝ..ƒì.h..´HŠ...‹ô..Í.ŸƒÄ.žX.rá;...uÛ£..Á.....Z3Û¹. +Èfÿ.......ŽÂÿ...èK.+Èwï¸.»Í.f#Àu-f.ûTCPAu$.ù..r..h.».hp..h..fSfSfU...h¸.fa..Í.3À¿(.¹Ø.üóªé_...f`..f¡..f.....fh....fP.Sh..h..´BŠ.....‹ôÍ.fY[ZfYfY..‚..fÿ.......ŽÂÿ...u¼..faàø.è.. û.è..ôëý´.‹ð¬<.t.´.»..Í.ëòÃ..A disk read error occurred...BOOTMGR is missing...BOOTMGR is compressed...Press Ctrl+Alt+Del to restart...Œ©¾Ö..Uª

Is there a better way of doing this? I tried running it as admin, but still no dice. Any help would be much appreciated.


Update:

I changed the code a bit. Now if I specify a dd images as the input it writes the image perfectly, but when I try to use a disk as the input it only writes 0x00.

QTextStream(stdout) << "Start\n";

QFile dsk("//./d:");
//QFile dsk("//./PhysicalDrive1");
//QFile dsk("//?/Device/Harddisk1/Partition0");
//QFile dsk("//./Volume{e988ffc3-3512-11e3-99d8-806e6f6e6963}");
//QFile dsk("//./Volume{04bbc7e2-a450-11e3-a9d9-902b34d5484f}");
//QFile dsk("C:/out_2.bin");
if (!dsk.open(QIODevice::ReadOnly))
    qDebug() << "Failed to open:" << dsk.errorString();
qDebug() << "Size:" << dsk.size() << "\n";

// Blank out image file
QFile img(dst);
img.open(QIODevice::WriteOnly);
img.write(0);
img.close();

// Read and write operations
while (!dsk.atEnd())
{
    QByteArray readBytes = dsk.readLine();
    qDebug() << "Reading: " << readBytes.size() << "\n";
    QFile img(dst);
    if (!img.open(QIODevice::Append))
        qDebug() << "Failed to open:" << img.errorString();
    img.write(readBytes);
}
QTextStream(stdout) << "End\n";

I guess the real problem I'm having is how to open a volume with QFile in Windows. I tried a few variants, but to no avail.

© Stack Overflow or respective owner

Related posts about c++

Related posts about qt