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; 
}