通过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、代码及前面板
注意:此程序只在XP下对并口硬盘做了测试。对串口(SATA)硬盘的测试失败。VISTA下由于安全原因可能会被禁止,请将程序保护的选项去除。这个没有详细测试,希望安装了VISTA系统的朋友测试一下,把结果共享出来。
上面图即为程序的全部代码。
LabVIEW硬盘序列 相关文章:
- 频宽、取样速率及奈奎斯特定理(09-14)
- 为什么要进行信号调理?(09-30)
- IEEE802.16-2004 WiMAX物理层操作和测量(09-16)
- 为任意波形发生器增加价值(10-27)
- 基于PCI 总线的高速数据采集系统(09-30)
- 泰克全新VM6000视频测试仪助力数字电视等产品测试 (10-06)