// 高级命令字 #define RY_FIND 1 //找锁 #define RY_FIND_NEXT 2 //找下一锁 #define RY_OPEN 3 //打开锁 #define RY_CLOSE 4 //关闭锁 #define RY_READ 5 //读锁 #define RY_WRITE 6 //写锁 #define RY_RANDOM 7 //产生随机数 #define RY_SEED 8 //产生种子码 #define RY_WRITE_USERID 9 //写用户 ID #define RY_READ_USERID 10(A) //读用户 ID #define RY_SET_MOUDLE 11(B) //设置模块字 #define RY_CHECK_MOUDLE 12(C) //检查模块状态 #define RY_WRITE_ARITHMETIC 13(D) //写算法 #define RY_CALCULATE1 14(E) //计算 1 #define RY_CALCULATE2 15(F) //计算 2 #define RY_CALCULATE3 16(10) //计算 3 #define RY_DECREASE 17(11) //递减模块单元 // 错误码 #define ERR_SUCCESS 0 //没有错误 #define ERR_NO_PARALLEL_PORT 1 //此机没有并口 #define ERR_NO_DRIVER 2 //没安装驱动程序 #define ERR_NO_ROCKEY 3 //并口上没有 Rockey 锁 #define ERR_INVALID_PASSWORD 4 //并口上有 Rockey 锁, 但基本密码(pass1, pass2)错 #define ERR_INVALID_PASSWORD_OR_ID 5 //错误的密码或硬件 ID #define ERR_SETID 6 //设置硬件 ID 错 #define ERR_INVALID_ADDR_OR_SIZE 7 //读写地址或长度有误 #define ERR_UNKNOWN_COMMAND 8 //没有此命令 #define ERR_NOTBELEVEL3 9 //内部错误 #define ERR_READ 10 //读数据错 #define ERR_WRITE 11 //写数据错 #define ERR_RANDOM 12 //随机数错 #define ERR_SEED 13 //种子码错 #define ERR_CALCULATE 14 //计算错 #define ERR_NO_OPEN 15 //在操作前没有打开锁 #define ERR_OPEN_OVERFLOW 16 //打开的锁太多(>16) #define ERR_NOMORE 17 //找不到更多的锁 #define ERR_NEED_FIND 18 //没有 Find 直接用了 FindNext #define ERR_DECREASE 19 //递减错 #define ERR_AR_BADCOMMAND 20 //算法指令错 #define ERR_AR_UNKNOWN_OPCODE 21 //算法运算符错 #define ERR_AR_WRONGBEGIN 22 //算法第一条指令含有常数 #define ERR_AR_WRONG_END 23 //算法最后一条指令含有常数 #define ERR_AR_VALUEOVERFLOW 24 //算法中常数值 > 63 #define ERR_UNKNOWN 0xffff //未知错误 #define ERR_RECEIVE_NULL 0x100 //接收不到 #define ERR_PRNPORT_BUSY 0x101 //打印口忙 /* 基本格式: (1) 查找锁 输入参数: function = 0 *p1 = pass1 *p2 = pass2 *p3 = pass3 *p4 = pass4 返回: *lp1 为锁的硬件 ID 返回为 0 表示成功, 其它为错误码 (2) 查找下一锁 输入参数: function = 1 *p1 = pass1 *p2 = pass2 *p3 = pass3 *p4 = pass4 返回: *lp1 为锁的硬件 ID 返回为 0 表示成功, 其它为错误码 (3) 打开锁 输入参数: function = 2 *p1 = pass1 *p2 = pass2 *p3 = pass3 *p4 = pass4 *lp1 = 硬件 ID 返回: *handle 为锁的句柄 返回为 0 表示成功, 其它为错误码 (4) 关闭锁 输入参数: function = 3 *handle = 锁的句柄 返回: 返回为 0 表示成功, 其它为错误码 (5) 读锁 输入参数: function = 4 *handle = 锁的句柄 *p1 = pos *p2 = length buffer = 缓冲区的指针 返回: buffer 中添入读入的内容 返回为 0 表示成功, 其它为错误码 (6) 写锁 function = 5 *handle = 锁的句柄 *p1 = pos *p2 = length buffer = 缓冲区的指针 返回: 返回为 0 表示成功, 其它为错误码 (7) 随机数 function = 6 *handle = 锁的句柄 返回: *p1 = 随机数 返回为 0 表示成功, 其它为错误码 (8) 种子码 function = 7 *handle = 锁的句柄 *lp2 = 种子码 返回: *p1 = 返回码1 *p2 = 返回码2 *p3 = 返回码3 *p4 = 返回码4 返回为 0 表示成功, 其它为错误码 (9) 写用户 ID [*] function = 8 *handle = 锁的句柄 *lp1 = 用户 ID 返回: 返回为 0 表示成功, 其它为错误码 (10) 读用户 ID function = 9 *handle = 锁的句柄 返回: *lp1 = 用户 ID 返回为 0 表示成功, 其它为错误码 (11) 设置模块 [*] function = 10 *handle = 锁的句柄 *p1 = 模块号 *p2 = 用户模块密码 *p3 = 是否允许递减 (1 = 允许, 0 = 不允许) 返回: 返回为 0 表示成功, 其它为错误码 (12) 检查模块是否有效 function = 11 *handle = 锁的句柄 *p1 = 模块号 返回: *p2 = 1 表示此模块有效 *p3 = 1 表示此模块可以递减 返回为 0 表示成功, 其它为错误码 (13) 写算法 [*] function = 12 *handle = 锁的句柄 *p1 = pos buffer = 算法指令串 返回: 返回为 0 表示成功, 其它为错误码 (14) 计算1 (模块字, ID 高位, ID 低位, 随机数) function = 13 *handle = 锁的句柄 *lp1 = 计算起始点 *lp2 = 模块号 *p1 = 输入值1 *p2 = 输入值2 *p3 = 输入值3 *p4 = 输入值4 返回: *p1 = 返回值1 *p2 = 返回值2 *p3 = 返回值3 *p4 = 返回值4 返回为 0 表示成功, 其它为错误码 (15) 计算2 function = 14 *handle = 锁的句柄 *lp1 = 计算起始点 *lp2 = 种子码 *p1 = 输入值1 *p2 = 输入值2 *p3 = 输入值3 *p4 = 输入值4 返回: *p1 = 返回值1 *p2 = 返回值2 *p3 = 返回值3 *p4 = 返回值4 返回为 0 表示成功, 其它为错误码 (16) 计算3 function = 15 *handle = 锁的句柄 *lp1 = 计算起始点 *lp2 = 密码起始地址 *p1 = 输入值1 *p2 = 输入值2 *p3 = 输入值3 *p4 = 输入值4 返回: *p1 = 返回值1 *p2 = 返回值2 *p3 = 返回值3 *p4 = 返回值4 返回为 0 表示成功, 其它为错误码 (17) 递减 function = 16 *handle = 锁的句柄 *p1 = 模块号 返回为 0 表示成功, 其它为错误码 */ #ifdef __cplusplus extern "C" { #endif WORD Rockey(WORD function, WORD* handle, DWORD* lp1, DWORD* lp2, WORD* p1, WORD* p2, WORD* p3, WORD* p4, BYTE* buffer); #ifdef __cplusplus } #endif 微狗开发商手册 第五章使用API 接口函数完成加密 调用API 函数进行加密,可以灵活的设置加密点,隐蔽性较好,可以具有很高 的加密强度。调用API 函数进行加密又称内嵌式加密。采用内嵌式加密还能够方便 地做成限制使用次数、使用时间等功能的试用版软件。对于外壳工具无法加密的 CPL、OCX 等特殊程序也可以通过这种内嵌方式完成加密。 以下所有的全局变量说明和函数说明对并口狗和USB 狗都适用。 程序正常执行或者直接使 用返回的值参与运算,有 狗正常执行。 在您的程序中 调用微狗提供的函数 调用成功? 函数调用成功,DogData 中返回正 确的狗中数据或者DogResult 中返 回微狗变换的值。 函数调用成功返回 值为0。 返回值不为0 或返回的 变量值不对,程序退出 或进行其他处理。 全局变量说明 unsigned short DogAddr 对微狗读写操作时用户区中的首地址。取值范围为0~199。 unsigned short DogBytes 对微狗读写或变换时操作的字节长度。读写时取值范围为1~200,并且与 DogAddr 之和不能超过200;变换时取值范围为1~63。 void * DogData 指针型变量。指向读、写操作或变换的数据缓冲区。 unsigned long DogPassword 开发商通过此参数输入微狗密码。读写操作时微狗要校验此参数是否和微狗密 码相同,如果不相同则读写失败。出厂时硬件狗密码设为0。开发商可以用开发商 工具DogEdt32.EXE 设置自己的微狗密码。 unsigned long DogResult 此参数存储变换后的结果。 unsigned char DogCascade 微狗的级联号,所有对硬件狗操作都应对此变量赋值。此变量取值范围在0 到 15 之间,缺省值为0。微狗的Win32 模块支持微狗的同号狗级联。对USB 狗此值 必须为0。 unsigned long NewPassword 仅在设置新密码时使用。 函数说明 unsigned long far(*注) DogCheck() 微狗开发商手册 第62 页 输入参数:DogCascade。 输出参数:无。 返回值:0 表示操作成功。其他值是错误码。 功能:检查并口狗是否插在并口上或USB 狗是否插在USB 口上。 *注因开发工具的环境不同而定,在小模式必须有此定义。 unsigned long far DogConvert() 输入参数:DogCascade,DogBytes,DogData。 输出参数:DogResult。 返回值:0 表示操作成功。其他值是错误码。 功能:函数把DogData 指向的数据发送给并口狗或USB 狗,发送的字节数为 DogBytes。硬件狗将数据通过一定算法进行变换(不同的硬件狗算法也 不同),返回的32 位变换结果存入DogResult。变换的算法可以由开发 商指定。硬件狗中200 字节存储区的最后4 字节对变换算法有影响。第 196 字节选择算法,因此共有256 种算法。第197,198,199 共三个字 节,是每种算法的因子,有16,777,216 种变化。 unsigned long far WriteDog() 输入参数:DogCascade,DogAddr,DogBytes,DogData,DogPassword。 输出参数:无。 返回值:0 表示操作成功。其他值是错误码。 功能:函数把DogData 指向的数据写入硬件狗中从DogAddr 开始的存储区中, 写入的字节数为DogBytes。写操作时硬件狗要校验DogPassword。 unsigned long far ReadDog() 输入参数:DogCascade,DogAddr,DogBytes,DogData,DogPassword。 输出参数:DogData。 微狗开发商手册 第63 页 返回值:0 表示操作成功。其他值是错误码。 功能:函数从硬件狗中的DogAddr 开始的存储区读出数据,存入DogData 指定 的缓冲区,读出字节数为DogBytes。缓冲区的大小要足够长,读操作时 硬件狗要校验DogPassword。 unsigned long far GetCurrentNo() 输入参数:DogCascade, DogData。 输出参数:DogData。 返回值:0 表示操作成功。其他值是错误码。 功能:读取硬件狗的流水号。每个硬件狗都有一个唯一的流水号,即使同号狗 也是一样。流水号可以辅助开发商进行用户管理。 unsigned long far DisableShare() 输入参数:DogCascade。 输出参数:无。 返回值:0 表示操作成功。其他值是错误码。 功能:禁止多台计算机通过并口共享器共享一个并口狗。并口共享器是一个第 三方提供的设备,这种设备可以实现多台计算机共享一个并口狗。这样, 一套加密软件就可以在多台计算机上运行了。微狗出厂时的缺省方式是 允许共享,但可以用DisableShare 函数禁止共享。 DisableShare 只影响ReadDog,WriteDog,DogConvert。开发商如果想禁止 共享,只需要在调用ReadDog,WriteDog,DogConvert 之前先调用一次 DisableShare 即可。 * 注意:请不要多次调用DisableShare 函数,一个程序应当只调用一次 DisableShare。 新增函数 在Win32 C 的OBJ 中新增了两个接口函数。使用这两个函数开发商可以自己编 微狗开发商手册 程修改Password、Cascade,不必在程序加密中使用。 unsigned long SetPassword(void) 输入参数: DogCascade:狗的级联号 DogPassword:旧密码 NewPassword:新密码 输出参数:无 返回值: 0 表示操作成功。其他值是错误码。 功能:设置新密码 unsigned long SetDogCascade(void) 输入参数:DogCascade, DogPassword, DogData。 输出参数:无 返回值: 0 表示操作成功。其他值是错误码。 功能:设置微狗的级联码,其中DogData 为新的级联码的地址,级联码的取值 范围为0 到15。 微狗开发套件的DOS16 和WIN16 模块在Windows 98/ME 和Windows 2000/XP 操作系统下运行时只能操作UMA 型、UMB 型USB 狗,不能操作UMC 型USB 狗。操作PMH 型微狗不受操作系统限制。 如何保护DOS/扩展DOS程序 等。 5 7 8 10 14 15 16等功能需要数据 |
联系客服