首页  编辑  

SMART性能监视

Tags: /超级猛料/Hardware.硬件相关/驱动器相关/硬盘/   Date Created:

监控硬盘的S.M.A.R.T状态

monitor a harddrive with S.M.A.R.T?

unit Unit1 ; interface uses   Windows , Messages , SysUtils , Variants , Classes , Graphics , Controls , Forms ,   Dialogs , ExtCtrls , Grids ; type   TForm1 = class ( TForm )     Timer1 : TTimer ;     StringGrid1 : TStringGrid ;     procedure FormCreate ( Sender : TObject );     procedure Timer1Timer ( Sender : TObject );   private     { Private declarations }   public     { Public declarations }   end ; var   Form1 : TForm1 ; implementation {$R *.dfm} type   TSmartData = array [ 0..527 ] of Byte ;     { .... } procedure GetSmartData ( var Data : TSmartData ); var   hdrive : Cardinal ;   dwBytesReturned : DWORD ;   ipar : array [ 0..31 ] of Byte ;   opar : TSmartData ; begin   ipar [ 0 ]   := 0 ;   ipar [ 1 ]   := $02 ;   ipar [ 2 ]   := 0 ;   ipar [ 3 ]   := 0 ;   ipar [ 4 ]   := $d0 ;   ipar [ 5 ]   := $01 ;   ipar [ 6 ]   := $01 ;   ipar [ 7 ]   := $4f ;   ipar [ 8 ]   := $c2 ;   ipar [ 9 ]   := $a0 ;   ipar [ 10 ] := $b0 ;   ipar [ 11 ] := 0 ;   ipar [ 12 ] := 0 ;   ipar [ 13 ] := 0 ;   ipar [ 14 ] := 0 ;   ipar [ 15 ] := 0 ;   ipar [ 16 ] := $8c ;   ipar [ 17 ] := $fd ;   ipar [ 18 ] := $14 ;   ipar [ 19 ] := 0 ;   ipar [ 20 ] := 0 ;   ipar [ 21 ] := $02 ;   ipar [ 22 ] := 0 ;   ipar [ 23 ] := 0 ;   ipar [ 24 ] := $03 ;   ipar [ 25 ] := 0 ;   ipar [ 26 ] := 0 ;   ipar [ 27 ] := 0 ;   ipar [ 28 ] := $03 ;   ipar [ 29 ] := 0 ;   ipar [ 30 ] := 0 ;   ipar [ 31 ] := 0 ;   // Get first harddrive   hdrive   := CreateFile ( PChar ( '\\.\PhysicalDrive0' ), 3221225472 , 3 , nil , 3 , 0 , 0 );   DeviceIoControl ( hdrive , $0007C088 , @ ipar , 32 , @ opar , 528 , dwBytesReturned , nil );   CloseHandle ( hdrive );   Data := opar ; end ; procedure TForm1 . FormCreate ( Sender : TObject ); begin   StringGrid1 . Cells [ 0 , 0 ]   := 'Description' ;   StringGrid1 . Cells [ 1 , 0 ]   := 'Value' ;   StringGrid1 . Cells [ 0 , 1 ]   := 'Spin Up Time' ;   StringGrid1 . Cells [ 0 , 2 ]   := 'Start/Stop Count' ;   StringGrid1 . Cells [ 0 , 3 ]   := 'Reallocated Sectors Count' ;   StringGrid1 . Cells [ 0 , 4 ]   := 'Read Channel Margin' ;   StringGrid1 . Cells [ 0 , 5 ]   := 'Seek Error Rate' ;   StringGrid1 . Cells [ 0 , 6 ]   := 'Seek Time Performance' ;   StringGrid1 . Cells [ 0 , 7 ]   := 'Power-On Minutes' ;   StringGrid1 . Cells [ 0 , 8 ]   := 'Spin Retry Count' ;   StringGrid1 . Cells [ 0 , 9 ]   := 'Recalibration Retries' ;   StringGrid1 . Cells [ 0 , 10 ] := 'Device Power Cycle Count' ;   StringGrid1 . Cells [ 0 , 11 ] := 'Load/Unload Cycle Count' ;   StringGrid1 . Cells [ 0 , 12 ] := 'Temperature' ;   StringGrid1 . Cells [ 0 , 13 ] := 'Reallocation Event Count' ;   StringGrid1 . Cells [ 0 , 14 ] := 'Current Pending Sector Count' ;   StringGrid1 . Cells [ 0 , 15 ] := 'Uncorrectable Sector Count' ;   StringGrid1 . Cells [ 0 , 16 ] := 'UDMA CRC Error Count' ;   StringGrid1 . Cells [ 0 , 17 ] := 'Write Error Rate' ;   Timer1 . Interval := 700 ;   Timer1 . Enabled := True ; end ; procedure TForm1 . Timer1Timer ( Sender : TObject ); var   smartdatavar : TSmartData ; begin   getsmartdata ( smartdatavar );   StringGrid1 . Cells [ 1 , 1 ]   := IntToStr ( smartdatavar [ 24 ] * 256 + smartdatavar [ 23 ]);   StringGrid1 . Cells [ 1 , 2 ]   := IntToStr ( smartdatavar [ 36 ] * 256 + smartdatavar [ 35 ]);   StringGrid1 . Cells [ 1 , 3 ]   := IntToStr ( smartdatavar [ 48 ] * 256 + smartdatavar [ 47 ]);   StringGrid1 . Cells [ 1 , 4 ]   := IntToStr ( smartdatavar [ 60 ] * 256 + smartdatavar [ 59 ]);   StringGrid1 . Cells [ 1 , 5 ]   := IntToStr ( smartdatavar [ 72 ] * 256 + smartdatavar [ 71 ]);   StringGrid1 . Cells [ 1 , 6 ]   := IntToStr ( smartdatavar [ 84 ] * 256 + smartdatavar [ 83 ]);   StringGrid1 . Cells [ 1 , 7 ]   := IntToStr ( smartdatavar [ 96 ] * 256 + smartdatavar [ 95 ]);   StringGrid1 . Cells [ 1 , 8 ]   := IntToStr ( smartdatavar [ 108 ] * 256 + smartdatavar [ 107 ]);   StringGrid1 . Cells [ 1 , 9 ]   := IntToStr ( smartdatavar [ 120 ] * 256 + smartdatavar [ 119 ]);   StringGrid1 . Cells [ 1 , 10 ] := IntToStr ( smartdatavar [ 132 ] * 256 + smartdatavar [ 131 ]);   StringGrid1 . Cells [ 1 , 11 ] := IntToStr ( smartdatavar [ 156 ] * 256 + smartdatavar [ 155 ]);   StringGrid1 . Cells [ 1 , 12 ] := IntToStr ( smartdatavar [ 168 ] * 256 + smartdatavar [ 167 ]);   StringGrid1 . Cells [ 1 , 13 ] := IntToStr ( smartdatavar [ 192 ] * 256 + smartdatavar [ 191 ]);   StringGrid1 . Cells [ 1 , 14 ] := IntToStr ( smartdatavar [ 204 ] * 256 + smartdatavar [ 203 ]);   StringGrid1 . Cells [ 1 , 15 ] := IntToStr ( smartdatavar [ 216 ] * 256 + smartdatavar [ 215 ]);   StringGrid1 . Cells [ 1 , 16 ] := IntToStr ( smartdatavar [ 228 ] * 256 + smartdatavar [ 227 ]);   StringGrid1 . Cells [ 1 , 17 ] := IntToStr ( smartdatavar [ 240 ] * 256 + smartdatavar [ 239 ]); end ; end .