读取硬盘的字节数

时间:2013-12-22 01:47:26

标签: c++ windows hard-drive read-write

使用十六进制编辑器HxDen可以读取(和编辑)硬盘驱动器或USB密钥或RAM上的字节。也就是说,可以读取/更改硬盘上的第一个字节。

我理解如何read the bytes from a file using C++,但我想知道如何为硬盘执行此操作。

为简单起见,给定正整数n,如何使用C ++读取硬盘驱动器上的字节数n? (我想做C ++,但如果有更简单的方法,我想听听。)

如果重要的话,我在Windows 7上使用MinGW

1 个答案:

答案 0 :(得分:9)

MSDN Library中有关CreateFile的文章,“物理磁盘和卷”一节中有记录。这段代码很适合直接读取C:驱动器:

HANDLE hdisk = CreateFile(L"\\\\.\\C:", 
                          GENERIC_READ, 
                          FILE_SHARE_READ | FILE_SHARE_WRITE, 
                          nullptr, 
                          OPEN_EXISTING, 
                          0, NULL);
if (hdisk == INVALID_HANDLE_VALUE) {
    int err = GetLastError();
    // report error...
    return -err;
}

LARGE_INTEGER position = { 0 };
BOOL ok = SetFilePointerEx(hdisk, position, nullptr, FILE_BEGIN);
assert(ok);

BYTE buf[65536];
DWORD read;
ok = ReadFile(hdisk, buf, 65536, &read, nullptr);
assert(ok);
// etc..

需要管理员权限,您必须在Win7上运行程序,否则您将收到错误5(拒绝访问)。

相关问题