Files

327 lines
6.9 KiB
C++
Raw Permalink Normal View History

2026-02-13 14:34:15 +08:00
#include "StdAfx.h"
#include "WHService.h"
#include "WHEncrypt.h"
//////////////////////////////////////////////////////////////////////////////////
//ѹ<><D1B9><EFBFBD>ļ<EFBFBD>
#include "Compress\ZLib.h"
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
#ifndef _DEBUG
#pragma comment(lib,"Version")
#pragma comment(lib,"Compress\\ZLib.lib")
#else
#pragma comment(lib,"Version")
#pragma comment(lib,"Compress\\ZLibD.lib")
#endif
//////////////////////////////////////////////////////////////////////////////////
//״̬<D7B4><CCAC>Ϣ
struct tagAstatInfo
{
ADAPTER_STATUS AdapterStatus; //<2F><><EFBFBD><EFBFBD>״̬
NAME_BUFFER NameBuff[16]; //<2F><><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>
};
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CWHService::CWHService()
{
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
bool CWHService::SetClipboardString(LPCTSTR pszString)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HANDLE hData=NULL;
BOOL bOpenClopboard=FALSE;
//ִ<><D6B4><EFBFBD>߼<EFBFBD>
__try
{
//<2F>򿪿<EFBFBD><F2BFAABF><EFBFBD>
bOpenClopboard=OpenClipboard(AfxGetMainWnd()->m_hWnd);
if (bOpenClopboard==FALSE) __leave;
//<2F><><EFBFBD>տ<EFBFBD><D5BF><EFBFBD>
if (EmptyClipboard()==FALSE) __leave;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
HANDLE hData=GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,CountStringBuffer(pszString));
if (hData==NULL) __leave;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lstrcpy((LPTSTR)GlobalLock(hData),pszString);
GlobalUnlock(hData);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifndef _UNICODE
::SetClipboardData(CF_TEXT,hData);
#else
::SetClipboardData(CF_UNICODETEXT,hData);
#endif
}
//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
__finally
{
//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
if (hData!=NULL) GlobalUnlock(hData);
//<2F>رտ<D8B1><D5BF><EFBFBD>
if (bOpenClopboard==TRUE) CloseClipboard();
//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if (AbnormalTermination()==TRUE)
{
ASSERT(FALSE);
}
}
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
bool CWHService::GetMachineID(TCHAR szMachineID[LEN_MACHINE_ID])
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TCHAR szMACAddress[LEN_NETWORK_ID]=TEXT("");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
GetMACAddress(szMACAddress);
//ת<><D7AA><EFBFBD><EFBFBD>Ϣ
ASSERT(LEN_MACHINE_ID>=LEN_MD5);
CWHEncrypt::MD5Encrypt(szMACAddress,szMachineID);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
bool CWHService::GetMachineIDEx(TCHAR szMachineID[LEN_MACHINE_ID])
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TCHAR szMACAddress[LEN_NETWORK_ID]=TEXT("");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
WORD wMacSize=GetMACAddress(szMACAddress);
//Ӳ<>̱<EFBFBD>ʶ
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<CountArray(pszHardDisk);i++)
{
ASSERT(CountArray(pszHardDisk)>(i-wIndex));
GetVolumeInformation(pszHardDisk[i-wIndex],NULL,0,pbuf+i,NULL,NULL,0,NULL);
}
//ת<><D7AA><EFBFBD><EFBFBD>Ϣ
ASSERT(LEN_MACHINE_ID>=LEN_MD5);
CWHEncrypt::MD5Encrypt(szMACAddress,szMachineID);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
bool CWHService::GetMACAddress(TCHAR szMACAddress[LEN_NETWORK_ID])
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HINSTANCE hInstance=NULL;
//ִ<><D6B4><EFBFBD>߼<EFBFBD>
__try
{
//<2F><><EFBFBD><EFBFBD> DLL
hInstance=LoadLibrary(TEXT("NetApi32.dll"));
if (hInstance==NULL) __leave;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
typedef BYTE __stdcall NetBiosProc(NCB * Ncb);
NetBiosProc * pNetBiosProc=(NetBiosProc *)GetProcAddress(hInstance,"Netbios");
if (pNetBiosProc==NULL) __leave;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NCB Ncb;
LANA_ENUM LanaEnum;
ZeroMemory(&Ncb,sizeof(Ncb));
ZeroMemory(&LanaEnum,sizeof(LanaEnum));
//ö<><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ncb.ncb_command=NCBENUM;
Ncb.ncb_length=sizeof(LanaEnum);
Ncb.ncb_buffer=(BYTE *)&LanaEnum;
if ((pNetBiosProc(&Ncb)!=NRC_GOODRET)||(LanaEnum.length==0)) __leave;
//<2F><>ȡ<EFBFBD><C8A1>ַ
if (LanaEnum.length>0)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tagAstatInfo Adapter;
ZeroMemory(&Adapter,sizeof(Adapter));
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ncb.ncb_command=NCBRESET;
Ncb.ncb_lana_num=LanaEnum.lana[0];
if (pNetBiosProc(&Ncb)!=NRC_GOODRET) __leave;
//<2F><>ȡ״̬
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;
//<2F><>ȡ<EFBFBD><C8A1>ַ
for (INT i=0;i<6;i++)
{
ASSERT((i*2)<LEN_NETWORK_ID);
_stprintf(&szMACAddress[i*2],TEXT("%02X"),Adapter.AdapterStatus.adapter_address[i]);
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__finally
{
//<2F>ͷ<EFBFBD><CDB7><EFBFBD>Դ
if (hInstance!=NULL)
{
FreeLibrary(hInstance);
hInstance=NULL;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (AbnormalTermination()==TRUE)
{
ASSERT(FALSE);
}
}
return true;
}
//ע<><D7A2><EFBFBD>ȼ<EFBFBD>
bool CWHService::UnRegisterHotKey(HWND hWnd, UINT uKeyID)
{
//ע<><D7A2><EFBFBD>ȼ<EFBFBD>
BOOL bSuccess=::UnregisterHotKey(hWnd,uKeyID);
return (bSuccess==TRUE)?true:false;
}
//ע<><D7A2><EFBFBD>ȼ<EFBFBD>
bool CWHService::RegisterHotKey(HWND hWnd, UINT uKeyID, WORD wHotKey)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE cbModifiers=0;
if (HIBYTE(wHotKey)&HOTKEYF_ALT) cbModifiers|=MOD_ALT;
if (HIBYTE(wHotKey)&HOTKEYF_SHIFT) cbModifiers|=MOD_SHIFT;
if (HIBYTE(wHotKey)&HOTKEYF_CONTROL) cbModifiers|=MOD_CONTROL;
//ע<><D7A2><EFBFBD>ȼ<EFBFBD>
BOOL bSuccess=::RegisterHotKey(hWnd,uKeyID,cbModifiers,LOBYTE(wHotKey));
return (bSuccess==TRUE)?true:false;
}
//<2F><><EFBFBD><EFBFBD>Ŀ¼
bool CWHService::GetWorkDirectory(TCHAR szWorkDirectory[], WORD wBufferCount)
{
//ģ<><C4A3>·<EFBFBD><C2B7>
TCHAR szModulePath[MAX_PATH]=TEXT("");
GetModuleFileName(AfxGetInstanceHandle(),szModulePath,CountArray(szModulePath));
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
for (INT i=lstrlen(szModulePath);i>=0;i--)
{
if (szModulePath[i]==TEXT('\\'))
{
szModulePath[i]=0;
break;
}
}
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
ASSERT(szModulePath[0]!=0);
lstrcpyn(szWorkDirectory,szModulePath,wBufferCount);
return true;
}
//<2F>ļ<EFBFBD><C4BC>
bool CWHService::GetModuleVersion(LPCTSTR pszModuleName, DWORD & dwVersionInfo)
{
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
dwVersionInfo=0L;
//<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
BYTE cbInfoBuffer[1024];
ZeroMemory(cbInfoBuffer,sizeof(cbInfoBuffer));
//ģ<><C4A3><EFBFBD><EFBFBD>Ϣ
DWORD dwFileHandle=NULL;
if (GetFileVersionInfo(pszModuleName,dwFileHandle,sizeof(cbInfoBuffer),cbInfoBuffer)==FALSE) return false;
//<2F><>ȡ<EFBFBD><C8A1>Ϣ
UINT uQuerySize=0;
VS_FIXEDFILEINFO * pFixedFileInfo=NULL;
if (VerQueryValue(cbInfoBuffer,TEXT("\\"),(VOID * *)&pFixedFileInfo,&uQuerySize)==FALSE) return false;
//<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
if ((pFixedFileInfo!=NULL)&&(uQuerySize==sizeof(VS_FIXEDFILEINFO)))
{
//<2F><><EFBFBD>ð汾
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;
}
//ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULONG CWHService::CompressData(LPBYTE pcbSourceData, ULONG lSourceSize, BYTE cbResultData[], ULONG lResultSize)
{
//ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (compress(cbResultData,&lResultSize,pcbSourceData,lSourceSize)==0L)
{
return lResultSize;
}
return 0L;
}
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
ULONG CWHService::UnCompressData(LPBYTE pcbSourceData, ULONG lSourceSize, BYTE cbResultData[], ULONG lResultSize)
{
//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
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();
}
//////////////////////////////////////////////////////////////////////////////////