写了一个可以直接在Windows下读扇区到C盘文件里的工具:
#include
#include
#define SECTOR_SIZE 512
int main(int argc, _TCHAR* argv[])
{
if (argc < 2)
{
_tprintf(_T("Not enough parameters. \n"));
return 0;
}
// 创建保存数据的文件
int Sector = _ttoi(argv[1]);
TCHAR * FileName = new TCHAR[MAX_PATH];
_tcscpy_s(FileName, MAX_PATH, _T("C:\\"));
_tcscat_s(FileName, MAX_PATH, argv[1]);
_tcscat_s(FileName, MAX_PATH, _T(".bin"));
HANDLE FileHandle = CreateFile(FileName, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, 0, NULL);
delete[] FileName;
if (FileHandle == NULL)
{
_tprintf(_T("Create file failed: 0x%08X \n"), GetLastError());
return 0;
}
// 打开物理磁盘进行读取
HANDLE DiskHandle = CreateFile(_T("\\\\.\\PhysicalDrive0"), GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (DiskHandle == INVALID_HANDLE_VALUE)
{
_tprintf(_T("Open physical driver failed: 0x%08X \n"), GetLastError());
CloseHandle(FileHandle);
return 0;
}
// 移动到指定的位置并进行读取
SetFilePointer(DiskHandle, Sector * SECTOR_SIZE, NULL, FILE_BEGIN);
PBYTE Buffer = new BYTE[SECTOR_SIZE];
DWORD BytesReadWrote = 0;
ReadFile(DiskHandle, Buffer, SECTOR_SIZE, &BytesReadWrote, NULL);
// 将读出来的数据写到文件
WriteFile(FileHandle, Buffer, SECTOR_SIZE, &BytesReadWrote, NULL);
delete[] Buffer;
CloseHandle(DiskHandle);
CloseHandle(FileHandle);
_tprintf(_T("Succeed!\n"));
return 0;
}