用WinIO。
-----------------------
#include "WinIo.h"
LPHDD __stdcall GetHDDInfo(LPHDD pDisks,int nCount)
{
if(!InitializeWinIo() || pDisks==NULL)
return NULL;
DWORD dwOldProcessP = GetPriorityClass(GetCurrentProcess());
DWORD dwOldThreadP = GetThreadPriority(GetCurrentThread());
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
//AnsiString idename[2] = {"IDE0","IDE1"}, diskname[2] = {"主盘","从盘"};
unsigned short params[256]; char str[256];
int i=0;
for(int pn=0; pn<2; pn++) //primary or secondary
{
for(int dn=0; dn<2; dn++) //master or slave
{
if(++i>nCount)
break;
if(ReadHddParams(params,pn,dn))
{
pDisks[i-1].IDE=pn;
pDisks[i-1].PS=dn;
WordToStr(str,params+27,20);
strcpy(pDisks[i-1].strModel,str);
WordToStr(str,params+10,10);
strcpy(pDisks[i-1].strSN,str);
WordToStr(str,params+23, 4);
strcpy(pDisks[i-1].strVersion,str);
unsigned long LbaCap = *(unsigned long *)(¶ms[60])/2048;
unsigned long NomCap = ((unsigned long)(params[1])*(params[3])*(params[6]))/2048;
pDisks[i-1].nSize=LbaCap>NomCap?LbaCap:NomCap;
pDisks[i-1].nCylinder= params[1];
pDisks[i-1].nHeader= params[3];
pDisks[i-1].nSector= params[6];
pDisks[i-1].bDMA= params[49]&0x0100; //D8:是否支持DMA
pDisks[i-1].bLBA= params[49]&0x0200; //D9:是否支持LBA
pDisks[i-1].nCache= params[21]>>1;
pDisks[i-1].nECC= params[22];
}
//else
//{
//该位置上没有硬盘
//}
}
}
SetThreadPriority(GetCurrentThread(), dwOldThreadP);
SetPriorityClass(GetCurrentProcess(), dwOldProcessP);
ShutdownWinIo();
return pDisks;
}
对得起你这20分了吧。。
--------------------------------
哥们多看点书。。我给的不是便当,不是直接copy过去就能用的。
温馨提示:答案为网友推荐,仅供参考