Hello Egor!
Egor Popov wrote to All:
EP> Кто поможет считать Serial Number и модель для IDE винта,
EP> очень надо, и если можно с исходничком.
Лови.
Vladimir
{> Cut here. FileName= HDD_NUM.PAS }
{$IFDEF Windows}
uses WinCrt;
{$ENDIF}
var
InfoArray : array[0..255] of word;
IdeInfo : record
Config : word;
CylsTotal : word;
Unused : word;
HeadTotal : word;
BPT : word;
BPS : word;
SPT : word;
Vendor : array[0..2] of word;
Serial : array[1..20] of char;
BufType : Word;
BufSize : Word;
ECC : Word;
Revision : array[1..8] of char;
Model : array[1..40] of char;
end absolute InfoArray;
Count : byte;
i : byte;
begin
writeln('Информация о дисководах IDE:'^M^J);
{$IFDEF WINDOWS}
for count := 1 to mem[ $0040:$0075] do begin
{$ELSE}
for count := 1 to mem[Seg0040:$0075] do begin
{$ENDIF}
FillChar(InfoArray, SizeOf(InfoArray), 0);
{Проверить готовность}
while (port[$1F7] and $80<>0) do ;
{Запретить прерывания}
port[$3f6] := 2;
port[$1f6] := $A0 + ((count-1) shl 4);
port[$1f7] := $EC;
{Проверить готовность}
while (port[$1F7] and $80<>0) do ;
{Получить информацию}
for i := 0 to 255 do InfoArray[i] := swap(portw[$1F0]);
{Hапечатaть информацию}
writeln('Информация о физическом диске ',count-1,^M^J);
with IdeInfo do begin
writeln('Емкость неформатированная :', 9.5367431641E-7* {1/2^20}
swap(BPT)*swap(CylsTotal)*swap(HeadTotal):5:0, 'Mb');
writeln('Емкость форматированная :',
longint(swap(SPT))*swap(CylsTotal)*swap(HeadTotal) div 2048:5, 'Mb');
writeln('Число цилиндров :', swap(CylsTotal):7);
writeln('Число головок :', swap(HeadTotal):7);
writeln('Число секторов на дорожку :', swap(SPT):7);
writeln('Число байт на дорожку* :', swap(BPT):7);
writeln('Число байт на сектор* :', swap(BPS):7);
writeln('Размер буфера :', swap(BufSize):7);
writeln('Код ECC :', swap(ECC):7);
writeln(' * -- неформатированная емкость', ^M^J);
writeln('Серийный номер :', serial);
writeln('Версия :',revision);
writeln('Модель :',model);
end;
write('Hажмите любую клавишу...');
{$IFDEF WINDOWS}
readkey;
{$ELSE}
asm xor ah,ah ; int 16h end;
{$ENDIF}
writeln(^M^J);
end;
end.
|