-2
我对C相当陌生,而且我正试图编写一个小应用程序来读取驱动器的全部原始内容。使用ReadFile读取整个PhysicalDrive内容
这是我的代码;
int main(int argc, char *argv[]) {
HANDLE hFile;
DWORD dwBytesRead;
char buff[512];
hFile = CreateFile("\\\\.\\PhysicalDrive2", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);
if(hFile == INVALID_HANDLE_VALUE){
printf("%d",GetLastError());
return;
}
SetFilePointer(hFile, 512*0, NULL, FILE_BEGIN);
ReadFile(hFile, buff, 512, &dwBytesRead, NULL);
CloseHandle(hFile);
return 0;
}
如何将ReadFile放入循环以读取驱动器上的所有数据?我最终需要将缓冲区的内容保存到磁盘。
感谢
看从'ReadFile'的返回值。 “如果函数成功,返回值为非零(TRUE),如果函数失败或异步完成,则返回值为零(FALSE)。要获得扩展的错误信息,请调用GetLastError函数。 – chux 2014-10-09 19:12:28
只有在驱动器上没有安装有文件系统的卷时才能执行此操作。在现代版本的Windows上,无法通过“PhysicalDrive”设备访问由文件系统占用的块。即使有管理员权限。 – 2014-10-09 21:37:40
@BenVoigt只是为了澄清,管理员阅读任何地方都没有限制。写入安装卷声明的区域在NT6上被阻止。 – 2014-10-09 22:48:22