// SoftKey.cpp: implementation of the SoftKey class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "SoftKey.h" #include "my32.h" #pragma comment (lib,"my32.lib") #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// SoftKey::SoftKey() { } SoftKey::~SoftKey() { } //以下函数用于网络版////////////////////////////////////////////////////////////// //该函数用于连接服务器 //第一个参数为要连接的服务器名称或IP //第二个参数为连接使用的通讯端口,开发商可以自定义,但客户端的必须与服务端的端口相同,端口的范围为1024-40000 int SoftKey::ConnectSvr(TCHAR *ServerName,int Port) { return ConnectServer(ServerName,Port); } //该函数用于将指定的功能连接添加到服务器,并返回检验码 //第一个参数为授权号储存在加密锁的位置,授权号储存在加密锁的位置在开发工具写入网络授权用户数时自定义输入 //第二个参数用于返回检验码,是用于判断是否为相应的授权,如果该数值与开发工具所得的检验码相符,则为合法授权,否则为非法授权 //检验码由开发工具生成,不同的开发密钥或主锁内置密钥,生成的检验码都不相同且唯一对应 int SoftKey::ConnectAddNew(short Addr,TCHAR *OutVefCode) { //第一参数为连接的功能模块号,如果只一个功能模块,见这里固定使用0, //如果是普通网络锁则只能有唯一的一个模块,真正的网络锁支持128个功能模块 //第二个参数为授权号储存在加密锁的位置,授权号储存在加密锁的位置在开发工具写入网络授权用户数时自定义输入 //第三个参数为当连接失败时,是否关闭与服务器的连接 //第四个参数用于返回检验码,是用于判断是否为相应的授权,如果该数值与开发工具所得的检验码相符,则为合法授权,否则为非法授权 //第五个参数为加密锁所在的设备路径 return AddConnectNew(0, Addr, FALSE,OutVefCode,KeyPath); //注意:第三个参数的使用,如果不是真正的网络锁,这个参数将会忽略,并总是当连接失败时,关闭与服务器的连接 //如果是真正的网络锁,则为FALSE时,不断开与服务器的连接, } //该函数用于将指定的功能连接添加到服务器 //第一个参数为授权号储存在加密锁的位置,授权号储存在加密锁的位置在开发工具写入网络授权用户数时自定义输入 int SoftKey::ConnectAdd(short Addr) { //第一参数为连接的功能模块号,如果只一个功能模块,见这里固定使用0, //如果是普通网络锁则只能有唯一的一个模块,真正的网络锁支持128个功能模块 //第二个参数为授权号储存在加密锁的位置,授权号储存在加密锁的位置在开发工具写入网络授权用户数时自定义输入 //第三个参数为当连接失败时,是否关闭与服务器的连接 //第四个参数为加密锁所在的设备路径 return AddConnectEx(0, Addr, FALSE,KeyPath); //注意:第三个参数的使用,如果不是真正的网络锁,这个参数将会忽略,并总是当连接失败时,关闭与服务器的连接 //如果是真正的网络锁,则为FALSE时,不断开与服务器的连接, } //以下函数用于返回当前设置在加密锁中的授权数 //第一个参数与上面相同 long SoftKey::GetKeySetCount(short Addr) { long count;BOOL IsMachine;char OutFum; int ret=GetSetCount(Addr,&count,&IsMachine,&OutFum,KeyPath); if(ret!=0)return ret; return count; } //以下函数用于返回当前连接到服务的机器数 short SoftKey::GetIpCount() { //第一参数为连接的功能模块号,如果只一个功能模块,见这里固定使用0 return GetIpCountByFunNum(0); } //以下函数用于返回当前连接到服务的连接数 short SoftKey::GetConCount() { //第一参数为连接的功能模块号,如果只一个功能模块,见这里固定使用0 return GetConCountByFunNum(0); } //以下函数用于断开与服务的连接数 int SoftKey::DisConnect() { return DisconnectServer(); } //以上函函数用于网络版//////////////////////////////////////////////////////////// //在程序开始运行时,请先调用Ini过程,查找对应的加密锁所在的设备路径; //如果找到对应的加密锁,会将该路径保存在变量KeyPath中, //以备其它函数的调用; int SoftKey::Ini() { //生成该数组的表达式为:D0=123,D1=123,D2=123,D3=123,由于系统中可能存在多把加密锁,用于查找对应的加密锁 BYTE f_DecArray[26]={24,0,88,15,76,236,83,224,208,31,26,110,243,71,154,140,238,242,34,143,41,212,239,50,233,81}; return FindPort_2(0,f_DecArray,26,KeyPath); } int SoftKey::code1(long *D0, long *D1,long *D2, long *D3,long *D4, long *D5,long *D6, long *D7, double *F0, double *F1,double *F2, double *F3,double *F4, double *F5,double *F6, double *F7, char *S0, char *S1,char *S2, char *S3,char *S4, char *S5,char *S6, char *S7) { //以下是将自定义的加密表达式送到加密锁中进行运算 BYTE DecArray[66]={60,0,1,198,80,227,80,4,154,253,210,149,192,112,40,33,253,99,185,150,99,243,198,252,223,112,184,220,136,42,226, 197,221,37,34,198,138,190,122,131,92,149,209,54,175,85,152,183,31,101,234,156,13,236,204,5,173,0,117,212,114,73, 109,140,85,68}; //这里对数据进行初始化工作 //... return CalEx(DecArray, 66,D0,D1,D2,D3,D4,D5,D6,D7, F0,F1,F2,F3,F4,F5,F6,F7,S0,S1,S2,S3,S4,S5,S6,S7,KeyPath,20000); } int SoftKey::code2(long *D0, long *D1,long *D2, long *D3,long *D4, long *D5,long *D6, long *D7, double *F0, double *F1,double *F2, double *F3,double *F4, double *F5,double *F6, double *F7, char *S0, char *S1,char *S2, char *S3,char *S4, char *S5,char *S6, char *S7) { //以下是将自定义的加密表达式送到加密锁中进行运算 BYTE DecArray[58]={49,0,129,66,42,22,38,72,238,144,234,221,236,202,147,255,60,18,6,118,169,229,169,222,249,105,155,25,184,29,213, 5,51,90,19,24,176,240,119,239,233,155,234,156,45,191,89,83,92,123,2,166,149,130,58,231,198,78}; //这里对数据进行初始化工作 //... return CalEx(DecArray, 58,D0,D1,D2,D3,D4,D5,D6,D7, F0,F1,F2,F3,F4,F5,F6,F7,S0,S1,S2,S3,S4,S5,S6,S7,KeyPath,20000); } int SoftKey::pswexist(long *D0, long *D1,long *D2, long *D3,long *D4, long *D5,long *D6, long *D7, double *F0, double *F1,double *F2, double *F3,double *F4, double *F5,double *F6, double *F7, char *S0, char *S1,char *S2, char *S3,char *S4, char *S5,char *S6, char *S7) { //以下是将自定义的加密表达式送到加密锁中进行运算 BYTE DecArray[42]={37,0,139,145,163,176,66,18,207,79,166,58,182,124,1,196,175,252,26,85,137,146,119,58,76,194,151,239,204,104,18, 166,208,54,114,118,181,24,252,41,246,88}; //这里对数据进行初始化工作 //... return CalEx(DecArray, 42,D0,D1,D2,D3,D4,D5,D6,D7, F0,F1,F2,F3,F4,F5,F6,F7,S0,S1,S2,S3,S4,S5,S6,S7,KeyPath,20000); } //addtofile...请不要修改这里 void SoftKey::GetErrInfo(long err,TCHAR *ErrInfo ) { switch(err) { case -1: strcat(ErrInfo, "未找到返回结果变量"); break; case -2: strcat(ErrInfo, "未找到 = 符号"); break; case -3: strcat(ErrInfo, "代表没有找到相应常数"); break; case -5: strcat(ErrInfo, "代表找不到字符串的第一个双引号"); break; case -6: strcat(ErrInfo, "代表找不到字符串的第二个双引号"); break; case -7: strcat(ErrInfo, "IF语句没有找到goto字符"); break; case -8: strcat(ErrInfo, "IF语句没有找到第一个比较字符"); break; case -9: strcat(ErrInfo, "IF语句没有找到比较符号"); break; case -10: strcat(ErrInfo, "两边变量类型不相符"); break; case -11: strcat(ErrInfo, "没有找到NOT符号"); break; case -12: strcat(ErrInfo, "不是整形变量"); break; case -13: strcat(ErrInfo, "代表没有找到相应整形常数"); break; case -14: strcat(ErrInfo, "代表没有找到相应字符串常数"); break; case -15: strcat(ErrInfo, "代表没有找到相应浮点常数"); break; case -16: strcat(ErrInfo, "代表不支持这个运算"); break; case -17: strcat(ErrInfo, "代表没有左边括号"); break; case -18: strcat(ErrInfo, "代表没有变量"); break; case -19: strcat(ErrInfo, "代表没“,”"); break; case -20: strcat(ErrInfo, "代表没有右边括号"); break; case -21: strcat(ErrInfo, "代表常数超过指这定的范围"); break; case -22: strcat(ErrInfo, "代表储存器的地址超过指定的范围,整数不能超过EEPROM_LEN-4,浮点不能超过30720-8"); break; case -23: strcat(ErrInfo, "代表储存器的地址超过指定的范围,字符串不能超过EEPROM_LEN-LEN,其中LEN为字符串的长度"); break; case -24: strcat(ErrInfo, "除法中,被除数不能为0"); break; case -25: strcat(ErrInfo, "未知错误"); break; case -26: strcat(ErrInfo, "第二个变量不在指定的位置"); break; case -27: strcat(ErrInfo, "字符串常量超过指定的长度"); break; case -28: strcat(ErrInfo, "不是字符串变量"); break; case -29: strcat(ErrInfo, "没有第三个变量"); break; case -30: strcat(ErrInfo, "GOTO的标识语句不能全为数字"); break; case -31: strcat(ErrInfo, "不能打开ENC文件"); break; case -32: strcat(ErrInfo, "不能读ENC文件"); break; case -33: strcat(ErrInfo, "GOTO CALL不能找到指定的跳转位置"); break; case -34: strcat(ErrInfo, "智能卡运算中,未知数据类型"); break; case -35: strcat(ErrInfo, "智能卡运算中,未知代码类型"); break; case -36: strcat(ErrInfo, "字符串长度超出50"); break; case -37: strcat(ErrInfo, "RIGHT操作时超长,负长"); break; case -38: strcat(ErrInfo, "标识重复"); break; case -39: strcat(ErrInfo, "程序堆栈溢出"); break; case -40: strcat(ErrInfo, "堆栈溢出"); break; case -41: strcat(ErrInfo, "不能建立编译文件,请查看文件是否有只读属性,或被其它文件打开"); break; case -42: strcat(ErrInfo, "不能写文件,请查看文件是否有只读属性,或被其它文件打开"); break; case -43: strcat(ErrInfo, "程序被中途使用END语句结束"); break; case -44: strcat(ErrInfo, "程序跳转到外部的空间"); break; case -45: strcat(ErrInfo, "传送数据失败"); break; case -46: strcat(ErrInfo, "程序超出运算次数,可能是死循环"); break; case -47: strcat(ErrInfo, "写密码不正确"); break; case -48: strcat(ErrInfo, "读密码不正确"); break; case -49: strcat(ErrInfo, "读写EEPROM时,地址溢出"); break; case -50: strcat(ErrInfo, "USB操作失败,可能是没有找到相关的指令"); break; case -51: strcat(ErrInfo, "打开USB文件句柄失败"); break; case -52: strcat(ErrInfo, "使用加密锁加密自定义表达式,生成加密代码时生产错误"); break; case -53: strcat(ErrInfo, "无法打开usb设备,可能驱动程序没有安装或没有插入加密锁。"); break; case -63 : strcat(ErrInfo, "不能打开指定的文件。"); break; case -64: strcat(ErrInfo, "不能建立指定的文件。"); break; case -65: strcat(ErrInfo, "验证码错误,可能是输入解密密钥错误,或注册授权码错误"); break; case -66: strcat(ErrInfo, "执行TIMEOUT函数或UPDATE函数时,输入的ID与锁ID不相符"); break; case -67: strcat(ErrInfo, "执行TIMEOUT函数时,智能卡运行函数已到期"); break; case -68: strcat(ErrInfo, "操作浮点运算时,输入的参数将会导致返回值是一个无穷值"); break; case -69: strcat(ErrInfo, "代表没足够的变量参数"); break; case -70: strcat(ErrInfo, "返回变量与函数不相符"); break; case -71: strcat(ErrInfo, "浮点数转换字符串时,要转换的数据太大。"); break; case -72: strcat(ErrInfo, "初始化服务器错误"); break; case -73: strcat(ErrInfo, "对缓冲区进行MD5运算时错误"); break; case -74 : strcat(ErrInfo, "MD5验证IPVAR错误"); break; case -75 : strcat(ErrInfo, "MD5验证IPCount错误"); break; case -76 : strcat(ErrInfo, "没有找到对应的SOCKET连接"); break; case -77: strcat(ErrInfo, "没有找到要删除的对应的SOCKET连接"); break; case -78 : strcat(ErrInfo, "没有找到要删除的对应的功能模块号连接"); break; case -79: strcat(ErrInfo, "没有找到要增加的对应的功能模块号连接"); break; case -80: strcat(ErrInfo, "用户数已超过限制的授权数量"); break; case -81: strcat(ErrInfo, "找不到对应的INI文件条目"); break; case -82: strcat(ErrInfo, "没有进行初始化服务工作。"); break; case -252: strcat(ErrInfo, "密码不正确"); break; case -1088: strcat(ErrInfo, "发送数据错误"); break; case -1089: strcat(ErrInfo, "获取数据错误"); break; case -1092: strcat(ErrInfo, "找不到对应的服务端操作码"); break; case -1093: strcat(ErrInfo, "表示连接服务时错误"); break; case -1095: strcat(ErrInfo, "获取主机名称失败"); break; case -1097: strcat(ErrInfo, "建立套字接错误"); break; case -1098: strcat(ErrInfo, "绑定套字节端口错误"); break; case -1099: strcat(ErrInfo, "表示无效连接,不能进行相关的操作。"); break; case -2002: strcat(ErrInfo, "表示监听时产生错误"); break; case -2003: strcat(ErrInfo, "表示发送的数据长度与接收的数据长度不相符"); break; case -2005: strcat(ErrInfo, "表示当前服务不存在任何连接"); break; case -2006: strcat(ErrInfo, "表示当前查询节点超出集合范范围"); break; case -2009: strcat(ErrInfo, "表示关闭连接错误"); break; case -1052: strcat(ErrInfo, "可能是输入的授权号不正确。"); break; case -1053: strcat(ErrInfo,"系统上没有任何智能锁。"); break; default: strcat(ErrInfo, "未知错误代码"); } }