www.pudn.com > ReadHddSector.zip > ReadSector.c
#include#include #include #include #include //以下是读取硬盘扇区函数 int ReadPhysicalSector(unsigned long SectorStart, unsigned long SectorCount, unsigned char *p) { unsigned long BytesPerSector = 512; unsigned long nBytes; char Drive[] = "\\\\.\\PHYSICALDRIVE0"; int result = 0; HANDLE hDeviceHandle = CreateFile(Drive,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,0); if(hDeviceHandle) { long pointer; long phigh; pointer = SectorStart; pointer = pointer*BytesPerSector; phigh = pointer>>32; SetFilePointer(hDeviceHandle,(unsigned long)pointer,&phigh,FILE_BEGIN); if(ReadFile(hDeviceHandle,p,SectorCount*BytesPerSector,&nBytes,NULL)) result = 1; CloseHandle(hDeviceHandle); } return result; } //主函数调用 int main(int argc, char* argv[]) { unsigned long SectorStart = 0; //比如我要读的是编号为的那个扇区开始的数据,这里写 //如果读的是从第扇区开始后的数据这里就写 unsigned long SectorCount = 1; //读多少个扇区,这里是个 unsigned char p[512]; //一个扇区数据量是字节呀 int i; ReadPhysicalSector(SectorStart,SectorCount,p); //输出的 for(i=0;i<512;i++) { printf("%02X ",p[i]); if(i%26 == 0) { printf(" "); } } return 0; }