|
这个问题是在C++操作win下物理磁盘时发生的- void analyze_extended_partition(unsigned int sector_pre)
- {
- cout << sector_pre << endl;
- extended_partition_offset = sector_pre * BYTE_PER_SECTOR;
- cout << extended_partition_offset << endl;
-
- char buffer[512];
- ifstream in("\\\\.\\PHYSICALDRIVE0",ios::binary|ios::in);
- in.seekg(extended_partition_offset, ios::beg);
- in.read(buffer,sizeof(buffer));
- in.close();
- partition_table_struct partitions[4];
- if (analyze_partition_table(partitions, &buffer[0x1BE])){
- cout << "有效分区表" << endl;
- show_logic_partition(partitions[0]);
- if(partitions[1].partition_type_id != 0x00){
- analyze_logic_partition(partitions[1].sector_pre);
- }
- }else{
- cout << "无效分区表" << endl;
- }
- }
复制代码 我对扩展分区求物理偏移量(相对于0 Cylinder 0 Header 0 Sector),然后在偏移量处取512个Byte
逻辑分区的地址也是在该扩展分区的物理偏移量处累加,每次也是获取512个Byte
但是这个偏移量是非常大的,大概在10^11-10^12之间
而 in.seekg(extended_partition_offset, ios::beg);
的第一个参数是long型。
我用的unsigned long long int型表示的extended_partition_offset
但是这样传参后还是以long型运算的,结果是超出了...
有什么办法对超大便宜的文件进行读取?请各位指教。 |
|