①向端口3F6写入控制字节,建立相应的硬盘控制方式;
②检验硬盘控制器和驱动器的状态(检测端口的第7和第6两位),崐如果控制器空闲而且驱动器就绪,即可输入命令;
③完整的输入7个字节长度的命令块,一次写入端口1F1H-1F7H,崐不论是否需要,端口1F1H-1F6H对应的前6个字节的参数必须读出,崐端口1F7H的输出命令码为“0ECH”;
④检测端口1F7H的第7和第3两位,如果控制器空闲且第3位置1,崐表示操作结束,即可读取结果;
⑤通过端口1F0H读取100H字节到缓冲区;
⑥再次读取端口1F7H, 判断第0位是否为0,如果为0,表示命崐令成功,否则表示命令失败;
读出的256字节信息的主要内容如下:
┏━━━━┯━━━━━━━━━┯━━━━━┓
┃ 偏移量 │ 内 容 │长度(字节)┃
┠────┼─────────┼─────┨
┃02H │柱面数 │2 ┃
┃06H │磁头数 │2 ┃
┃08H │每磁道所含的字节数│2 ┃
┃0AH │没扇区所含的字节数│2 ┃
┃0CH │每磁道所含的扇区数│2 ┃
┃14H │产品的序列号 │20 ┃
┃2AH │硬盘缓冲区容量 │2 ┃
┃2CH │ECC校验码的长度 │2 ┃
┃2EH │硬件修正号 │8 ┃
┃36H │硬盘型号 │40 ┃
┗━━━━┷━━━━━━━━━┷━━━━━┛
在上表的内容中,产品的序列号等信息是具有唯一性的信息,崐可以在软件注册器中使用。
二、软件注册器实现的软件原理
软件注册器的原理和数字签名类似,可以从上述的数据中选择崐用来作为注册的硬件代码的数据,对这些数据进行加密变换(本文崐的例子中是把硬盘的出厂编号和硬盘类型的前十个字节进行异或运崐算)生成硬件代码后,提供给用户,由用户用这个硬件代码向作者崐注册,作者收到这个硬件代码和注册费后,对用户提供的硬件代码崐进行第二次加密变换,生成注册密码后交给用户。用户得到这个密崐码后,用注册器写入应用软件中,注册器写入时也可以再进行一次崐加密运算。
应用软件运行时,利用这个密码进行上述加密过程的逆运算得崐到硬盘的唯一性信息,和硬盘中的相应信息进行比较;或者用硬盘崐的唯一性信息进行上述加密过程而得到注册密码,和写入应用软件崐中的注册密码进行比较,由此判定注册是否正确,如果正确,就认崐为注册成功,否则认为没有注册,对应用软件的功能进行限制。