1
IDE0:
如果是主设备device=0xA0
如果是从设备device=0xB0
向端口0x1F1~0x1F7分别送(0,0,0,0,0x2,device,0xA1) //Packet IDentifyDevice
然后从0x1F0连续读出256个字,就是下面这个数据结构,其中的ModelNum就有想要的信息。
如果是从设备使用0x170~0x177
对了,如果是硬盘,上面就是(0,0,0,0,0,device,0xEC),呵呵,这个也是windows下
DeviceIOControl的来历吧。
在Dos,Linux,windows下都可以,不过端口权限要自己取,呵呵。
2.
可以使用ASPI功能来取。
基本原理就是调用ASPI(wnaspi32.dll)功能的sendaspi32command函数,执行一个SC_EXEC_SCSI_CMD
命令,返回的数据缓冲区(要调用者提供)中的36~55字节(0基准的)就是序列号(不足的部分填充为0)。