这类的帖子许多,不过差不多都是经过调用动态链接库完结的。精确的说完结获取硬盘序列号的作业是由其他言语编写的DLL来完结的。今日我的这比如不必调用动态链接库,直接由LabVIEW来获取硬盘的序列号。
1、原理
硬盘读写端口的具体意义
对硬盘进行操作的常用端口是1f0h~1f7h号端口,各端口意义如下:
端口号 读仍是写 具体意义
1F0H 读/写 用来传送读/写的数据(其内容是正在传输的一个字节的数据)
1F1H 读 用来读取过错码
1F2H 读/写 用来放入要读写的扇区数量
1F3H 读/写 用来放入要读写的扇区号码
1F4H 读/写 用来寄存读写柱面的低 8位字节
1F5H 读/写 用来寄存读写柱面的高 2位字节(其高 6位恒为 0)
1F6H 读/写 用来寄存要读/写的磁盘号及磁头号
第 7位 恒为 1
第 6位 恒为 0
第 5位 恒为 1
第 4位 为 0代表榜首块硬盘、为 1代表第二块硬盘
第3~0位 用来寄存要读/写的磁头号
1f7H 读 用来寄存读操作后的状况
第 7位 操控器繁忙
第 6位 磁盘驱动器预备好了
第 5位 写入过错
第 4位 查找完结
第 3位 为 1时扇区缓冲区没有预备好
第 2位 是否正确读取磁盘数据
第 1位 磁盘每转一周将此位设为1,
第 0位 之前的指令因产生过错而完毕
写 该位端口为指令端口,用来宣布指定指令
为50h 格式化磁道
为20h 测验读取扇区
为21h 无须验证扇区是否预备好而直接读扇区
为22h 测验读取长扇区(用于前期的硬盘,每扇或许不是 512字节,而是128字节到1024
之间的值)
为23h 无须验证扇区是否预备好而直接读长扇区
为30h 测验写扇区
为31h 无须验证扇区是否预备好而直接写扇区
为32h 测验写长扇区
为33h 无须验证扇区是否预备好而直接写长扇区
上面是磁盘0的指令,下面是磁盘1的
171H 1号硬盘过错寄存器
172H 1号硬盘数据扇区计数
173H 1号硬盘扇区数
174H 1号硬盘柱面(低字节)
175H 1号硬盘柱面(高字节)
176H 1号硬盘驱动器/磁头寄存器
177H 1号硬盘状况寄存器
2、操作
接下来的作业就很简略了。大致流程便是下面这样了:
2.1
2.2
那么发送 a0,假如为从那么发送 b0
2.3
2.4
2.5
3、代码及前面板

上面图即为程序的悉数代码。