компьютерный форум
Вернуться   Компьютерный форум > Программирование и вебстроительство > Программирование

Ответ
 
LinkBack Опции темы Опции просмотра
Старый 06.05.2011, 17:30   #1
Пользователи
 
Регистрация: 06.05.2011
Сообщений: 4
По умолчанию

есть 100% рабочая прога -доступ к объектам файл сист FAT-
на Borlandc но она не находит у меня диски с FAT,и на вирт машине
под FAT тоже пробовал нет дисков
вот прога


#include
#include
#define byte unsigned char
#define word unsigned int
#define dword unsigned long
#define FAT(code) ((code==1)||(code==4)||(code==6)||(code==0xB)||(co de==0xC)||(code==0xE))
struct pt_elem
{
byte boot;
byte s_head;
word s_cylsect;
byte sys;
byte e_head;
word e_cylsect;
dword s_sect;
dword numsects;
};
struct mbr
{
byte bod[0x1BE];
pt_elem pt[4];
word _55aa;
};
struct batch
{
byte szbatch,rsrv;
word size;
dword buf,start_lo,start_hi;
dword dummy1,dummy2;
};
struct info
{
char letter;
byte hdd,basic,boot;
dword s_sect,numsects;
byte sys;
info *next;
info();
};
info::info()
{
letter=0;
next=NULL;
}
void init(info *el,char _l,byte _hdd,byte _bas,byte _boot,dword _s,dword _num,byte _sys)
{
el->letter=_l;
el->hdd=_hdd;
el->basic=_bas;
el->boot=_boot;
el->s_sect=_s;
el->numsects=_num;
el->sys=_sys;
el->next=NULL;
}
int read(void *buf,char hdd,dword addr_hi,dword addr_lo,word size)
{
batch req;
req.szbatch=sizeof(req);
req.rsrv=0;
req.size=size;
req.buf=(dword)((char far*)buf);
req.start_lo=addr_lo;
req.start_hi=addr_hi;
asm{
push ds
push ax
push dx
push si
mov ah,0x42
mov dl,hdd
mov si,ss
mov ds,si
lea si,req
int 0x13
pop si
pop dx
pop ax
pop ds
jc err
};
return 1;
err:return 0;
}
void main()
{
clrscr();
mbr buf[4];
byte used[4][4];
char cur='C';
info *list=new info();
info *cl=list;
for(byte hdd=0x80;hddnext,cur,hdd,1,1,buf[hdd-0x80].pt[pt].s_sect,buf[hdd-0x80].pt[pt].numsects,buf[hdd-0x80].pt[pt].sys);
cl=cl->next;
used[hdd-0x80][pt]=cur++;
found=1;
break;
}
else used[hdd-0x80][pt]=0;
}
if(!found)
{
for(int pt=0;ptnext=new info;
init(cl->next,cur,hdd,1,0,buf[hdd-0x80].pt[pt].s_sect,buf[hdd-0x80].pt[pt].numsects,buf[hdd-0x80].pt[pt].sys);
cl=cl->next;
used[hdd-0x80][pt]=cur++;
break;
}
}
}
}
for(hdd=0;hddnext,cur++,hdd+0x80,0,0,extbeg+mbri.p t[0].s_sect+add,mbri.pt[0].numsects,mbri.pt[0].sys);
cl=cl->next;
}
else
if(mbri.pt[0].sys)
{
cl->next=new info;
init(cl->next,'?',hdd+0x80,0,0,extbeg+mbri.pt[0].s_sect+add,mbri.pt[0].numsects,mbri.pt[0].sys);
cl=cl->next;
}
if((mbri.pt[1].sys==5)||(mbri.pt[1].sys==0xF))
{
add=mbri.pt[1].s_sect;
read(&mbri,hdd+0x80,0,extbeg+mbri.pt[1].s_sect,1);
end=0;
}
}
while(!end);
}
}
for(hdd=0;hddnext,cur++,hdd+0x80,1,0,buf[hdd].pt[pt].s_sect,buf[hdd].pt[pt].numsects,buf[hdd].pt[pt].sys);
cl=cl->next;
}
else
if((!used[hdd][pt])&&buf[hdd].pt[pt].sys&&!((buf[hdd].pt[pt].sys==5)||(buf[hdd].pt[pt].sys==0xF)))
{
cl->next=new info;
init(cl->next,'?',hdd+0x80,1,0,buf[hdd].pt[pt].s_sect,buf[hdd].pt[pt].numsects,buf[hdd].pt[pt].sys);
cl=cl->next;
}
}
cl=list->next;
info *tmp=list;
list=list->next;
delete tmp;
printf(" Drive Physical Location Partition Start Length File
");
printf("letter drive type address system
");
while(cl!=NULL)
{
printf(" %c %Xh %s %s %08ld %08ld %02X
",cl->letter,cl->hdd,cl->basic?"primary ":"extended",cl->boot?" boot ":" ",cl->s_sect,cl->numsects,cl->sys);
cl=cl->next;
info *tmp=list;
list=list->next;
delete tmp;
}
getch();
}




soad33 вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
06.05.2011, 17:30
Техник
реклама
По умолчанию

Старый 06.05.2011, 18:23   #2
V.I.P. Пользователи
 
Аватар для L@nken
 
Регистрация: 01.09.2006
Сообщений: 3,315
По умолчанию

В первых же словах Вы себе перечите.
1) Вы уверены, что у Вас есть диски с ФС FAT?
2) Программа точно работает правильно? Если она компилируется без ошибок - это ещё ничего не означает.
L@nken вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 06.05.2011, 18:52   #3
Пользователи
 
Регистрация: 06.05.2011
Сообщений: 4
По умолчанию

Цитата:
В первых же словах Вы себе перечите.
1) Вы уверены, что у Вас есть диски с ФС FAT?
2) Программа точно работает правильно? Если она компилируется без ошибок - это ещё ничего не означает.
1)да я создал 2 диска специально FAT.и в виртулке операционка тоже на FAT
2) эту прогу я взял со сданной работы там был скрин


программа запускается но в окне нет найденных дисков не находит
soad33 вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Старый 10.05.2011, 18:48   #4
V.I.P. Пользователи
 
Аватар для L@nken
 
Регистрация: 01.09.2006
Сообщений: 3,315
По умолчанию

Извиняюсь, что долго не отписывался.
На первый взгляд проблема в том, что Вы используете прерывание int13, скорей всего его нельзя использовать совместно с ХР.
Тут два варианта:
1) либо же запустить на более старой ОС;
2) либо же переписать заново используя GetVolumeInformation Function.
L@nken вне форума  
Digg this Post!Bookmark Post in Technorati
Ответить с цитированием
Ответ


Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Вкл.



Текущее время: 17:10. Часовой пояс GMT.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
Content Relevant URLs by vBSEO 3.5.0 RC2