Всем привет!! Если у когото есть на PC раздел ДОС и утилита DISKEDIT. Подскажите как выполнить следующее???: Отследить изменения в оглавлении каталога и таблице FAT при создании, удалении и восстановлении файлов?????
Оформление результатов: Отчет с подробным описанием динамики изменений в системной области диска при манипуляциях с файлами (создание, удаление и пр.).
Если кто то делал данную работу или кто знает каким еще способом можно сделать этот анализ, подскажите пожалуйста!!!!!! :'(
Это редактор диска, переделанный из выше приведенной проги:
...(Показать/Скрыть)
uses Crt; type Sector=array[0..511] of byte; CBlockType=record Sector:longint; Number:word; BufPtr:pointer; end; BPBRec=record BootRecPtr:array[1..3] of byte; OEMIDstr :array[1..8] of char; BytePerSec:word; SecPerClus:byte; ReservSecs:word; FATcopies :byte; RootItems :word; TotalSec16:word; Descriptor:byte; FATsectors:word; SecPerTrak:word; Heads :word; HideSector:longint; TotalSec32:longint; DiskNumber:word; Signature :byte; SerialNum :longint; VolumeLabel:array[1..11] of char; SystemIDstr:array[1..8] of char; end; var BootSector,sec:Sector; BPB:pointer; LastResult,DataOrg,Clusters:word; dr:char;
function Hex(x:byte):word; assembler; asm mov al,x; mov ah,al; shr ah,4; and al,0Fh; add ax,3030h; cmp al,39h; jna @1; add al,7; @1:cmp ah,39h; jna @2; add ah,7; @2: end; procedure ReadDisk32(Drive:byte; CB:pointer); assembler; asm push ds lds bx,CB mov al,Drive mov cx,-1 int 25h add sp,2 pop ds mov LastResult,ax xor ax,ax jc @e mov LastResult,ax @e: end; procedure ReadSectors(Drive:byte; S:longint; N:word; Buf:pointer); var CB:CBlockType; begin with CB do begin Sector:=S; Number:=N; BufPtr:=Buf; end; ReadDisk32(Drive,@CB); end; var i,j,y:byte; r:word; n:longint; k:char; ext:boolean; s:string[80]; m:array[0..159] of byte; begin textbackground(0); textcolor(7); clrscr; write('Диск: '); readln(dr); dr:=upcase(dr); ReadSectors(ord(dr)-65,0,1,@BootSector); writeln(LastResult); writeln('Загрузочный сектор диска ',dr,': (блок параметров BIOS)'); writeln; BPB:=@BootSector; with BPBRec(BPB^) do begin DataOrg:=ReservSecs+FATsectors*FATcopies+RootItems div 16; if secperclus=0 then clusters:=0 else Clusters:=2+(TotalSec32-DataOrg) div SecPerClus; writeln(' OEM ID: ',OEMIDstr); writeln(' Байт в секторе: ',BytePerSec); writeln(' Секторов в кластере: ',SecPerClus); writeln(' Резервных секторов: ',ReservSecs); writeln(' Кол-во копий FAT: ',FATcopies); writeln(' Элементов на корню: ',RootItems); writeln(' Секторов(до 65535): ',TotalSec16); writeln(' Дескриптор диска: ',Descriptor); writeln(' Секторов на FAT: ',FATsectors); writeln(' Секторов на дорожку: ',SecPerTrak); writeln(' Кол-во головок: ',Heads); writeln(' Скрытых секторов: ',HideSector); writeln(' Всего секторов: ',TotalSec32); writeln('Физический номер диска: ',DiskNumber); writeln(' Сигнатура загрузчика: ',Signature); writeln(' Серийный номер: ',SerialNum); writeln(' Метка тома: ',VolumeLabel); writeln(' System ID: ',SystemIDstr); writeln(' Первый сектор данных: ',DataOrg); writeln(' Всего кластеров: ',Clusters); r:=ReservSecs; end; writeln('Нажмите любую клавишу'); readkey; n:=0; y:=0; clrscr; writeln('Диск ',dr); ReadSectors(ord(dr)-65,n,1,@sec); repeat gotoxy(1,2); ClrEol; write('Текущий сектор: ',n); if n>=DataOrg then write(' (кластер: ',2+(n-DataOrg) div BPBRec(BPB^).SecPerClus,')'); gotoxy(1,25); write('F1-Информация F5-Сектор'); for i:=y to y+19 do begin s:='0'+chr(Hi(Hex(i)))+chr(Lo(Hex(i)))+'0 '; for j:=0 to 15 do begin s:=s+chr(Hi(Hex(sec[i*16+j])))+chr(Lo(Hex(sec[i*16+j]))); if (j=3) or (j=7) or (j=11) then s:=s+' - ' else s:=s+' '; end; s:=s+' '; for j:=0 to 15 do s:=s+chr(sec[i*16+j]); for j:=0 to 79 do begin if j<5 then mem[$B800:(3+i-y)*160+j*2+1]:=$3F else if j<64 then mem[$B800:(3+i-y)*160+j*2+1]:=$07 else mem[$B800:(3+i-y)*160+j*2+1]:=$1E; mem[$B800:(3+i-y)*160+j*2]:=ord(s[j+1]); end; end; k:=readkey; ext:=false; if k=#0 then begin ext:=true; k:=readkey; end; if (k='2') or (ext and (k=#80)) then if y<12 then inc(y); if (k='8') or (ext and (k=#72)) then if y>0 then dec(y); if (k='4') or (ext and (k=#75)) then if n>0 then begin dec(n); ReadSectors(ord(dr)-65,n,1,@sec); end; if (k='6') or (ext and (k=#77)) then if n<BPBRec(BPB^).TotalSec32 then begin inc(n); ReadSectors(ord(dr)-65,n,1,@sec); end; if ext and (k=#59) then begin textbackground(2); textcolor(15); gotoxy(25,10); writeln(' '); gotoxy(25,11); with BPBRec(BPB^) do writeln(' Сектор FAT (',FATcopies,'-х):',r:3,'-',(r+FATsectors*FATcopies-1):3,' '); gotoxy(25,12); with BPBRec(BPB^) do writeln(' Корневой каталог: ', (ReservSecs+FATsectors*FATcopies):3,'-',(DataOrg-1):3,' '); gotoxy(25,13); with BPBRec(BPB^) do writeln(' Первый кластер (№2): ',DataOrg:3,' '); gotoxy(25,14); writeln(' '); textbackground(0); textcolor(7); if readkey=#0 then readkey; end; if ext and (k=#63) then begin repeat gotoxy(1,2); ClrEol; write('Введите номер сектор (0-',BPBRec(BPB^).TotalSec32,'): '); readln(n); until (n>=0) and (n<=BPBRec(BPB^).TotalSec32); ReadSectors(ord(dr)-65,n,1,@sec); end; until k=#27; textbackground(0); textcolor(7); clrscr; end.