#include #include #include #include #include const word ide_atapi_identify=0xa1; // 讀取atapi裝置的命令
const word ide_ata_identify=0xec; // 讀取ata裝置的命令
char szmodelnumber[64]=;
char szserialnumber[64]=;
bool getdiskinfo(int driver=0);
bool __fastcall doidentify(handle hphysicaldriveioctl, psendcmdinparams pscip,psendcmdoutparams pscop,byte btidcmd,byte btdrivenum,pdword pdwbytesreturned);
char *__fastcall converttostring(dword dwdiskdata[256], int nfirstindex, int nlastindex);
int main (void)
bool getdiskinfo(int driver)
; _sntprintf_s(sztext,arraysize(sztext),text("\\\\.\\physicaldrive%d"),driver);
handle hfile = invalid_handle_value;
hfile = createfile(sztext, generic_read | generic_write, file_share_read | file_share_write, null, open_existing,0, null);
if (hfile == invalid_handle_value) return false;
dword dwbytesreturned;
getversioninparams gvopversionparams;
if (deviceiocontrol(hfile, smart_get_version,null, 0, &gvopversionparams,sizeof(gvopversionparams),&dwbytesreturned,null)==null)
//if(gvopversionparams.bidedevicemap <= 0) return -2;
// ide or atapi identify cmd
int btidcmd = 0;
sendcmdinparams inparams;
int ndrive =0;
btidcmd = (gvopversionparams.bidedevicemap >> ndrive & 0x10)?ide_atapi_identify:ide_ata_identify;
//btidcmd = (gvopversionparams.bidedevicemap >> ndrive & 0x10) ? ide_atapi_identify : ide_ata_identify;
// 輸出引數
byte btidoutcmd[sizeof(sendcmdoutparams) + identify_buffer_size - 1];
if(doidentify(hfile,&inparams, (psendcmdoutparams)btidoutcmd,(byte)btidcmd,(byte)ndrive, &dwbytesreturned) == false)
::closehandle(hfile);
dword dwdiskdata[256]=;
ushort *pidsector=null; // 對應結構idsector,見標頭檔案
pidsector = (ushort*)((sendcmdoutparams*)btidoutcmd)->bbuffer;
for(int i=0; i < 256; i++) dwdiskdata[i] = pidsector[i];
// 取系列號
zeromemory(szserialnumber, sizeof(szserialnumber));
strcpy_s(szserialnumber, converttostring(dwdiskdata, 10, 19));
// 取模型號
zeromemory(szmodelnumber, sizeof(szmodelnumber));
strcpy_s(szmodelnumber, converttostring(dwdiskdata, 27, 46));
return true;
}bool __fastcall doidentify(handle hphysicaldriveioctl, psendcmdinparams pscip,psendcmdoutparams pscop,byte btidcmd,byte btdrivenum,pdword pdwbytesreturned)
char *__fastcall converttostring(dword dwdiskdata[256], int nfirstindex, int nlastindex)
; char ss[256];
int nindex = 0;
int nposition = 0;
for(nindex = nfirstindex; nindex <= nlastindex; nindex++)
// end the string
ss[nposition] = '\0';
int i, index=0;
for(i=0; iszresbuf[index]=0;
return szresbuf;}/*
2023年5月6日 11:18:30
程式執行結果如下:
取系列號wd-wcc3f3538344
取模型號wdcwd10ezex-00bn5a0
請按任意鍵繼續. . .
*/
Linux如何檢視硬碟型號和快取
hdparm i dev sda1 dev sda1 model wdc wd10eacs 00zjb0 硬碟型號 fwrev 01.01b01,serialno wd wcasj0976997 config rawchs 16383 16 63,trksize 0,sectsize 0,eccby...
linux下檢視硬碟型號等資訊
可以用smartctl,hdparm等命令來查詢。在日誌中顯示硬碟有壞扇區 tail var log messages dmesg中也有錯誤資訊 dmesg 對硬碟做一下健康檢查 smartctl h dev hda 檢測通過,保險起見還是準備換硬碟。檢視下當前硬碟的型號,可以得到硬碟介面為sata...
參考例子,學習Func委託
這些天,開發asp.net mvc,其間有查詢資料,發現乙個全新的func委託。讓我們在開發時,節省與簡化很多。在開發過程中,我們需要把乙個泛型list,把所有整型int串連起來轉換為一串字串。這時,我們會寫乙個方法 在檢視中,我們就可以應用這個方法 在檢視中,我們使用這個委託 上面的方法,我們是按...