| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- #include "stdafx.h"
- #include "CheckDog.h"
- #include "SNRegister.h"
- #include <time.h> //头文件
- #include "resource.h"
- HANDLE g_hReadDogThread = NULL;
- #if IS_RAND_WRITE_DOG
- HANDLE g_hWriteDogThread = NULL;
- #endif
- VOID TerminateLastProcess();
- // 初始化软件狗;
- int InitDog( void )
- {
- CHAR szSNName[MAX_LIST_LENGTH + 1] = "";
- wsprintf(szSNName, "%s\\register.sn", g_strDirectory);
- CFileStatus Sfile;
- if (CFile::GetStatus(szSNName,Sfile) == FALSE) {
- LOG4C((LOG_NOTICE,"SN文件不存在"));
- return -1;
- }
- CSNRegister snrig;
- if ( !snrig.itf_IsCorrectSN(szSNName)) {
- LOG4C((LOG_NOTICE,"无效SN文件"));
- return -1;
- }
- if ( strcmp(snrig.itf_returnSnCode(),g_strSNCode) != 0) {
- LOG4C((LOG_NOTICE,"末注册,试用."));
- // 试用前,判断注册表的剩余时间与校验码,是否与SN文件相同,防止利用备份SN文件获得长期使用;
- // 首次运行,创建注册信息;
- CheckDogThreadStart();
- return 0;
- }
- else{
- LOG4C((LOG_NOTICE,"已注册,正常使用."));
- return 0;
- }
- }
- int IsCollectCheck(CSNRegister &snrig,HWND hWnd)
- {
- HKEY hKey = NULL;
- CHAR strKeyName[50] = "";
- char strTimeKey[9] = ""; // 密文密钥;
- CHAR strLeftTime[50] = ""; // 剩余时间密文;
- char strCheckKey[9] = ""; // 密文密钥;
- CHAR strCheckCode[50] = ""; // 校验码密文;
- DWORD dwErrorCode = 0;
- INT iNumberOfDays = 0;
- DWORD dwSize = 0;
- DWORD dwType = 0;
- // 创建注册表,有该键则读取,无则创建;
- strcpy(strKeyName, "Software\\try to play");
- dwErrorCode = RegCreateKeyEx( HKEY_LOCAL_MACHINE,
- strKeyName,
- 0,
- NULL,
- REG_OPTION_NON_VOLATILE,
- KEY_ALL_ACCESS,
- NULL, //Security
- &hKey,
- NULL);
- dwType = REG_SZ;
- if (dwErrorCode == ERROR_SUCCESS)
- {
- // =================剩余时间明文获取=======================;
- dwSize = sizeof(strLeftTime);
- dwErrorCode = ::RegQueryValueEx(hKey, "DataT",NULL,&dwType,(BYTE*)strLeftTime, &dwSize );
- char szTemp[1024] = {0};
- ltoa(snrig.itf_returnLeftTime(),szTemp,10);
- // 获取明文剩余时间;
- if (dwErrorCode == ERROR_SUCCESS && strcmp(strLeftTime, ""))
- {
- // 首次使用,写入剩余时间明文;
- while( ::RegSetValueEx(hKey, "DataT", NULL, dwType, (BYTE *)szTemp, dwSize) );
-
- //dwErrorCode = RegSetValueEx(hKey, "DataT", NULL, REG_SZ, (BYTE *)szTemp, &dwSize);
- }
- else
- {
- // 已使用,读取剩余时间明文;
- if (strcmp(strLeftTime, szTemp) != 0)
- {
- if (NULL != hKey)
- RegCloseKey(hKey);
- hKey = NULL;
- return -1;
- }
- }
- // ======================校验码明文获取=========================;
- dwSize = sizeof(strCheckCode);
- dwErrorCode = ::RegQueryValueEx(hKey, "DataC",NULL,&dwType,(BYTE*)strCheckCode, &dwSize );
- memset(szTemp,0,1024);
- memcpy(szTemp, snrig.itf_returnSnCode(), strlen(snrig.itf_returnSnCode()) );
- // 获取明文剩余时间;
- if (dwErrorCode == ERROR_SUCCESS && strcmp(strCheckCode, ""))
- {
- // 首次使用,写入剩余时间明文;
- while( ::RegSetValueEx(hKey, "DataT", NULL, dwType, (BYTE *)szTemp, dwSize) );
- //dwErrorCode = RegSetValueEx(hKey, "DataT", NULL, REG_SZ, (BYTE *)szTemp, &dwSize);
- }
- else
- {
- // 已使用,读取剩余时间明文;
- if (strcmp(strCheckCode, szTemp) != 0)
- {
- if (NULL != hKey)
- RegCloseKey(hKey);
- hKey = NULL;
- return -1;
- }
- }
- }
- if (NULL != hKey)
- RegCloseKey(hKey);
- hKey = NULL;
- return 0;
- }
- int IsCollectLTime(CSNRegister &snrig)
- {
- return 0;
- }
- int UnInitDog(void)
- {
- CheckDogThreadEnd();
- return 0;
- }
- BOOL CheckDogThreadStart()
- {
- DWORD dwThreadId = 0;
- MTVERIFY( g_hReadDogThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ReadDogThreadProc, NULL, 0, &dwThreadId) );
- #if IS_RAND_WRITE_DOG
- MTVERIFY( g_hWriteDogThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WriteDogThreadProc, NULL, 0, &dwThreadId) );
- #endif
- return TRUE;
- }
- BOOL CheckDogThreadEnd()
- {
- // 关闭线程;
- if (NULL != g_hReadDogThread)
- {
- MTVERIFY( WaitForSingleObject( g_hReadDogThread, INFINITE ) != WAIT_FAILED );
- MTVERIFY( CloseHandle( g_hReadDogThread ) );
- g_hReadDogThread = NULL;
- }
- #if IS_RAND_WRITE_DOG
- if (NULL != g_hWriteDogThread)
- {
- MTVERIFY( WaitForSingleObject( g_hWriteDogThread, INFINITE ) != WAIT_FAILED );
- MTVERIFY( CloseHandle( g_hWriteDogThread ) );
- g_hWriteDogThread = NULL;
- }
- #endif
- return TRUE;
- }
- DWORD WINAPI ReadDogThreadProc(LPVOID lpParameter)
- {
- LOG4C((LOG_NOTICE,"线程运行"));
- char szSNName[MAX_PATH] = {0};
- sprintf(szSNName,"%s\\register.sn",g_strDirectory);
- CTimeSpan ts = NULL;
- CTime t_et = NULL;
- CTime t_ct = CTime::GetCurrentTime();
-
- CFileStatus Sfile;
- CSNRegister snrig;
- do
- {
- if (!CFile::GetStatus(szSNName,Sfile)){
- LOG4C((LOG_NOTICE,"SN文件不存在"));
- TerminateLastProcess();
- return 0;
- }
- if(!snrig.itf_IsCorrectSN(szSNName)){
- LOG4C((LOG_NOTICE,"SN文件无效"));
- TerminateLastProcess();
- return 0;
- }
- if ((long)snrig.itf_returnLeftTime() < 0){
- LOG4C((LOG_NOTICE,"试用期限到"));
- TerminateLastProcess();
- return 0;
- }
- t_et = CTime::GetCurrentTime();
- ts = t_et - t_ct;
- if (ts.GetSeconds() > 1){
- t_ct = t_et;
- snrig.itf_SavebyLTime(snrig.itf_returnLeftTime() - ts.GetSeconds(),szSNName);
- LOG4C((LOG_NOTICE,"时差 = %d",ts.GetSeconds()));
- }
- }while( WaitForSingleObject(g_hRunObject, 5000L) == WAIT_TIMEOUT );
- return 0;
- }
- #if IS_RAND_WRITE_DOG
- DWORD WINAPI WriteDogThreadProc(LPVOID lpParameter)
- {
- INT iIvrIndex = 0;
- CString strError;
- for (; ;){
- Sleep(10000);
- }
- return 0;
- }
- #endif
|