📄 tcsylist.h
字号:
/////////////////////////////////////////////////////////////////////////////
// TcsyList.h 扇区内注册管理双向链表类声明及实现,标准C++版本
// CopyRight(C) 1996,2008 TCSY 公司
// Pentium Working Room ShanChengKun 2004.05.27 更新
/////////////////////////////////////////////////////////////////////////////
#ifndef TCSY_LIST_H
#define TCSY_LIST_H
/////////////////////////////////////////////////////////////////////////////
// 自定义二进制流匹配算法类(改进Boyer-Moore-Horspool算法)
class CSearchBin
{
long m_BinEntry[256]; // 256级计数入口
const BYTE *m_byPattern; // 模板区域指针
long m_nLenPatt; // 模板的长度
long m_nSearchStyle; // 查找的方式
public:
CSearchBin(); // 默认构造函数
CSearchBin(const BYTE *byPattern, long nLenPatt, long nStyle);
void SetBinEntry(const BYTE *byPattern, long nLenPatt, long nStyle);
long FindBin(const BYTE *byStream, long nLength);
long FindBinEx(const BYTE *byStream, long nLength, BYTE byToken = '?');
static BYTE ToUpper(BYTE byData) // 小写转成大写
{
return ((byData >= 'a' && byData <= 'z') ? (byData - 32) : byData);
}
static void ReviseTokenPatt(BYTE *&pDes, long &nDesLen,
long nStyle, BYTE byToken = '?'); // 修正通配符串
static BYTE *SearchEmptyArea(BYTE bySrc[], long nSrcLen,
long nEmptyLen, BYTE byEmpty = 0x00); // 搜索连续空域
};
/////////////////////////////////////////////////////////////////////////////
#include "MemMapFile.h" // 映象文件
#define USE_WHICH_DISK 1 // 逻辑物理
#if USE_WHICH_DISK == 0
#define USE_DISK_NUM 2 // 用逻辑C:
#else
#define USE_DISK_NUM 0 // 用物理0:
#endif
#ifndef DISK_SECTOR_SIZE
#define DISK_SECTOR_SIZE 512L // 扇区大小
#endif
#define READ_SECT 0 // 读取扇区
#define WRITE_SECT 1 // 写入扇区
#define MIN_SECT_NUM 2L // 开始扇区
#define MAX_SECT_NUM 62L // 结束扇区
#define DEL_SUCCESS 0 // 成功删除
#define DEL_EMPTYLIST 1 // 已经删空
#define DEL_FAILURE 2 // 删除失败
#define ALL_ACCESS 0x00 // 扇区文件
#define NO_ENOUGH 0x01 // 非管理员
#define SCSI_DISK 0x02 // SCSI磁盘
#define SCK_REG_HEAD_FLAG "TcsyRegistHeader" // 注册标头
#define SCK_REG_ITEM_FLAG "TcsyItem" // 单元标识
#define BYTE_EMPTY 0x00 // 字节空闲
#define BYTE_FILLIN 0x48 // 字节填充
#define OFFSET(c, m) ((LONG)( (BYTE *)(&c.m) - (BYTE *)(&c) ))
#define EXTEND_BYTES 5 // 延05字节
#define NEW_RECSIZE (sizeof(BYTE) + sizeof(WORD)) // 区标大小
#define ZNN_FILE_SIZE (DISK_SECTOR_SIZE * (MAX_SECT_NUM + 1L))
#define ZNN_REG_HEAD_FLAG "FileRegistHeader" // 文件标头
#define REG_LIMIT_DAYS 7300L // 限制天数
#define NONEED_REGIST 0x00L // 无须注册
#define ADDNEW_REGIST 0x01L // 新增注册
#define UPDATE_REGIST 0x02L // 更新注册
//-------------------------------------------------------------------------//
// 明文(字符串):"C:\RECYCLER\"=一般加密 // WinNT用户
static const BYTE PATH_BASE_NT[] =
{
0xE6, 0x9F, 0xF9, 0xF7, 0xE0, 0xE6, 0xFC,
0xE6, 0xE9, 0xE0, 0xF7, 0xF9, 0xA5
};
// 明文(字符串):"C:\RECYCLED\"=一般加密 // Win9X用户
static const BYTE PATH_BASE_9X[] =
{
0xE6, 0x9F, 0xF9, 0xF7, 0xE0, 0xE6, 0xFC,
0xE6, 0xE9, 0xE0, 0xE1, 0xF9, 0xA5
};
// 明文(字符串):"System32.Znn"=一般加密 // 文件名称
static const BYTE ZNN_FILE_NAME[] =
{
0xF6, 0xDC, 0xD6, 0xD1, 0xC0, 0xC8, 0x96,
0x97, 0x8B, 0xFF, 0xCB, 0xCB, 0xA5
};
// 明文(字符串):"...超过了使用期限..."=一般加密 // 时限提示
static const BYTE LIMIT_TIME_PROMPT[] =
{
0x12, 0x62, 0x16, 0x06, 0x1D, 0x75, 0x75, 0x1E, 0x61, 0x5F,
0x6F, 0x1C, 0x76, 0x66, 0x69, 0x49, 0x16, 0x6A, 0x6F, 0x07,
0x77, 0x10, 0x10, 0x61, 0x73, 0x1D, 0x6B, 0x63, 0x6D, 0x48,
0x19, 0x5B, 0x17, 0x5F, 0x63, 0x12, 0x06, 0x04, 0xA8, 0xA8,
0x10, 0x0E, 0x77, 0x74, 0x1B, 0x08, 0x16, 0x09, 0x1C, 0x58,
0x64, 0x6E, 0x6F, 0x1C, 0x76, 0x66, 0x63, 0x7F, 0x6A, 0x7B,
0x06, 0x09, 0x6D, 0x42, 0x1C, 0x5E, 0x61, 0x5F, 0x1E, 0x1C,
0x6A, 0x4E, 0x19, 0x69, 0x75, 0x5D, 0xA8, 0xA8, 0x70, 0x58,
0x16, 0x06, 0x6F, 0x1C, 0x76, 0x66, 0x14, 0x1B, 0x17, 0x5F,
0x63, 0x12, 0x06, 0x09, 0x62, 0x4E, 0x71, 0x7F, 0x74, 0x04,
0x6D, 0x12, 0x13, 0x0D, 0x1F, 0x56, 0x18, 0x5D, 0x75, 0x75,
0x72, 0x07, 0x17, 0x44, 0x06, 0x04, 0xA5
};
// 明文(字符串):"...管理员权限登录..."=一般加密 // 时限提示
static const BYTE NOT_ADMIN_PROMPT[] =
{
0x1D, 0x75, 0x75, 0x1E, 0x61, 0x5F, 0x74, 0x04, 0x71, 0x54,
0x69, 0x49, 0x16, 0x6A, 0x6F, 0x07, 0x77, 0x10, 0x10, 0x61,
0x73, 0x1D, 0x6B, 0x63, 0x6D, 0x48, 0x19, 0x5B, 0x17, 0x5F,
0x63, 0x12, 0x06, 0x04, 0x10, 0x0E, 0x73, 0x1E, 0x76, 0x75,
0xA8, 0xA8, 0x72, 0x07, 0x17, 0x44, 0x1F, 0x56, 0x17, 0x60,
0x61, 0x79, 0x70, 0x58, 0x16, 0x06, 0x6F, 0x1C, 0x76, 0x66,
0x6E, 0x5C, 0x76, 0x75, 0x1C, 0x03, 0x61, 0x79, 0x04, 0x06,
0x72, 0x07, 0x17, 0x44, 0x14, 0x1B, 0x6D, 0x48, 0x19, 0x5B,
0x75, 0x4E, 0xA8, 0xA8, 0x76, 0x66, 0x1E, 0x02, 0x77, 0x71,
0x1C, 0x79, 0x65, 0x48, 0x71, 0x14, 0x6D, 0x0D, 0x6A, 0x7B,
0x10, 0x62, 0x67, 0x19, 0x6A, 0x10, 0x68, 0x16, 0x06, 0x09,
0x62, 0x4E, 0x61, 0x5F, 0x72, 0x07, 0x6A, 0x5F, 0x1F, 0x56,
0x73, 0x7D, 0x75, 0x67, 0xA8, 0xA8, 0x10, 0x62, 0x67, 0x19,
0x06, 0x09, 0x1E, 0x57, 0x70, 0x7A, 0x76, 0x4E, 0x6A, 0x10,
0x68, 0x16, 0x1C, 0x79, 0x65, 0x48, 0x71, 0x14, 0x64, 0x0F,
0x6A, 0x10, 0x06, 0x04, 0xA5
};
// Znn008的出生日期,用于DIY唯一序列号的安装日期
static const BYTE ZNN008_BIRTH[8] =
{
19, 81, 8, 7, 18, 18, 18, 18
};
/////////////////////////////////////////////////////////////////////////////
// 自定义用户注册数据的详细结构:可自定时限
struct STcsyRegistData
{
BYTE byProductNum[16]; // 产品标号
DWORD dwLimitDays; // 限制天数
BYTE byFirstSetup[8]; // 安装日期
BYTE byRecentRun[8]; // 最近运行
BYTE byUserName[16]; // 用户名称
BYTE byRegistCode[32]; // 注册码SN
STcsyRegistData() // 构造函数
{
memset(byProductNum, 0x00, sizeof(byProductNum));
dwLimitDays = 0x00;
memset(byFirstSetup, 0x00, sizeof(byFirstSetup));
memset(byRecentRun, 0xFF, sizeof(byRecentRun));
memset(byUserName, 0x00, sizeof(byUserName));
memset(byRegistCode, 0x00, sizeof(byRegistCode));
} // 置默认值
};
//-------------------------------------------------------------------------//
// 自定义与注册对话框进行数据交换的结构
typedef struct _SckRegistExchange
{
CHAR chProduct[16]; // 软件产品号IN
CHAR chReturn[100]; // 生成返回码IN
CHAR chNameID[16]; // 返回用户名OUT
CHAR chRegist[33]; // 返回注册码OUT
}
SckRegistExchange, *PSckRegistExchange;
//-------------------------------------------------------------------------//
// 自定义TCSY_REGISTPRODUCT的入口命令参数
typedef struct _SckRegistOrder
{
HWND hWndParent; // 父窗口的句柄
BYTE byProductNum[16]; // 产品序号指针
DWORD dwLimitDays; // 时间限制长度
BOOL bRegistResult; // 返回结果标志
CHAR chHDiskSN[MAX_PATH]; // 自定义序列号
}
SckRegistOrder, *PSckRegistOrder;
//-------------------------------------------------------------------------//
// 模拟扇区映象的Znn格式文件的标头定义
struct SFileRegistHead
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -