读取硬盘扇区的数据
2010-01-08 21:14
387 查看
/* * Author: Leng_que * Date: 2010年1月8日 * E-mail: leng_que@yahoo.com.cn * Description: 读取指定的某个扇区的内容 */ #include <Windows.h> #include <WinIoCtl.h> #include <stdio.h> #include <conio.h> //功能:读取第dw64Index个扇区的内容 int ReadSector(DWORD64 dw64Index) { if ( dw64Index<=0 ) { //非法参数:参数太小 return -1; } HANDLE hDevice = CreateFile( "////.//PHYSICALDRIVE0", //第0号物理驱动器,即:第一块硬盘 GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if ( hDevice==INVALID_HANDLE_VALUE ) { //CreateFile出错 return -2; } DWORD dwBytesReturned=0; //锁定卷 DeviceIoControl( hDevice, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, (LPOVERLAPPED)NULL ); //获取每扇区字节数信息 DISK_GEOMETRY Geometry={0}; DeviceIoControl( hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &Geometry, sizeof(DISK_GEOMETRY), &dwBytesReturned, (LPOVERLAPPED)NULL ); DWORD dwBytesPerSector = Geometry.BytesPerSector; DWORD64 dw64AllSectorCount = DWORD64(Geometry.Cylinders.QuadPart*Geometry.TracksPerCylinder*Geometry.SectorsPerTrack); if ( dw64Index > dw64AllSectorCount ) { //非法参数:参数太大 return -12; } //分配进程中的内存堆 PBYTE pbBuff=NULL; pbBuff = (PBYTE)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytesPerSector); if ( pbBuff==NULL ) { //HeapAlloc出错 return -3; } //读取指定扇区内容 DWORD dwNumberOfBytesRead=0; DWORD64 dw64Pos = (dw64Index-1)*(DWORD64)dwBytesPerSector; LARGE_INTEGER li; li.QuadPart = dw64Pos; SetFilePointer(hDevice, li.LowPart, &li.HighPart, FILE_BEGIN); int iRet = ReadFile(hDevice, pbBuff, dwBytesPerSector, &dwNumberOfBytesRead, NULL); if ( iRet==FALSE || dwNumberOfBytesRead<dwBytesPerSector ) { //ReadFile出错 return -4; } //输出结果 for (DWORD n=0; n<dwBytesPerSector; ++n) { printf("0x%02X ", pbBuff ); } //释放之前分配的堆 HeapFree(GetProcessHeap(), NULL, pbBuff); pbBuff = NULL; //解锁卷 DeviceIoControl( hDevice, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, NULL ); CloseHandle(hDevice); return 0; } int main(void) { //读取第1个扇区的内容(也就是MBR的内容) ReadSector(1); getch(); return 0; }
下面是在本人的计算机上运行的结果:
0x33 0xC0 0x8E 0xD0 0xBC 0x00 0x7C 0xFB 0x50 0x07 0x50 0x1F 0xFC 0xBE 0x1B 0x7C 0xBF 0x1B 0x06 0x50 0x57 0xB9 0xE5 0x01 0xF3 0xA4 0xCB 0xBD 0xBE 0x07 0xB1 0x04 0x38 0x6E 0x00 0x7C 0x09 0x75 0x13 0x83 0xC5 0x10 0xE2 0xF4 0xCD 0x18 0x8B 0xF5 0x83 0xC6 0x10 0x49 0x74 0x19 0x38 0x2C 0x74 0xF6 0xA0 0xB5 0x07 0xB4 0x07 0x8B 0xF0 0xAC 0x3C 0x00 0x74 0xFC 0xBB 0x07 0x00 0xB4 0x0E 0xCD 0x10 0xEB 0xF2 0x88 0x4E 0x10 0xE8 0x46 0x00 0x73 0x2A 0xFE 0x46 0x10 0x80 0x7E 0x04 0x0B 0x74 0x0B 0x80 0x7E 0x04 0x0C 0x74 0x05 0xA0 0xB6 0x07 0x75 0xD2 0x80 0x46 0x02 0x06 0x83 0x46 0x08 0x06 0x83 0x56 0x0A 0x00 0xE8 0x21 0x00 0x73 0x05 0xA0 0xB6 0x07 0xEB 0xBC 0x81 0x3E 0xFE 0x7D 0x55 0xAA 0x74 0x0B 0x80 0x7E 0x10 0x00 0x74 0xC8 0xA0 0xB7 0x07 0xEB 0xA9 0x8B 0xFC 0x1E 0x57 0x8B 0xF5 0xCB 0xBF 0x05 0x00 0x8A 0x56 0x00 0xB4 0x08 0xCD 0x13 0x72 0x23 0x8A 0xC1 0x24 0x3F 0x98 0x8A 0xDE 0x8A 0xFC 0x43 0xF7 0xE3 0x8B 0xD1 0x86 0xD6 0xB1 0x06 0xD2 0xEE 0x42 0xF7 0xE2 0x39 0x56 0x0A 0x77 0x23 0x72 0x05 0x39 0x46 0x08 0x73 0x1C 0xB8 0x01 0x02 0xBB 0x00 0x7C 0x8B 0x4E 0x02 0x8B 0x56 0x00 0xCD 0x13 0x73 0x51 0x4F 0x74 0x4E 0x32 0xE4 0x8A 0x56 0x00 0xCD 0x13 0xEB 0xE4 0x8A 0x56 0x00 0x60 0xBB 0xAA 0x55 0xB4 0x41 0xCD 0x13 0x72 0x36 0x81 0xFB 0x55 0xAA 0x75 0x30 0xF6 0xC1 0x01 0x74 0x2B 0x61 0x60 0x6A 0x00 0x6A 0x00 0xFF 0x76 0x0A 0xFF 0x76 0x08 0x6A 0x00 0x68 0x00 0x7C 0x6A 0x01 0x6A 0x10 0xB4 0x42 0x8B 0xF4 0xCD 0x13 0x61 0x61 0x73 0x0E 0x4F 0x74 0x0B 0x32 0xE4 0x8A 0x56 0x00 0xCD 0x13 0xEB 0xD6 0x61 0xF9 0xC3 0x49 0x6E 0x76 0x61 0x6C 0x69 0x64 0x20 0x70 0x61 0x72 0x74 0x69 0x74 0x69 0x6F 0x6E 0x20 0x74 0x61 0x62 0x6C 0x65 0x00 0x45 0x72 0x72 0x6F 0x72 0x20 0x6C 0x6F 0x61 0x64 0x69 0x6E 0x67 0x20 0x6F 0x70 0x65 0x72 0x61 0x74 0x69 0x6E 0x67 0x20 0x73 0x79 0x73 0x74 0x65 0x6D 0x00 0x4D 0x69 0x73 0x73 0x69 0x6E 0x67 0x20 0x6F 0x70 0x65 0x72 0x61 0x74 0x69 0x6E 0x67 0x20 0x73 0x79 0x73 0x74 0x65 0x6D 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x2C 0x44 0x63 0x0F 0x1A 0x94 0x8A 0x00 0x00 0x80 0x01 0x01 0x00 0x07 0xFE 0xFF 0xFF 0x3F 0x00 0x00 0x00 0xFC 0x8A 0x38 0x01 0x00 0xFE 0xFF 0xFF 0x0F 0xFE 0xFF 0xFF 0x3B 0x8B 0x38 0x01 0x86 0xFF 0x68 0x11 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x55 0xAA
相关文章推荐
- 读取硬盘的第一扇区数据(MBR+DPT+Signature)
- linux读取硬盘指定扇区
- CPU怎样读取硬盘上的数据的?
- FindFirstStore函数 按扇区读取Windows Mobile的数据
- linux读取硬盘指定扇区
- mysql 读取硬盘数据
- FindFirstStore函数 按扇区读取Windows Mobile的数据
- 按扇区读取Windows Mobile的数据
- babyos (十) —— 通过IO端口读取硬盘扇区
- 直接读取硬盘扇区
- 设置错误无法读取硬盘数据
- 磁盘扇区数据的读取和写入
- 服务器换了一组硬盘后,读取不到硬盘数据,开不了机
- 按扇区读取Windows Mobile的数据
- windows sdk编程系列文章 --- 直接从硬盘扇区读取文件内容
- 操作系统以外的硬盘空间-利用DOS/WINDOWS9X的隐含扇区保护数据 - 企鹅人生 - CSDNBlog
- linux 上挂载硬盘或者读取u盘数据
- 读取硬盘的MBR引导扇区(Windows各系统通用)
- 用session打开url读取简单的数据
- c# 读取XML数据