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(); } //---------------------------------------------------------------------------