当前位置:首页 > 测试测量 > 测试测量
[导读]这类的帖子很多,不过差不多都是通过调用动态链接库实现的。准确的说实现获取硬盘序列号的工作是由其他语言编写的DLL来实现的。今天我的这例子不用调用动态链接库,直接由LabVIEW来获取硬盘的序列号。 这种方式在一个

这类的帖子很多,不过差不多都是通过调用动态链接库实现的。准确的说实现获取硬盘序列号的工作是由其他语言编写的DLL来实现的。今天我的这例子不用调用动态链接库,直接由LabVIEW来获取硬盘的序列号。

这种方式在一个论坛上看见过,本想参考参考,不过楼主把VI加密了,索性自己做一个和大家分享,讨论讨论。
本程序读取的是硬盘的物理序列号,不同于DLL调用的方法,本方法获取的是硬盘唯一真正物理ID(是固化在硬盘BISO里的SN不是分区的SN),不会出现重复,也不可能被修改(或者说难度很大,而且还有危险,网上看到过说一个叫PC-3000的可以修改,没有尝试过,有哪位胆大拿自己硬盘试验一下,把结果共享一下吧)。可用在软件加密中。
1、原理
大家知道,硬盘相对于CPU来说属于外部设备,而CPU访问外部设备其实就是对外部IO的端口操作,这是硬盘的底层操作,对硬盘的任何操作都可以的,这样只要我们搞清楚如何通过IO指令对硬盘操作和硬盘物理序列号存放的寄存器就可以轻松读取我们所要的硬盘物理序列号了。下面是从网络上搜集的一些资料。
硬盘读写端口的具体含义
对硬盘进行操作的常用端口是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、操作
知道硬盘的IO操作指令了,下面就是如何在LabVIEW里去实现这些指令了。这方面LabVIEW提供了现成的操作指令。他们就是读端口和写端口。


接下来的工作就很简单了。大致流程就是下面这样了:
2.1等待硬盘就绪
2.2发送命令
; 如果向主控制发送命令,则端口为 1f0h-1f7h
; 如果向副控制发送命令,则端口为 170h-177h
; 1f6h 如果要检测的设备为该IDE接口的主(MASTER)设备,
那么发送 a0,如果为从那么发送 b0
; 1f7h 如果要检测的设备为 ATA 设备那么发送 ec
如果为 ATAPI 设备那么发送 a1
2.3等待硬盘就绪
2.4将返回信息读回
; 注意一定要读满 100h 个字长。也就是寄存器中的所有信息
2.5返回的信息中,型号、序列号、版本号为字形式
; 需要整理到字符串的形式
3、代码及前面板



注意:此程序只在XP下对并口硬盘做了测试。对串口(SATA)硬盘的测试失败。VISTA下由于安全原因可能会被禁止,请将程序保护的选项去除。这个没有详细测试,希望安装了VISTA系统的朋友测试一下,把结果共享出来。
上面图即为程序的全部代码。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

下面的项目包括一个机器人完成各种任务。这是通过在机器人上使用和实现各种传感器来完成的。机器人能够在一个封闭的区域内移动,收集球,并在最后的一个点上放下球。机器人将绘制出它去过的位置和该区域内的障碍物。

关键字: 传感器 机器人 LabVIEW

NI提供的软件包经济省时,不仅帮助开发人员节省时间,还为创客提供了新的机遇

关键字: LabVIEW 自动化测试系统

强大的图形化编程工具使整个测试和测量过程的各个方面实现可视化

关键字: LabVIEW 图形化编程工具

摘要:对于每一型新机试飞,或者是重大的研究性试飞和验证试飞,都必须实施遥测监控。现基于TTS(TextToSpeech)语音合成技术,结合飞行试验遥测监控系统的不足,利用TTS引擎在LabVIEW开发环境下设计并实现了遥...

关键字: 飞行试验遥测监控系统 TTS LabVIEW

在科研以及应用软件领域,LabVIEW和MATLAB作为比较常用的2款工具,相信很多人都用过吧。简单的概括一下,LabVIEW侧重测试测量和数据采集,MATLAB侧重科学计算和数据分析。

关键字: LabVIEW matlab 混合编程

摘要:利用单片机和虚拟仪器LabVIEW在PC端设计了温湿度测量及控制系统,用于温湿度数据监测。该系统上位机为PC端监控界面,下位机为单片机,单片机采集温湿度数据,并将采集到的数据通过串口发送给监控界面进行监测和管理。该...

关键字: DHT11 LabVIEW 单片机

摘要:当前闭环步进电机在自动化设备中的应用越来越广泛,故为了进一步满足闭环步进电机的应用需求,采用LabVIEW上位机+运动控制卡+驱动器模块的控制方案进行了多轴运动系统的设计,通过设计的上位机软件实现闭环步进电机的实时...

关键字: 闭环步进电机 精度测试 LabVIEW

摘要:为满足某扭矩检测试验标准要求,基于LabView设计开发了一款扭矩检测装置,该装置能检测某类零部件的断裂力矩,满足试验标准要求,其他零部件的扭矩也可在该装置上检测。类似的扭矩装置可参考该装置进行设计。

关键字: 伺服电机 LabVIEW PLC

在下述的内容中,小编将会对LabVIEW的相关消息予以报道,如果LabVIEW是您想要了解的焦点之一,不妨和小编共同阅读这篇文章哦。

关键字: LabVIEW 测试测量 NI

一直以来,LABVIEW都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来LABVIEW的相关介绍,详细内容请看下文。

关键字: LabVIEW 测试测量 测试仪器
关闭