分享

飞天ROCKEY狗的API函数及错误码

 tsrjssnn 2011-02-13

飞天ROCKEY狗的API函数及错误码

// 高级命令字
#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等功能需要数据

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多