WINNT下實(shí)現(xiàn)的,WIN98下不行,網(wǎng)上搜索了一通,高人給出WIN98下的實(shí)現(xiàn)代碼要用到匯編,還要取得Ring0級(jí)別的控制權(quán),狂暈~~~偶畢業(yè)后就把匯編還給老師了,還是老老實(shí)實(shí)用C++代碼吧。具體的C++和匯編源碼可以在此找到:http://www.cz88.net/2004/7-7/235257.htm
讀取硬盤物理序列號(hào)有什么用?用來對(duì)軟件加密最好了,別告訴我你是用C盤的邏輯序列號(hào)來加密的,那個(gè)冬冬可是可以用程序改的。不過聽說現(xiàn)在連硬盤的物理序列號(hào)也可以改,不知道怎么才能改呢,高人指點(diǎn)一下。這個(gè)程序主要是針對(duì)有序列號(hào)的IDE HDD而言, 對(duì)于沒有序列號(hào)或SCSI HDD硬盤則無能為力,這是其局限性。
實(shí)現(xiàn)原理:
1、 CreateFile可以打開物理設(shè)備和串口等,使用CreateFile("\\\\.\\PHYSICALDRIVE0",…)打開硬盤,其中的0為0-255,視乎有幾個(gè)硬盤了。
2、 使用DeviceIoControl函數(shù)對(duì)打開的設(shè)備進(jìn)行通信,發(fā)送指定命令,根據(jù)返回的PSENDCMDOUTPARAMS結(jié)構(gòu),得到物理序列號(hào)和模型號(hào),把物理序列號(hào)和模型號(hào)格式化為一定的格式輸出。

順便把各個(gè)邏輯驅(qū)動(dòng)器的信息也讀取一下,包括卷標(biāo),驅(qū)動(dòng)器類型和邏輯序列號(hào)等。主要是用GetLogicalDriveStrings和GetVolumeInformation和GetDriveType幾個(gè)API。圖示是偶的機(jī)器上的結(jié)果。
程序:diskinfo.zip