取硬碟型號參考例子1

2021-07-02 06:22:55 字數 2967 閱讀 2686

#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串連起來轉換為一串字串。這時,我們會寫乙個方法 在檢視中,我們就可以應用這個方法 在檢視中,我們使用這個委託 上面的方法,我們是按...