www.pudn.com > read_harddisk_refrence.rar > UnitHdDisk.cpp


/*-------------------------------------------------------------------------*\ 
|                                                                           | 
|                           IDE 硬盘参数读取程序                            | 
|                           ~~~~~~~~~~~~~~~~~~~~                            | 
|                    Copyright (C) 1997-2003, Victor Chen                   | 
|                         Email: victor@cppfans.com                         | 
|                      Homepage: http://www.cppfans.com                     | 
|                                                                           | 
\*-------------------------------------------------------------------------*/ 
#include  
#pragma hdrstop 
 
#include "UnitHdDisk.h" 
#include "IDE_DISK.H" 
//--------------------------------------------------------------------------- 
#pragma package(smart_init) 
#pragma resource "*.dfm" 
TFormHdParams *FormHdParams; 
//--------------------------------------------------------------------------- 
__fastcall TFormHdParams::TFormHdParams(TComponent* Owner) 
    : TForm(Owner) 
{ 
  Memo1->Text = "读取硬盘参数\r\nCopyright (C) Victor Chen\r\nHomepage: http://www.cppfans.com/\r\n\r\n"; 
  Memo1->Lines->Add("按“硬盘参数”按钮读取硬盘参数\r\n=============================================="); 
 
  bWinIoInitOK = InitializeWinIo(); 
  if(!bWinIoInitOK) 
   { 
     Application->MessageBox("不能装载 WinIO 程序!","错误信息",MB_OK|MB_ICONSTOP); 
     Application->Terminate(); 
   } 
} 
//--------------------------------------------------------------------------- 
__fastcall TFormHdParams::~TFormHdParams() 
{ 
  if(bWinIoInitOK) 
    ShutdownWinIo(); 
} 
//--------------------------------------------------------------------------- 
void __fastcall TFormHdParams::ButtonHdParamsClick(TObject *Sender) 
{ 
  TIdePortAddrItem ControllerPorts[] = {IDE1_Port, IDE2_Port}; 
  AnsiString ControllerNames[] = {"IDE0", "IDE1"}; 
  char *HardDiskNames[] = {"主盘", "从盘"}; 
  char HardDiskDetected; //bit 0:master, bit 1:slave 
  TIDE_ID_Inf IDE_Info; 
  char Str[128]; 
 
  for(int i=0; i<2; i++) 
   { 
     Memo1->Lines->Add("正在检测: " + ControllerNames[i] + ", 可能需要几秒钟时间, 请稍候……"); 
     HardDiskDetected=DetectHDD(ControllerPorts[i]); 
 
     switch(HardDiskDetected&3) 
      { 
        case 0: Memo1->Lines->Add("没检测到硬盘"); break; 
        case 1: Memo1->Lines->Add("检测到主盘"); break; 
        case 2: Memo1->Lines->Add("检测到从盘"); break; 
        case 3: Memo1->Lines->Add("检测到主盘和从盘"); break; 
      } 
 
     for(int k=0;k<2;k++) //primary/slave disk 
      if(HardDiskDetected & (1<Lines->Add("=============================================="); 
        Memo1->Lines->Add(ControllerNames[i] + HardDiskNames[k] + ":"); 
        Memo1->Lines->Add("----------------------------------------------"); 
        GetHDDInfo(&IDE_Info, k, ControllerPorts[i]); 
 
        //---------- model, serial number & firmware revision 
        WordToStr(Str, IDE_Info.nModel, 20); 
        Memo1->Lines->Add("型    号: " + AnsiString(Str).Trim()); 
 
        WordToStr(Str, IDE_Info.Serial, 10); 
        Memo1->Lines->Add("序 列 号: " + AnsiString(Str).Trim()); 
 
        WordToStr(Str, IDE_Info.Revisn, 4); 
        Memo1->Lines->Add("固件版本: " + AnsiString(Str).Trim()); 
 
        //---------- capacity 
        unsigned long LbaCap = IDE_Info.LBASec/2048, NomCap = ((unsigned long)(IDE_Info.L_Cyln)*(IDE_Info.L_Head)*(IDE_Info.L_Sect))/2048; 
        Memo1->Lines->Add("容    量: " + AnsiString().sprintf("%lu Mb",LbaCap>NomCap?LbaCap:NomCap)); 
 
        //---- output hard disk normal information 
        Memo1->Lines->Add(AnsiString().sprintf("柱 面 数: %u",    IDE_Info.L_Cyln)); 
        Memo1->Lines->Add(AnsiString().sprintf("磁 头 数: %u",    IDE_Info.L_Head)); 
        Memo1->Lines->Add(AnsiString().sprintf("扇 区 数: %u",    IDE_Info.L_Sect)); 
        Memo1->Lines->Add(AnsiString().sprintf("缓存容量: %u kb", IDE_Info.BufNum>>1)); 
        Memo1->Lines->Add(AnsiString().sprintf("ECC 字节: %u bytes", IDE_Info.ECCByt)); 
        Memo1->Lines->Add(AnsiString().sprintf("LBA 支持: %s", (IDE_Info.Capabs&IDE_LBA_Spp)?"是":"否")); 
      } 
     Memo1->Lines->Add("=============================================="); 
   } 
} 
//--------------------------------------------------------------------------- 
void __fastcall TFormHdParams::ButtonExitClick(TObject *Sender) 
{ 
  Close(); 
} 
//---------------------------------------------------------------------------