⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcsylist.h

📁 这个是集合几种关于硬盘的序列号的获取方式的DLL
💻 H
📖 第 1 页 / 共 2 页
字号:
{
	BYTE  byHeadFlag[16];							// 有效标识
	DWORD dwHeadSize;								// 标头大小
	BOOL  bUpdateRecent;							// 最近更新
	BYTE  byRecentRun[8];							// 最近更新
	DWORD dwValCRC32;								// 校验码值

	BOOL EncodeHead(BOOL bUpdate)					// 打包标头
	{
		memcpy(byHeadFlag, ZNN_REG_HEAD_FLAG, sizeof(byHeadFlag));
		dwHeadSize = sizeof(SFileRegistHead);
		bUpdateRecent = bUpdate;
		if(bUpdate) {if(!GetCurrDate(byRecentRun)) return FALSE;}
		const LONG nChckSize = sizeof(SFileRegistHead) - sizeof(DWORD);
		dwValCRC32 = GenerateCRC32((BYTE *)this, nChckSize);
		BYTE byKeys[sizeof(DATA_KEYS)];
		CryptXOR(byKeys, DATA_KEYS, sizeof(DATA_KEYS));
		SckDesBin(0, (BYTE *)this, sizeof(SFileRegistHead), byKeys);
		return TRUE;
	}

	BOOL DecodeHead(VOID)							// 解包标头
	{
		BYTE byKeys[sizeof(DATA_KEYS)];
		CryptXOR(byKeys, DATA_KEYS, sizeof(DATA_KEYS));
		SckDesBin(1, (BYTE *)this, sizeof(SFileRegistHead), byKeys);
		if(memcmp(byHeadFlag, ZNN_REG_HEAD_FLAG, sizeof(byHeadFlag)))
			return FALSE;
		if(dwHeadSize != sizeof(SFileRegistHead)) return FALSE;
		const LONG nChckSize = sizeof(SFileRegistHead) - sizeof(DWORD);
		return (dwValCRC32 == GenerateCRC32((BYTE *)this, nChckSize));
	}

	SFileRegistHead()								// 构造函数
	{
		memcpy(byHeadFlag, ZNN_REG_HEAD_FLAG, sizeof(byHeadFlag));
		dwHeadSize = sizeof(SFileRegistHead);
		bUpdateRecent = FALSE;
		memset(byRecentRun, 0xFF, sizeof(byRecentRun));
		dwValCRC32 = 0;
	}												// 置默认值
};

//=========================================================================//

// 自定义数据所处的扇区位置,在扇区内的字节偏移
struct STcsyRegistAddr
{
	DWORD dwSectNum;								// 第几扇区
	LONG  nByteOffs;								// 区内偏移

	STcsyRegistAddr()								// 构造函数
	{
		dwSectNum = 0; nByteOffs = 0;
	}
	VOID Set(DWORD dw = 0L, LONG n = 0L)			// 复位函数
	{
		dwSectNum = dw; nByteOffs = n;
	}												// 置默认值
};

//-------------------------------------------------------------------------//

// 自定义扇区内注册数据单元条:扇区内实体
struct STcsyRegistItem
{
	BYTE  byItemFlag[8];							// 有效标识
	STcsyRegistData RegData;						// 注册数据
	STcsyRegistAddr AddrPrior;						// 上单元位
	STcsyRegistAddr AddrNext;						// 下单元位
	STcsyRegistAddr AddrSelf;						// 本身位置
	DWORD dwValCRC32;								// 校验码值

	STcsyRegistItem()								// 构造函数
	{
		memcpy(byItemFlag, SCK_REG_ITEM_FLAG, sizeof(byItemFlag));
		dwValCRC32 = 0;
	}												// 置默认值
};

//-------------------------------------------------------------------------//

// 自定义扇区内注册类头:扇区内实体
struct STcsyRegistHead
{
	BYTE  byHeadFlag[16];							// 有效标识
	LONG  nItemCount;								// 单元个数
	STcsyRegistAddr AddrStart;						// 起始单元
	STcsyRegistAddr AddrEnd;						// 结束单元
	STcsyRegistAddr AddrSelf;						// 本身位置
	DWORD dwValCRC32;								// 校验码值

	STcsyRegistHead()								// 构造函数
	{
		memcpy(byHeadFlag, SCK_REG_HEAD_FLAG, sizeof(byHeadFlag));
		nItemCount = -1; // Indicate NOT load list from disk
		dwValCRC32 = 0;
	}												// 置默认值
};

//-------------------------------------------------------------------------//

// 自定义扇区内注册数据结点位:内存中实体
struct STcsyRegistNode
{
	STcsyRegistItem  ItemData;						// 单元数据
	STcsyRegistNode  *PtrPrior;						// 上节点位
	STcsyRegistNode  *PtrNext;						// 下节点位

	STcsyRegistNode()								// 构造函数
	{
		PtrPrior = PtrNext = NULL;
	}												// 置默认值
};

/////////////////////////////////////////////////////////////////////////////

