
dll作用一 一些模块压入dll文件之后,在要运行程序的时候只需要调用动态链接库就可以了,而并不需要把dll加载到内存中,节省了大量的内存空间,可以方便运行其他的程序二 很大的游戏中,通常需要调用许许多多的动态要实现这样一个效果,需要许多程序员编写不同的dll来互相协助,那么这些dll可以用vc++,vb,delphi,asm等等来完成,只要每个程序员负责编写一个功能,这样只要调用在一起就方便多了,节省了大量的人力,物力,财力链接库来给玩家一个美观震撼的效果三 启动的时候,错误对话框中提示dll文件丢失这是因为在卸载文件时会提醒你删除某个dll文件可能会影响其他应用程序的运行。在下面这个实例中将通过动态加载libmymath.so链接库,来调用add()和sub()两个函数。题外话,so库的使用本身就是一种最纯粹的动态加载技术,so库本身不参与apk的编译过程,使用jni调用so库里的native方法的方式看上去也像是一种“硬编程”,native方法看上去与一般的java静态方法没什么区别,但是它的具体实现却是可以随时动态更换的(更换so库就好),这也可以用来实现热修复的方案,与java方法一旦加载进内存就无法再次更换不同,native方法不需要重启app就可以随意更换。
这种方式在一个论坛上看见过,本想参考参考,不过楼主把VI加密了,索性自己做一个和大家分享,讨论讨论。
本程序读取的是硬盘的物理序列号,不同于DLL调用的方法,本方法获取的是硬盘唯一真正物理ID(是固化在硬盘BISO里的SN不是分区的SN),不会出现重复,也不可能被修改(或者说难度很大,而且还有危险,网上看到过说一个叫PC-3000的可以修改,没有尝试过,有哪位胆大拿自己硬盘试验一下,把结果共享一下吧)。可用在软件加密中。
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、操作
在数据“读/写”过程中,hhd需要借助“读/写”传动臂在硬盘删去进行物感性移动来实现数据读写操作,因此,hhd善于读取按次序存储在扇区内和扇区间的数据,这样“读/写”传动臂的移动起码。设有一组共享数据db和两组并发进程, 一组进程只对此组数据执行 读操作, 另一组进程可对此组数据执行写操作(当然同时也可以执行读 操作),我们将前一组进程称作读者,后一组进程称作写者.为了保 证共享数据的完整性,要求: (1)多个读者的操作可以同时进行。然后才能将这些单元操作组合成读数据,写数据等操作(上面说过比如读操作他并不是一个简单的命令而是一系列操作,你要片选使能,然后发命令(读命令),。

接下来的工作就很简单了。大致流程就是下面这样了:
2.1等待硬盘就绪
2.2发送命令
; 如果向主控制发送命令,则端口为 1f0h-1f7h
; 如果向副控制发送命令labview序列号,则端口为 170h-177h

; 1f6h 如果要检测的设备为该IDE接口的主(MASTER)设备,
那么发送 a0,如果为从那么发送 b0
; 1f7h 如果要检测的设备为 ATA 设备那么发送 ec
如果为 ATAPI 设备那么发送 a1
2.3等待硬盘就绪
2.4将返回信息读回
; 注意一定要读满 100h 个字长。也就是寄存器中的所有信息
2.5返回的信息中,型号、序列号、版本号为字形式
; 需要整理到字符串的形式
3、代码及前面板

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

加入微信
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-103624-1.html
人家只是分析情况
听着歌
但这些是极少数
很棒