Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
#ifdef DEBUG
printf("Signature - 0x%X ", sign);
#endif
if(sign != SIGNATURE) return -1;
return 0;
}
Функция чтения расширенной таблицы разделов:
void read_ext_ptable(int hard, __u64 seek)
{
int num = 4; // начиная с этой позиции, массив структур pt_t будет заполняться информацией о логических дисках
__u8 smbr[512];
Входные данные:
n hard – дескриптор файла устройства;
n seek – смещение к расширенному разделу от начала диска (в байтах).
Для получения информации о логических дисках организуем цикл:
for(;;num++) {
Считываем SMBR, находящуюся по смещению seek от начала диска:
memset((void *)smbr, 0, 512);
pread64(hard, smbr, 512, seek);
Заполняем два элемента таблицы pt_t, начиная с позиции num. Первый элемент будет указывать на логический диск, а второй – на следующую структуру SMBR:
memset((void *)&pt_t[num], 0, PT_SIZE * 2);
memcpy((void *)&pt_t[num], smbr + 0x1BE, PT_SIZE * 2);
Вносим поправку в поле «Номер начального сектора» – отсчет ведется от начала диска:
pt_t[num].sect_before += (seek / 512);
Если код типа раздела равен нулю, то больше логических дисков нет:
if(!(pt_t[num + 1].type_part)) break;
Вычисляем смещение к следующему SMBR:
seek = ((__u64)(pt_t[num].sect_before + pt_t[num].sect_total)) * 512;
}
return;
}
Функция show_pt_info() отображает информацию о найденных логических дисках на устройстве:
void show_pt_info()
{
int i = 0, n;
#ifdef DEBUG
printf("Число разделов на диске - %d ", PART_NUM);
#endif
for(; i < MAX_PART; i++) {
if(!pt_t[i].type_part) break;
printf(" Тип раздела %d - ", i);
for(n = 0; n < PART_NUM; n++) {
if(pt_t[i].type_part == i386_sys_types[n].part_type) {
printf("%s ", i386_sys_types[n].part_name);
break;