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

順便把各個邏輯驅動器的信息也讀取一下,包括卷標,驅動器類型和邏輯序列號等。主要是用GetLogicalDriveStrings和GetVolumeInformation和GetDriveType幾個API。圖示是偶的機器上的結果。
程序:diskinfo.zip