Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Аппаратные Средства    >>    hdd_num2
   
 
 Чтение серийного номера IDE винчестера   Vladimir Papaev 31.03.1996

Вытаскивание из IDE винчестера серийного номера, модели и др. параметров



1k 
 

Hello! 30 Mar 96 17:00, Egor Popov wrote to All: EP> Кто поможет считать subj и модель для IDE винта, очень надо, и если EP> можно с исходничком. Лови. Имя автора, к сожалению, не сохранилось... Vladimir --- Golded 2.50.B0822 * Origin: HOME BBS, 23:00-06:00 (2:5020/205.14) {> Cut here. FileName= HDD_NUM2.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]); {апечатить информацию} 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.