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