Показать загрузочную запись визуально
Falk0ner, вс, 06/07/2008 - 15:34.
Показать загрузочную запись визуально
{$S-,R-,B-}
unit uBoot;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, tlHelp32, ExtCtrls, FileCtrl, ComCtrls,
StdCtrls, Grids, Menus, shellApi,UFAT, ToolWin;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
Drive1: TMenuItem;
ScrollBar1: TScrollBar;
Panel2: TPanel;
Boot32Grid: TStringGrid;
procedure Boot32GridDrawCell(Sender: TObject; ACol, ARow: Integer;
R: TRect; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure Boot32GridMouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
procedure Boot32GridMouseWheelUp(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
procedure Boot32GridMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure Boot32GridClick(Sender: TObject);
procedure FormResize(Sender: TObject);
protected
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 : TForm1;
implementation
uses Disk;
{$R *.DFM}
VAR
QP : LongInt = 14;
MSScrollDown : Boolean = False;
MSScrollUp : Boolean = False;
procedure TForm1.Boot32GridDrawCell(Sender: TObject; ACol, ARow: Integer;
R: TRect; State: TGridDrawState);
var
s:string;
cR : TRect;
rR : TRect;
rTmp : TRect;
gr :TGridRect;
i,j:Byte;
begin
with Boot32Grid.Canvas do
begin
if (aRow<qp) then
r:=rect(r.left,r.top,r.right,r.bottom+1);
if (aCol<Boot32Grid.colCount-1) then
r:=rect(r.left,r.top,r.right+1,r.bottom);
s:='';
font.color:=$0;
if aRow=0 then
begin
brush.color:=$D5F5E0;
pen.color:=$D5F5E0;
r:=rect(0,r.top,r.Right,r.bottom-1);
rectangle(r);
TextOut(r.Left+5,r.+2,'Sector');
TextOut(r.left+70,r.+2,'Boot Sector (FAT32)');
end else
if (aRow=1) then
begin
brush.color:=$B9B0E0;
pen.color:=$B9B0E0;
r:=rect(0,r.top,r.Right,r.bottom-1);
rectangle(r);
TextOut(r.Left+4,r.top+2,'x'+Boot32Grid.Cols[00].Strings[aRow]);
TextOut(r.Left+70,r.top+2,'Valid Boot Sector');
pen.color:=$BF;
end else
begin
pen.Color:=$DFE8FF;
brush.color:=$DFE8FF;
font.color:=$0;
if aRow<=qp then
begin
// текст
case ACol of
00: s:= Boot32Grid.Cols[00].Strings[aRow];
01: s:= Boot32Grid.Cols[01].Strings[aRow];
02: s:= Boot32Grid.Cols[02].Strings[aRow];
03: s:= Boot32Grid.Cols[03].Strings[aRow];
04: s:= Boot32Grid.Cols[04].Strings[aRow];
05: s:= Boot32Grid.Cols[05].Strings[aRow];
06: s:= Boot32Grid.Cols[06].Strings[aRow];
07: s:= Boot32Grid.Cols[07].Strings[aRow];
end;
if (aCol=0) then
begin
brush.color:=$FFFFFF;
pen.Color:=$FFFFFF;
end;
if (aCol=2) or (aCol=4) then
Begin
Brush.Color:=$DFECFF;
pen.Color:=$DFECFF;
// Font.Color:=$A928FF;
end;
rectangle(r);
end;
// -------------------- Select -----------------------
if gdSelected in State then
begin
if (ACol <> 1)and(aCol <> 3) Then
Begin
rTmp:=Rect(r.Left+1,r.+1,r.Right-2,r.Bottom-1);
brush.color:=$455D9F;
Font.Color:=$FFFFFF;
pen.Color:=$DE81F5;
rectangle(rTmp);
end else
Boot32Grid.Col:=ACol+1;
end;
end;
textOut(r.left+5,r.top+2,s);
//----------------------------------------------------
pen.Color:=$B9B0E0;
if (aRow>=2) and ((aCol = 1)or(aCol = 3)) then
Begin
moveTo(r.Left,r.Bottom);
LineTo(R.Left,r.-1);
end;
//-----------------------------------------------------
if (aRow=Boot32Grid.RowCount-1) then
Begin
moveTo(r.Left+r.Right,R.+Boot32Grid.DefaultRowHeight-1);
LineTo(r.Left,r.+Boot32Grid.DefaultRowHeight-1);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
function AlgStr(Str: string): string;
Var
d,l,i:Byte;
begin
d:=20;
l:=Length(Str);
if l >= 20 then
Begin
Copy(Str,1,20);
l:=20;
end;
d:=d-l;
For i:=l to d do
Str:=Str+' ';
Result:='x'+str;
end;
Function StrToHexInt(Int,Def:DWORD):String;
Begin
Result:=AlgStr(IntToHex(Int,Def))+IntToStr(Int);
end;
Function GetActiveFAT(bsExtFlags:word):String;
Begin
if (bsExtFlags and $40) = 0 then
Result:='Yes (bit 7 clear)' else
Result:='No (bit 7 clear)';
end;
Var
P:Pointer;
begin
Boot32Grid.GridLineWidth:=0;
Boot32Grid.color:=$DFEFFF;
ScrollBar1.Max:=1000000000;
Boot32Grid.Cells[0,01]:=IntToHex(63,8);
Boot32Grid.Cells[0,02]:=IntToStr(63);
Boot32Grid.Cells[1,02]:='OEM name:'; Boot32Grid.Cells[3,02]:='Big sectors per FAT:';
Boot32Grid.Cells[1,03]:='Bytes per sector:'; Boot32Grid.Cells[3,03]:='Active FAT:';
Boot32Grid.Cells[1,04]:='Sectors per cluster:'; Boot32Grid.Cells[3,04]:='FAT mirrored:';
Boot32Grid.Cells[1,05]:='Reserved sectors:'; Boot32Grid.Cells[3,05]:='Minor FS version:';
Boot32Grid.Cells[1,06]:='FATs:'; Boot32Grid.Cells[3,06]:='Major FS version:';
Boot32Grid.Cells[1,07]:='Root dir entries:'; Boot32Grid.Cells[3,07]:='1st Root cluster:';
Boot32Grid.Cells[1,08]:='Sectors on drive:'; Boot32Grid.Cells[3,08]:='FS info sector:';
Boot32Grid.Cells[1,09]:='Media descriptor:'; Boot32Grid.Cells[3,09]:='Backup Boot sector:';
Boot32Grid.Cells[1,10]:='Sectors per FAT:'; Boot32Grid.Cells[3,10]:='Physical drive #:';
Boot32Grid.Cells[1,11]:='Sectors per track:'; Boot32Grid.Cells[3,11]:='Boot record signature:';
Boot32Grid.Cells[1,12]:='heads:'; Boot32Grid.Cells[3,12]:='Volume serial number:';
Boot32Grid.Cells[1,13]:='Hidden sectors:'; Boot32Grid.Cells[3,13]:='Volume label:';
Boot32Grid.Cells[1,14]:='Big sectors on drive:'; Boot32Grid.Cells[3,14]:='File system:';
GetMem(P,512);
ReadPlysicalSector($0,63,1,P^);
With PBoot32(P)^ do
Begin
Boot32Grid.Cells[2,02]:=bsOemname; Boot32Grid.Cells[4,02]:=StrToHexInt(bsFATSz32,8);
Boot32Grid.Cells[2,03]:=StrToHexInt(bsBytePerSec,4); Boot32Grid.Cells[4,03]:=StrToHexInt(bsExtFlags and $F,1);
Boot32Grid.Cells[2,04]:=StrToHexInt(bsSecPerClus,2); Boot32Grid.Cells[4,04]:=GetActiveFAT(bsExtFlags);
Boot32Grid.Cells[2,05]:=StrToHexInt(bsRsvdSecCnt,4); Boot32Grid.Cells[4,05]:=StrToHexInt(hi(bsFSVer),1);
Boot32Grid.Cells[2,06]:=StrToHexInt(bsNumFATs,2); Boot32Grid.Cells[4,06]:=StrToHexInt(lo(bsFSVer),1);
Boot32Grid.Cells[2,07]:=StrToHexInt(bsRootEntCnt,4); Boot32Grid.Cells[4,07]:=StrToHexInt(bsRootClus,8);
Boot32Grid.Cells[2,08]:=StrToHexInt(bsToolSec16,4); Boot32Grid.Cells[4,08]:=StrToHexInt(bsFSInfo,4);
Boot32Grid.Cells[2,09]:=StrToHexInt(bsMedia,2); Boot32Grid.Cells[4,09]:=StrToHexInt(bsBkBootSec,4);
Boot32Grid.Cells[2,10]:=StrToHexInt(bsFATz16,4); Boot32Grid.Cells[4,10]:=StrToHexInt(bsDrvNum,2);
Boot32Grid.Cells[2,11]:=StrToHexInt(bsSecPerTrk,4); Boot32Grid.Cells[4,11]:=StrToHexInt(bsBootSig,2);
Boot32Grid.Cells[2,12]:=StrToHexInt(bsNumHeads,4); Boot32Grid.Cells[4,12]:=StrToHexInt(bsVolId,2);
Boot32Grid.Cells[2,13]:=StrToHexInt(bsHiddSec,8); Boot32Grid.Cells[4,13]:=bsVolLab;
Boot32Grid.Cells[2,14]:=StrToHexInt(bsTolSec32,8); Boot32Grid.Cells[4,14]:=bsFSType;
end;
FreeMem(P);
end;
procedure TForm1.Boot32GridMouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
MSScrollDown:=True;
MSScrollUp:=False;
end;
procedure TForm1.Boot32GridMouseWheelUp(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
MSScrollUp:=True;
MSScrollDown:=False;
end;
procedure TForm1.Boot32GridMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
MSScrollUp:=False;
MSScrollDown:=False;
end;
procedure TForm1.Boot32GridClick(Sender: TObject);
Var
gr:TGridRect;
begin
end;
procedure TForm1.FormResize(Sender: TObject);
Var
i,ColsWidth,RowsHeight:Integer;
begin
ColsWidth:=0;
RowsHeight:=0;
With Boot32Grid do
Begin
For i:=0 to ColCount-2 do
ColsWidth:=ColsWidth+ColWidths[i];
For i:=1 to RowCount-1 do
RowsHeight:=RowsHeight+RowHeights[i];
ColWidths[ColCount-1]:=Form1.Width-ColsWidth-26;
Height:=RowsHeight;
end;
end;
end.
unit uBoot;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, tlHelp32, ExtCtrls, FileCtrl, ComCtrls,
StdCtrls, Grids, Menus, shellApi,UFAT, ToolWin;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
Drive1: TMenuItem;
ScrollBar1: TScrollBar;
Panel2: TPanel;
Boot32Grid: TStringGrid;
procedure Boot32GridDrawCell(Sender: TObject; ACol, ARow: Integer;
R: TRect; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure Boot32GridMouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
procedure Boot32GridMouseWheelUp(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
procedure Boot32GridMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure Boot32GridClick(Sender: TObject);
procedure FormResize(Sender: TObject);
protected
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 : TForm1;
implementation
uses Disk;
{$R *.DFM}
VAR
QP : LongInt = 14;
MSScrollDown : Boolean = False;
MSScrollUp : Boolean = False;
procedure TForm1.Boot32GridDrawCell(Sender: TObject; ACol, ARow: Integer;
R: TRect; State: TGridDrawState);
var
s:string;
cR : TRect;
rR : TRect;
rTmp : TRect;
gr :TGridRect;
i,j:Byte;
begin
with Boot32Grid.Canvas do
begin
if (aRow<qp) then
r:=rect(r.left,r.top,r.right,r.bottom+1);
if (aCol<Boot32Grid.colCount-1) then
r:=rect(r.left,r.top,r.right+1,r.bottom);
s:='';
font.color:=$0;
if aRow=0 then
begin
brush.color:=$D5F5E0;
pen.color:=$D5F5E0;
r:=rect(0,r.top,r.Right,r.bottom-1);
rectangle(r);
TextOut(r.Left+5,r.+2,'Sector');
TextOut(r.left+70,r.+2,'Boot Sector (FAT32)');
end else
if (aRow=1) then
begin
brush.color:=$B9B0E0;
pen.color:=$B9B0E0;
r:=rect(0,r.top,r.Right,r.bottom-1);
rectangle(r);
TextOut(r.Left+4,r.top+2,'x'+Boot32Grid.Cols[00].Strings[aRow]);
TextOut(r.Left+70,r.top+2,'Valid Boot Sector');
pen.color:=$BF;
end else
begin
pen.Color:=$DFE8FF;
brush.color:=$DFE8FF;
font.color:=$0;
if aRow<=qp then
begin
// текст
case ACol of
00: s:= Boot32Grid.Cols[00].Strings[aRow];
01: s:= Boot32Grid.Cols[01].Strings[aRow];
02: s:= Boot32Grid.Cols[02].Strings[aRow];
03: s:= Boot32Grid.Cols[03].Strings[aRow];
04: s:= Boot32Grid.Cols[04].Strings[aRow];
05: s:= Boot32Grid.Cols[05].Strings[aRow];
06: s:= Boot32Grid.Cols[06].Strings[aRow];
07: s:= Boot32Grid.Cols[07].Strings[aRow];
end;
if (aCol=0) then
begin
brush.color:=$FFFFFF;
pen.Color:=$FFFFFF;
end;
if (aCol=2) or (aCol=4) then
Begin
Brush.Color:=$DFECFF;
pen.Color:=$DFECFF;
// Font.Color:=$A928FF;
end;
rectangle(r);
end;
// -------------------- Select -----------------------
if gdSelected in State then
begin
if (ACol <> 1)and(aCol <> 3) Then
Begin
rTmp:=Rect(r.Left+1,r.+1,r.Right-2,r.Bottom-1);
brush.color:=$455D9F;
Font.Color:=$FFFFFF;
pen.Color:=$DE81F5;
rectangle(rTmp);
end else
Boot32Grid.Col:=ACol+1;
end;
end;
textOut(r.left+5,r.top+2,s);
//----------------------------------------------------
pen.Color:=$B9B0E0;
if (aRow>=2) and ((aCol = 1)or(aCol = 3)) then
Begin
moveTo(r.Left,r.Bottom);
LineTo(R.Left,r.-1);
end;
//-----------------------------------------------------
if (aRow=Boot32Grid.RowCount-1) then
Begin
moveTo(r.Left+r.Right,R.+Boot32Grid.DefaultRowHeight-1);
LineTo(r.Left,r.+Boot32Grid.DefaultRowHeight-1);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
function AlgStr(Str: string): string;
Var
d,l,i:Byte;
begin
d:=20;
l:=Length(Str);
if l >= 20 then
Begin
Copy(Str,1,20);
l:=20;
end;
d:=d-l;
For i:=l to d do
Str:=Str+' ';
Result:='x'+str;
end;
Function StrToHexInt(Int,Def:DWORD):String;
Begin
Result:=AlgStr(IntToHex(Int,Def))+IntToStr(Int);
end;
Function GetActiveFAT(bsExtFlags:word):String;
Begin
if (bsExtFlags and $40) = 0 then
Result:='Yes (bit 7 clear)' else
Result:='No (bit 7 clear)';
end;
Var
P:Pointer;
begin
Boot32Grid.GridLineWidth:=0;
Boot32Grid.color:=$DFEFFF;
ScrollBar1.Max:=1000000000;
Boot32Grid.Cells[0,01]:=IntToHex(63,8);
Boot32Grid.Cells[0,02]:=IntToStr(63);
Boot32Grid.Cells[1,02]:='OEM name:'; Boot32Grid.Cells[3,02]:='Big sectors per FAT:';
Boot32Grid.Cells[1,03]:='Bytes per sector:'; Boot32Grid.Cells[3,03]:='Active FAT:';
Boot32Grid.Cells[1,04]:='Sectors per cluster:'; Boot32Grid.Cells[3,04]:='FAT mirrored:';
Boot32Grid.Cells[1,05]:='Reserved sectors:'; Boot32Grid.Cells[3,05]:='Minor FS version:';
Boot32Grid.Cells[1,06]:='FATs:'; Boot32Grid.Cells[3,06]:='Major FS version:';
Boot32Grid.Cells[1,07]:='Root dir entries:'; Boot32Grid.Cells[3,07]:='1st Root cluster:';
Boot32Grid.Cells[1,08]:='Sectors on drive:'; Boot32Grid.Cells[3,08]:='FS info sector:';
Boot32Grid.Cells[1,09]:='Media descriptor:'; Boot32Grid.Cells[3,09]:='Backup Boot sector:';
Boot32Grid.Cells[1,10]:='Sectors per FAT:'; Boot32Grid.Cells[3,10]:='Physical drive #:';
Boot32Grid.Cells[1,11]:='Sectors per track:'; Boot32Grid.Cells[3,11]:='Boot record signature:';
Boot32Grid.Cells[1,12]:='heads:'; Boot32Grid.Cells[3,12]:='Volume serial number:';
Boot32Grid.Cells[1,13]:='Hidden sectors:'; Boot32Grid.Cells[3,13]:='Volume label:';
Boot32Grid.Cells[1,14]:='Big sectors on drive:'; Boot32Grid.Cells[3,14]:='File system:';
GetMem(P,512);
ReadPlysicalSector($0,63,1,P^);
With PBoot32(P)^ do
Begin
Boot32Grid.Cells[2,02]:=bsOemname; Boot32Grid.Cells[4,02]:=StrToHexInt(bsFATSz32,8);
Boot32Grid.Cells[2,03]:=StrToHexInt(bsBytePerSec,4); Boot32Grid.Cells[4,03]:=StrToHexInt(bsExtFlags and $F,1);
Boot32Grid.Cells[2,04]:=StrToHexInt(bsSecPerClus,2); Boot32Grid.Cells[4,04]:=GetActiveFAT(bsExtFlags);
Boot32Grid.Cells[2,05]:=StrToHexInt(bsRsvdSecCnt,4); Boot32Grid.Cells[4,05]:=StrToHexInt(hi(bsFSVer),1);
Boot32Grid.Cells[2,06]:=StrToHexInt(bsNumFATs,2); Boot32Grid.Cells[4,06]:=StrToHexInt(lo(bsFSVer),1);
Boot32Grid.Cells[2,07]:=StrToHexInt(bsRootEntCnt,4); Boot32Grid.Cells[4,07]:=StrToHexInt(bsRootClus,8);
Boot32Grid.Cells[2,08]:=StrToHexInt(bsToolSec16,4); Boot32Grid.Cells[4,08]:=StrToHexInt(bsFSInfo,4);
Boot32Grid.Cells[2,09]:=StrToHexInt(bsMedia,2); Boot32Grid.Cells[4,09]:=StrToHexInt(bsBkBootSec,4);
Boot32Grid.Cells[2,10]:=StrToHexInt(bsFATz16,4); Boot32Grid.Cells[4,10]:=StrToHexInt(bsDrvNum,2);
Boot32Grid.Cells[2,11]:=StrToHexInt(bsSecPerTrk,4); Boot32Grid.Cells[4,11]:=StrToHexInt(bsBootSig,2);
Boot32Grid.Cells[2,12]:=StrToHexInt(bsNumHeads,4); Boot32Grid.Cells[4,12]:=StrToHexInt(bsVolId,2);
Boot32Grid.Cells[2,13]:=StrToHexInt(bsHiddSec,8); Boot32Grid.Cells[4,13]:=bsVolLab;
Boot32Grid.Cells[2,14]:=StrToHexInt(bsTolSec32,8); Boot32Grid.Cells[4,14]:=bsFSType;
end;
FreeMem(P);
end;
procedure TForm1.Boot32GridMouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
MSScrollDown:=True;
MSScrollUp:=False;
end;
procedure TForm1.Boot32GridMouseWheelUp(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
MSScrollUp:=True;
MSScrollDown:=False;
end;
procedure TForm1.Boot32GridMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
MSScrollUp:=False;
MSScrollDown:=False;
end;
procedure TForm1.Boot32GridClick(Sender: TObject);
Var
gr:TGridRect;
begin
end;
procedure TForm1.FormResize(Sender: TObject);
Var
i,ColsWidth,RowsHeight:Integer;
begin
ColsWidth:=0;
RowsHeight:=0;
With Boot32Grid do
Begin
For i:=0 to ColCount-2 do
ColsWidth:=ColsWidth+ColWidths[i];
For i:=1 to RowCount-1 do
RowsHeight:=RowsHeight+RowHeights[i];
ColWidths[ColCount-1]:=Form1.Width-ColsWidth-26;
Height:=RowsHeight;
end;
end;
end.
Отправить комментарий