#include "StdAfx.h" #include "WHService.h" #include "WHEncrypt.h" ////////////////////////////////////////////////////////////////////////////////// //压缩文件 #include "Compress\ZLib.h" //链接文件 #ifndef _DEBUG #pragma comment(lib,"Version") #pragma comment(lib,"Compress\\ZLib.lib") #else #pragma comment(lib,"Version") #pragma comment(lib,"Compress\\ZLibD.lib") #endif ////////////////////////////////////////////////////////////////////////////////// //状态信息 struct tagAstatInfo { ADAPTER_STATUS AdapterStatus; //网卡状态 NAME_BUFFER NameBuff[16]; //名字缓冲 }; ////////////////////////////////////////////////////////////////////////////////// //构造函数 CWHService::CWHService() { } //拷贝字符 bool CWHService::SetClipboardString(LPCTSTR pszString) { //变量定义 HANDLE hData=NULL; BOOL bOpenClopboard=FALSE; //执行逻辑 __try { //打开拷贝 bOpenClopboard=OpenClipboard(AfxGetMainWnd()->m_hWnd); if (bOpenClopboard==FALSE) __leave; //清空拷贝 if (EmptyClipboard()==FALSE) __leave; //申请内存 HANDLE hData=GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,CountStringBuffer(pszString)); if (hData==NULL) __leave; //复制数据 lstrcpy((LPTSTR)GlobalLock(hData),pszString); GlobalUnlock(hData); //设置数据 #ifndef _UNICODE ::SetClipboardData(CF_TEXT,hData); #else ::SetClipboardData(CF_UNICODETEXT,hData); #endif } //终止程序 __finally { //释放内存 if (hData!=NULL) GlobalUnlock(hData); //关闭拷贝 if (bOpenClopboard==TRUE) CloseClipboard(); //错误判断 if (AbnormalTermination()==TRUE) { ASSERT(FALSE); } } return true; } //机器标识 bool CWHService::GetMachineID(TCHAR szMachineID[LEN_MACHINE_ID]) { //变量定义 TCHAR szMACAddress[LEN_NETWORK_ID]=TEXT(""); //网卡标识 GetMACAddress(szMACAddress); //转换信息 ASSERT(LEN_MACHINE_ID>=LEN_MD5); CWHEncrypt::MD5Encrypt(szMACAddress,szMachineID); return true; } //机器标识 bool CWHService::GetMachineIDEx(TCHAR szMachineID[LEN_MACHINE_ID]) { //变量定义 TCHAR szMACAddress[LEN_NETWORK_ID]=TEXT(""); //网卡标识 WORD wMacSize=GetMACAddress(szMACAddress); //硬盘标识 DWORD *pbuf=(DWORD*)szMACAddress; WORD wIndex=(wMacSize+sizeof(DWORD)-1)/sizeof(DWORD); LPCTSTR pszHardDisk[]={TEXT("C:\\"),TEXT("D:\\"),TEXT("E:\\")}; for (WORD i=wIndex;i(i-wIndex)); GetVolumeInformation(pszHardDisk[i-wIndex],NULL,0,pbuf+i,NULL,NULL,0,NULL); } //转换信息 ASSERT(LEN_MACHINE_ID>=LEN_MD5); CWHEncrypt::MD5Encrypt(szMACAddress,szMachineID); return true; } //网卡地址 bool CWHService::GetMACAddress(TCHAR szMACAddress[LEN_NETWORK_ID]) { //变量定义 HINSTANCE hInstance=NULL; //执行逻辑 __try { //加载 DLL hInstance=LoadLibrary(TEXT("NetApi32.dll")); if (hInstance==NULL) __leave; //获取函数 typedef BYTE __stdcall NetBiosProc(NCB * Ncb); NetBiosProc * pNetBiosProc=(NetBiosProc *)GetProcAddress(hInstance,"Netbios"); if (pNetBiosProc==NULL) __leave; //变量定义 NCB Ncb; LANA_ENUM LanaEnum; ZeroMemory(&Ncb,sizeof(Ncb)); ZeroMemory(&LanaEnum,sizeof(LanaEnum)); //枚举网卡 Ncb.ncb_command=NCBENUM; Ncb.ncb_length=sizeof(LanaEnum); Ncb.ncb_buffer=(BYTE *)&LanaEnum; if ((pNetBiosProc(&Ncb)!=NRC_GOODRET)||(LanaEnum.length==0)) __leave; //获取地址 if (LanaEnum.length>0) { //变量定义 tagAstatInfo Adapter; ZeroMemory(&Adapter,sizeof(Adapter)); //重置网卡 Ncb.ncb_command=NCBRESET; Ncb.ncb_lana_num=LanaEnum.lana[0]; if (pNetBiosProc(&Ncb)!=NRC_GOODRET) __leave; //获取状态 Ncb.ncb_command=NCBASTAT; Ncb.ncb_length=sizeof(Adapter); Ncb.ncb_buffer=(BYTE *)&Adapter; Ncb.ncb_lana_num=LanaEnum.lana[0]; strcpy((char *)Ncb.ncb_callname,"*"); if (pNetBiosProc(&Ncb)!=NRC_GOODRET) __leave; //获取地址 for (INT i=0;i<6;i++) { ASSERT((i*2)=0;i--) { if (szModulePath[i]==TEXT('\\')) { szModulePath[i]=0; break; } } //设置结果 ASSERT(szModulePath[0]!=0); lstrcpyn(szWorkDirectory,szModulePath,wBufferCount); return true; } //文件版本 bool CWHService::GetModuleVersion(LPCTSTR pszModuleName, DWORD & dwVersionInfo) { //设置结果 dwVersionInfo=0L; //接收缓冲 BYTE cbInfoBuffer[1024]; ZeroMemory(cbInfoBuffer,sizeof(cbInfoBuffer)); //模块信息 DWORD dwFileHandle=NULL; if (GetFileVersionInfo(pszModuleName,dwFileHandle,sizeof(cbInfoBuffer),cbInfoBuffer)==FALSE) return false; //获取信息 UINT uQuerySize=0; VS_FIXEDFILEINFO * pFixedFileInfo=NULL; if (VerQueryValue(cbInfoBuffer,TEXT("\\"),(VOID * *)&pFixedFileInfo,&uQuerySize)==FALSE) return false; //设置结果 if ((pFixedFileInfo!=NULL)&&(uQuerySize==sizeof(VS_FIXEDFILEINFO))) { //设置版本 WORD wVersion1=HIWORD(pFixedFileInfo->dwFileVersionMS); WORD wVersion2=LOWORD(pFixedFileInfo->dwFileVersionMS); WORD wVersion3=HIWORD(pFixedFileInfo->dwFileVersionLS); WORD wVersion4=LOWORD(pFixedFileInfo->dwFileVersionLS); dwVersionInfo=MAKELONG(MAKEWORD(wVersion4,wVersion3),MAKEWORD(wVersion2,wVersion1)); return true; } return false; } //压缩数据 ULONG CWHService::CompressData(LPBYTE pcbSourceData, ULONG lSourceSize, BYTE cbResultData[], ULONG lResultSize) { //压缩数据 if (compress(cbResultData,&lResultSize,pcbSourceData,lSourceSize)==0L) { return lResultSize; } return 0L; } //解压数据 ULONG CWHService::UnCompressData(LPBYTE pcbSourceData, ULONG lSourceSize, BYTE cbResultData[], ULONG lResultSize) { //解压数据 if (uncompress(cbResultData,&lResultSize,pcbSourceData,lSourceSize)==0L) { return lResultSize; } return 0L; } __time64_t CWHService::ConvertDateTimeToDWORD(CString strDateTime) { COleDateTime odt; odt.ParseDateTime(strDateTime); SYSTEMTIME st; odt.GetAsSystemTime(st); CTime tCreate(st); return tCreate.GetTime(); } //////////////////////////////////////////////////////////////////////////////////