Windows DD-esque implementation in Qt 5
- by user1777667
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.