// 自定义扇区内注册管理双向链表类:主控制类
class CTcsyRegistList
{
	LONG m_nOperAlow;								// 操作类型
	CHAR m_chFileName[MAX_PATH];					// 文件路径
	CMemMapFile m_ZnnFile;							// 映象文件
	BOOL m_bUserRegisted;							// 是否注册
	STcsyRegistAddr AddrRegist;						// 登陆地址
	BOOL m_bFirstRunRegist;							// 首次注册

	STcsyRegistHead TcsyHead;						// 扇内标头
	LONG m_nNodeCount;								// 节点个数
	STcsyRegistNode *PtrStart;						// 开始节点
	STcsyRegistNode *PtrEnd;						// 结束节点
	STcsyRegistNode *PtrCurr;						// 当前节点

	//-------------------------------------------------------//

	BOOL IsCorrectZnnFile(const CHAR *chFile);		// 校验文件
	BOOL IsZnnFileUpdate(VOID);						// 是否更新
	BOOL SaveZnnFileHead(BOOL bUpdate);				// 写入标头
	VOID WriteNewFlag(BYTE *pStart, WORD wDataSize);// 首.NEW尾

	VOID ByteToUpper(VOID *pSrc, INT nLen);			// 转为大写
	INT  ConvertStringFormat(char chDes[], const char chSrc[]);
	VOID ByteNullSet(VOID *pSrc, INT nLen);			// NULL结束
	VOID ByteNullCpy(VOID *pDes, const VOID *pSrc, INT nLen);

	INT  GenerateReturnCode(const CHAR chHdiskSn[], const BYTE byDate[],
			CHAR  chReturn[]);						// 生成返回
	INT  GenerateRegistCode(const CHAR chName[], const CHAR chProduct[],
			const CHAR chReturn[], CHAR  chRegist[]);// 生成注册
	BOOL SaveRegistFile(const STcsyRegistData &sData); // 存注册

	VOID ResetListData(VOID);						// 初始链表
	BOOL IsKeepAs(BYTE *pCurr, LONG nLen, BYTE byData);
	BOOL IsValidAddr(const STcsyRegistAddr &sAddr);	// 地址有效
	BOOL IsSameAddr(const STcsyRegistAddr &sAddr,	// 判断地址
		const STcsyRegistAddr &dAddr);				// 是否相同
	BOOL IsEnableDiskIO(VOID);						// 扇可用否

	BOOL FileSectorIO(BYTE *pSector, DWORD dwStart, LONG bOpera);
	BOOL HandleSectorIO(BYTE *pSector, DWORD dwStart, LONG bOpera);
	BOOL New(STcsyRegistAddr &sAddr, WORD wDataSize, const BYTE *pData = NULL);
	BOOL Delete(STcsyRegistAddr sAddr);				// 释放扇区

	BOOL FindUserRegist(const BYTE byProduct[], STcsyRegistItem **ppItem = NULL);
	LONG ReverseSearchValid(const STcsyRegistHead &sHead,
			const STcsyRegistAddr &eAddr, const STcsyRegistAddr &fAddr,
			STcsyRegistItem &sItem);				// 反向搜索

	BOOL SaveDiskHead(STcsyRegistHead sHead, BOOL bFileIO = FALSE);
	BOOL LoadDiskItem(STcsyRegistItem &sItem, BOOL bFileIO = FALSE);
	BOOL SaveDiskItem(STcsyRegistItem sItem, BOOL bFileIO = FALSE);

	BOOL AddEndDiskItem(STcsyRegistItem &sItem);	// 尾追单元
	LONG DelEnd(BOOL bDelItem);						// 尾删数据
	LONG DelStart(BOOL bDelItem);					// 首删数据

public:
	CTcsyRegistList();								// 构造函数
	~CTcsyRegistList();								// 析构函数

	LONG GetItemCount(VOID);						// 获取总数
	VOID GetTcsyHead(STcsyRegistHead *pHead);		// 获取标头
	BOOL FindListHeadInDisk(STcsyRegistHead *pHead);// 查找标头

	BOOL LoadListFromDisk(const STcsyRegistHead *pHead = NULL,
			BOOL bFind = TRUE);						// 装载链表
	BOOL AddEnd(const STcsyRegistData *pData);		// 尾追数据
	BOOL ReadCurr(STcsyRegistData *pData);			// 读当前节
	BOOL WriteCurr(const STcsyRegistData *pData);	// 写当前节
	LONG RemoveCurr(BOOL bDelItem);					// 移除节点

	VOID ToRewind(BOOL bEndOrNot);					// 假首真尾
	BOOL ToPrior(VOID);								// 到上一点
	BOOL ToNext(VOID);								// 到下一点

	BOOL DirectRemove(DWORD dwNumb, LONG nOffs);	// 底层直删
	BOOL DestroyList(BOOL bDelItem, BOOL bDelHead);	// 移除链表
	VOID SetFirstRunRegist(BOOL bRegist);			// 首次注册
	BOOL RegistUserProduct(SckRegistOrder *pOrder, BOOL bRegDIY = FALSE);
};

/////////////////////////////////////////////////////////////////////////////
#endif // #ifndef TCSY_LIST_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -