www.gusucode.com > 一些VC++加密算法+实例源码源码程序 > 一些VC++加密算法+实例源码/优化后的加密注册模块/优化后的加密注册模块/inventory(syn_thread)/ErrorReport.cpp
//**************************************************** //* Arko Information Technology Co.,Ltd. * //**************************************************** //*Errorreport.cpp Version: 1.0 * //*Copyright: This is a part of the Arko Source Code * //**************************************************** //*Programmmer: YL * //*Date: 2000-07-31 * //**************************************************** #include "stdafx.h" #include <winsock2.h> #include <time.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include "ErrorReport.h" #include "Encry.h" #include "module.h" #include "am_lv1.h" #include "EventLogService_i.c" Eventinfo eventinfo; long LogCount=0; BOOL bRegService; BOOL bExit; char * dbip; char * sqldecry ; char * sqlencry ; extern unsigned char pKey[8]; extern HRESULT SetEndSecurity ( long serviceID ); ///////////////////////////////////////Functions///////////////////////////////////////////////////////// HRESULT ConnectDb (dbptr *db_ptr) { dbptr m_SQLObject = NULL; if(!dbip) return 502; /* COSERVERINFO ServerInfo; memset(&ServerInfo, 0, sizeof(ServerInfo)); ServerInfo.pwszName=new wchar_t[16]; mbstowcs(ServerInfo.pwszName, dbip, 16); HRESULT hRes=CoCreateInstanceEx(CLSID_DBObject, NULL, CLSCTX_ALL, &ServerInfo, sizeof(mqi)/sizeof(mqi[0]), mqi); */ MULTI_QI mqi[]={ {&IID_IDBObject, NULL , 0}}; COSERVERINFO srvinfo = {0, L"192.100.1.1", NULL, 0}; BSTR bstr = (BSTR)MakeWideStrFromAnsi((LPSTR)dbip); srvinfo.pwszName=(LPWSTR)bstr; // free (RemoteService); // Create the object and query for two interfaces HRESULT hRes=CoCreateInstanceEx( CLSID_DBObject, // Request an instance of class CLSID_MyBackupService NULL, // No aggregation CLSCTX_SERVER, // Any server is fine &srvinfo, // Contains remote server name sizeof(mqi)/sizeof(mqi[0]), // number of interfaces we are requesting (2) mqi); if(hRes==S_OK)//successfully conncected; { if (SUCCEEDED(mqi[0].hr)) { m_SQLObject=(IDBObject*)mqi[0].pItf; _ASSERTE(m_SQLObject!=NULL); } *db_ptr = m_SQLObject; return S_OK; } else return 501; } HRESULT ServiceRegSelf() { dbptr m_SQLObject = NULL; HRESULT hrtmp = ConnectDb(&m_SQLObject); if ( hrtmp != S_OK ) return hrtmp; char lpBuf[MAX_COMPUTERNAME_LENGTH + 1]; DWORD pdwCount = MAX_COMPUTERNAME_LENGTH; if(!GetComputerName(lpBuf,&pdwCount )) return FatalError; char *ipaddr = new char [IP_LEN]; unsigned int ipsize= IP_LEN; if ( c_GetIpAddr(ipaddr,&ipsize)) return FatalError; //call the remote method to write db. //find if there already exists one db_table in_table; in_table.db_table_id = DB_SERVICE | TABLE_SERVICE_REG; in_table.db_operation = SELECT; // in_table.encrypt_id = 0; int rec_number; tab_record records; int begin=0; int out_number; sprintf(sqlencry,"select * from SERVICEREGTAB where ServiceID=%d",ServiceSourceID); DesStrEn ((unsigned char *)sqlencry,(unsigned char *)sqldecry,pKey) ; strcpy((char *)in_table.sql_statement,sqldecry); in_table.encrypt_id = SetMask (0,0,0,0) ; HRESULT hRes = m_SQLObject->av_dbsql(&in_table,&records,&rec_number,&out_number,begin); if (hRes != S_OK && hRes != 1001) return 503; if (out_number == 1 ) { in_table.db_operation = UPDATE; sprintf(sqlencry,"update SERVICEREGTAB set IPAddress='%s' , HostName='%s' where ServiceID=%d",ipaddr,lpBuf,ServiceSourceID); DesStrEn ((unsigned char *)sqlencry,(unsigned char *)sqldecry,pKey) ; strcpy((char *)in_table.sql_statement,sqldecry); in_table.encrypt_id = SetMask (1,0,0,0) ; hRes= m_SQLObject->av_dbsql2(&in_table); } else { in_table.db_operation = INSERT; sprintf(sqlencry,"insert into SERVICEREGTAB values(%d,'%s','%s')",ServiceSourceID,ipaddr,lpBuf); DesStrEn ((unsigned char *)sqlencry,(unsigned char *)sqldecry,pKey) ; strcpy((char *)in_table.sql_statement,sqldecry); in_table.encrypt_id = SetMask (1,0,0,0) ; hRes= m_SQLObject->av_dbsql2(&in_table); } free ( ipaddr ) ; m_SQLObject->Release(); return 0; } HRESULT ServiceUnRegSelf() { dbptr m_SQLObject = NULL; HRESULT hrtmp = ConnectDb(&m_SQLObject); if ( hrtmp != S_OK ) return hrtmp; db_table in_table; in_table.db_table_id = DB_SERVICE | TABLE_SERVICE_REG; in_table.db_operation = SELECT; // in_table.encrypt_id = 0; int rec_number; tab_record records; int begin=0; int out_number; unsigned int ipsize= IP_LEN; char *ipaddr = new char [IP_LEN]; if ( c_GetIpAddr(ipaddr,&ipsize)) { m_SQLObject->Release(); return FatalError; } sprintf(sqlencry,"select * from SERVICEREGTAB where ServiceID=%d and IPAddress='%s'",ServiceSourceID,ipaddr); DesStrEn ((unsigned char *)sqlencry,(unsigned char *)sqldecry,pKey) ; strcpy((char *)in_table.sql_statement,sqldecry); in_table.encrypt_id = SetMask (1,0,0,0) ; HRESULT hRes = m_SQLObject->av_dbsql(&in_table,&records,&rec_number,&out_number,begin); if (hRes != S_OK && hRes != 1001) { free ( ipaddr ) ; m_SQLObject->Release() ; return 503 ; } if (out_number > 0 ) //exists one { in_table.db_operation = DELET; sprintf(sqlencry,"delete from SERVICEREGTAB where ServiceID=%d and IPAddress='%s'",ServiceSourceID,ipaddr); DesStrEn ((unsigned char *)sqlencry,(unsigned char *)sqldecry,pKey) ; strcpy((char *)in_table.sql_statement,sqldecry); in_table.encrypt_id = SetMask (1,0,0,0) ; hRes= m_SQLObject->av_dbsql2(&in_table); } m_SQLObject->Release(); return hRes; } void ServiceInit (void) { sqldecry = new char [EN_SQL_LEN] ; //use for sqlstatement encryption sqlencry = new char [SQL_LEN] ; //use for sqlstatement encryption dbip = new char [IP_LEN] ; EventInit (&eventinfo); bRegService=false; bExit=false; char CNF[260]; unsigned int cbsize=260; if(am_LocaConfFile(ArkoMasterDbReg,ArkoDBValue,CNF,&cbsize)) { eventinfo.flag=2; eventinfo.EventID=510; ErrorProc(&eventinfo); bExit=true; //更新 return; } strcat(CNF,"\\ARKODB.INI"); unsigned int ipsize = IP_LEN ; if (am_GetConfIp (CNF,dbip,&ipsize)) { eventinfo.flag=2; eventinfo.EventID=502; ErrorProc(&eventinfo); bExit=true; //更新 return ; } } void ServiceShutDown (void) { if(bRegService) { HRESULT hRes=ServiceUnRegSelf(); if ( hRes != S_OK ) { eventinfo.flag=2; eventinfo.EventID=hRes; ErrorProc(&eventinfo); eventinfo.flag=3; eventinfo.EventID=E_UnRegistry; ErrorProc(&eventinfo); } } free ( sqlencry ) ; free ( sqldecry ) ; free ( dbip ) ; } DWORD RegThreadProc(void *p) { if(bExit) //error occurs when service initialization { Sleep(RUNTIME); //wait for the main thread PostThreadMessage(_Module.dwThreadID, WM_QUIT, 0, 0); return S_FALSE; } HRESULT hRes=CoInitialize(NULL); //initialization for DCOM do { int ifkey = GetPublicKey (pKey); //得到通信密钥 if (ifkey) { if (ifkey > 1003) ifkey = 511 ; else ifkey = ifkey - 500; eventinfo.flag=2; eventinfo.EventID=ifkey; ErrorProc(&eventinfo); } else { hRes = ServiceRegSelf(); //do registry if ( hRes == S_OK) break; else { eventinfo.flag=2; eventinfo.EventID=hRes; ErrorProc(&eventinfo); eventinfo.EventID=E_Registry; ErrorProc(&eventinfo); if (hRes == 502) { Sleep(RUNTIME); //wait for the main thread PostThreadMessage(_Module.dwThreadID, WM_QUIT, 0, 0); return S_FALSE; } } } Sleep (RUNTIME*3); } while (true); //wait for database start bRegService=true; //successfully start SetEndSecurity(ServiceSourceID); //set flag for end auth service CoUninitialize(); //uninitialize DCOM return hRes; } //////////////////////////////////////////////////////////////////////////////////////////////// HRESULT EventInit(Eventinfo *peventinfo) { peventinfo->EventID=0; peventinfo->flag=0; strcpy (peventinfo->OperUserName,ServiceName); char *ipaddr = new char [IP_LEN]; unsigned int ipsize= IP_LEN; c_GetIpAddr(ipaddr,&ipsize); strcpy(peventinfo->SourceIPAddress,ipaddr); free ( ipaddr ) ; DWORD nSize=sizeof(peventinfo->EventHostName); GetComputerName(peventinfo->EventHostName,&nSize); peventinfo->EventSourceID=ServiceSourceID; return S_OK; } void copyfd(fstream &infile,fstream &outfile) { char ch; while(infile.get(ch)) outfile.put(ch); return; } int adjustfp() { fstream infp,outfp; infp.open(ErrorLog,ios::in); if(!infp) return -1; outfp.open(TMP001,ios::out); if(!outfp) return -1; while(infp.get()!='\n'); copyfd(infp,outfp); infp.close(); outfp.close(); DeleteFile(ErrorLog); rename(TMP001,ErrorLog); return 0; } /* * GetIpAddr * get the local IP * return * the string of IP if success.or 0; */ /* char *GetIpAddr(void) { struct in_addr inaddr; int wVerReq; WSAData wsaData; struct hostent *hptr; char hostname[MAX_HOSTNAME_LEN+1]; wVerReq=0x0002; if(WSAStartup(wVerReq,&wsaData)) return NULL; if(gethostname(hostname,MAX_HOSTNAME_LEN)) return NULL; if(!(hptr=gethostbyname(hostname))) return NULL; memcpy((char *)&inaddr,hptr->h_addr_list[0],hptr->h_length); WSACleanup(); return inet_ntoa(inaddr); } */ /* * readCnf * read the database config file,get db IP * return * the string of IP if success.or 0; * note * config file: there is no blank among IP string. */ /* char *readCnf(char *filename) { char *buf; char ch; int i=0; fstream fp; fp.open(filename,ios::in|ios::nocreate); if(!fp) return NULL; if((buf=(char *)malloc(IP_LEN))==NULL) return NULL; while(!isdigit(ch=fp.peek())) fp.get(); fp.getline(buf,IP_LEN); while(i++,buf[i]!=' '&&buf[i]!=0); buf[i]=0; fp.close(); return buf; } */ /* HRESULT ConnectDb () { if (m_hrdb == S_OK) m_DBObject->Release(); char *RemoteService=readCnf(); if(!RemoteService) { m_hrdb = S_FALSE; return 502; } MULTI_QI mqi[]={ {&IID_IDBObject, NULL , 0}}; COSERVERINFO srvinfo = {0, L"192.100.1.1", NULL, 0}; BSTR bstr = (BSTR)MakeWideStrFromAnsi((LPSTR)RemoteService); srvinfo.pwszName=(LPWSTR)bstr; free (RemoteService); // Create the object and query for two interfaces HRESULT hRes=CoCreateInstanceEx( CLSID_DBObject, // Request an instance of class CLSID_MyBackupService NULL, // No aggregation CLSCTX_SERVER, // Any server is fine &srvinfo, // Contains remote server name sizeof(mqi)/sizeof(mqi[0]), // number of interfaces we are requesting (2) mqi); if(hRes==S_OK)//successfully conncected; { if (SUCCEEDED(mqi[0].hr)) { m_DBObject=(IDBObject*)mqi[0].pItf; _ASSERTE(m_DBObject!=NULL); } m_hrdb = S_OK; return S_OK; } else { m_hrdb = S_FALSE; return 501; } } */ /* HRESULT ServiceRegSelf() { char lpBuf[MAX_COMPUTERNAME_LENGTH + 1]; DWORD pdwCount = MAX_COMPUTERNAME_LENGTH; if(!GetComputerName(lpBuf,&pdwCount )) return FatalError; char *ipaddr=GetIpAddr(); if ( ipaddr == NULL ) return FatalError; //call the remote method to write db. //find if there already exists one db_table in_table; in_table.db_table_id = DB_SERVICE | TABLE_SERVICE_REG; in_table.db_operation = SELECT; in_table.encrypt_id = 0; int rec_number; tab_record records; int begin=0; int out_number; sprintf((char *)in_table.sql_statement,"select * from SERVICEREGTAB where ServiceID=%d",ServiceSourceID); HRESULT hRes = m_DBObject->av_dbsql(&in_table,&records,&rec_number,&out_number,begin); if (hRes != S_OK && hRes != 1001) { eventinfo.flag=2; eventinfo.EventID=503; ErrorProc(&eventinfo); return hRes; } if (out_number == 1 ) { in_table.db_operation = UPDATE; sprintf((char *)in_table.sql_statement,"update SERVICEREGTAB set IPAddress='%s' , HostName='%s' where ServiceID=%d",ipaddr,lpBuf,ServiceSourceID); hRes= m_DBObject->av_dbsql2(&in_table); } else { in_table.db_operation = INSERT; sprintf((char *)in_table.sql_statement,"insert into SERVICEREGTAB values(%d,'%s','%s')",ServiceSourceID,ipaddr,lpBuf); hRes= m_DBObject->av_dbsql2(&in_table); } return hRes; } HRESULT DisConnectDb() { if (_Module.m_hrev == S_OK) m_EventService->Release(); if (_Module.m_hrdb!=S_OK) return S_OK; db_table in_table; in_table.db_table_id = DB_SERVICE | TABLE_SERVICE_REG; in_table.db_operation = SELECT; in_table.encrypt_id = 0; int rec_number; tab_record records; int begin=0; int out_number; char *ipaddr=GetIpAddr(); if ( ipaddr == NULL ) { eventinfo.flag=2; eventinfo.EventID=FatalError; ErrorProc(&eventinfo); return FatalError; } sprintf((char *)in_table.sql_statement,"select * from SERVICEREGTAB where ServiceID=%d and IPAddress='%s'",ServiceSourceID,ipaddr); HRESULT hRes = m_DBObject->av_dbsql(&in_table,&records,&rec_number,&out_number,begin); if (hRes != S_OK && hRes != 1001) { eventinfo.flag=2; eventinfo.EventID=503; ErrorProc(&eventinfo); return hRes; } if (out_number > 0 ) //exists one { in_table.db_operation = DELET; sprintf((char *)in_table.sql_statement,"delete from SERVICEREGTAB where ServiceID=%d and IPAddress='%s'",ServiceSourceID,ipaddr); hRes= m_DBObject->av_dbsql2(&in_table); return hRes; } else //exists none return S_OK; } */ HRESULT ConnectEvent(evptr *ev_ptr) { dbptr m_SQLObject=NULL; evptr m_EventService=NULL; HRESULT hrtmp=ConnectDb(&m_SQLObject); if ( hrtmp != S_OK ) return hrtmp; //qrery database db_table in_table; in_table.db_table_id = DB_SERVICE | TABLE_SERVICE_REG; in_table.db_operation = SELECT; // in_table.encrypt_id = 0; int rec_number; tab_record records; tables_union *ret_records; int begin=0; int out_number; sprintf(sqlencry,"select * from SERVICEREGTAB where ServiceID=%d",EventServiceID); DesStrEn ((unsigned char *)sqlencry,(unsigned char *)sqldecry,pKey) ; strcpy((char *)in_table.sql_statement,sqldecry); in_table.encrypt_id = SetMask (0,0,0,0) ; HRESULT hRes = m_SQLObject->av_dbsql(&in_table,&records,&rec_number,&out_number,begin); // if ( hRes >= 0 ) m_SQLObject->Release(); m_SQLObject->Release(); if ( hRes == 1001 ) return 508; ret_records = (tables_union *)records.records_buf; char ipaddress[IP_LEN]; strcpy (ipaddress,(char *)ret_records->table_svr_reg.IPAddress); BSTR ippoint = (BSTR)MakeWideStrFromAnsi((LPSTR)ipaddress); //connect event service MULTI_QI mqi[]={ {&IID_IEventService, NULL , 0}}; COSERVERINFO srvinfo = {0, L"192.100.1.1", NULL, 0}; srvinfo.pwszName = (LPWSTR) ippoint; // Create the object and query for two interfaces hRes=CoCreateInstanceEx( CLSID_EventService, // Request an instance of class CLSID_MyBackupService NULL, // No aggregation CLSCTX_SERVER, // Any server is fine &srvinfo, // Contains remote server name sizeof(mqi)/sizeof(mqi[0]), // number of interfaces we are requesting (2) mqi); if(hRes==S_OK)//successfully conncected; { if (SUCCEEDED(mqi[0].hr)) { m_EventService=(IEventService*)mqi[0].pItf; _ASSERTE(m_EventService!=NULL); } *ev_ptr = m_EventService; return S_OK; } else return 504; } HRESULT ReEvent(evptr m_EventService,long Event_ID,long EventSourceID,char EventHostName[MAX_HOSTNAME_LEN+1],char SourceIPAddress[IP_LEN],char eventlevel[MAX_LEVEL_LEN],char Event_Description[MAX_DESCRIPTION_LEN],BSTR E_OU,BSTR pOperIP,BSTR pOperHost) { // evptr m_EventService=ev_ptr; long E_type = Event_Type; long SourceID=ServiceSourceID; //get system time char dbuffer[9],tbuffer[9]; char E_Time[TIME_LEN]; _strdate( dbuffer ); _strtime( tbuffer ); E_Time[0]='2';E_Time[1]='0';E_Time[2]=dbuffer[6];E_Time[3]=dbuffer[7]; E_Time[4]=dbuffer[0];E_Time[5]=dbuffer[1];E_Time[6]=dbuffer[3];E_Time[7]=dbuffer[4]; E_Time[8]=tbuffer[0];E_Time[9]=tbuffer[1];E_Time[10]=tbuffer[3];E_Time[11]=tbuffer[4]; E_Time[12]=tbuffer[6];E_Time[13]=tbuffer[7];E_Time[14]=tbuffer[8]; //end get ///////////////////////////////////////////////////////// BSTR bstr; VARIANT varWriteDB; SAFEARRAYBOUND rgsabound[1]; LPOLESTR tmp1; HRESULT hResult; wchar_t buffer[256]; VariantInit(&varWriteDB); varWriteDB.vt =VT_ARRAY; rgsabound[0].lLbound =0; rgsabound[0].cElements =10; varWriteDB.parray =SafeArrayCreate(VT_BSTR,1,rgsabound); int Index=0; //event ID _ultow((unsigned long)Event_ID,buffer,10); bstr = SysAllocString((OLECHAR *)(buffer)); hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)bstr); SysFreeString (bstr); Index++; //Event type _ultow((unsigned long)E_type,buffer,10); bstr = SysAllocString((OLECHAR *)(buffer)); hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)bstr); SysFreeString (bstr); Index++; //Service source ID _ultow((unsigned long)SourceID,buffer,10); bstr = SysAllocString((OLECHAR *)(buffer)); hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)bstr); SysFreeString (bstr); Index++; //Event Source ID _ultow((unsigned long)EventSourceID,buffer,10); bstr = SysAllocString((OLECHAR *)(buffer)); hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)bstr); SysFreeString (bstr); Index++; //Event Host Name AnsiToUnicode((LPCSTR)EventHostName,&tmp1); //Event Host Name bstr=SysAllocString(tmp1); CoTaskMemFree (tmp1); ////////////////////////////////////////encrypt/////////////////////////////////////////// BSTR EventHostName_encrypt = SysAllocStringByteLen (NULL,STR128*2); DesBSTREn (bstr,&EventHostName_encrypt,pKey); ////////////////////////////////////////encrypt/////////////////////////////////////////// hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)EventHostName_encrypt); SysFreeString (bstr); Index++; //Source IP Address AnsiToUnicode((LPCSTR)SourceIPAddress,&tmp1); //SourceIPAddress bstr=SysAllocString(tmp1); CoTaskMemFree (tmp1); hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)bstr); SysFreeString (bstr); Index++; //Event Description AnsiToUnicode((LPCSTR)Event_Description,&tmp1); //EventDescription bstr=SysAllocString(tmp1); CoTaskMemFree (tmp1); ////////////////////////////////////////encrypt/////////////////////////////////////////// BSTR Event_Description_encrypt = SysAllocStringByteLen (NULL,STR128*2); DesBSTREn (bstr,&Event_Description_encrypt,pKey); ////////////////////////////////////////encrypt/////////////////////////////////////////// hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)Event_Description_encrypt); SysFreeString (bstr); Index++; //Event Level AnsiToUnicode(eventlevel,&tmp1); //EventLevel bstr=SysAllocString(tmp1); CoTaskMemFree (tmp1); hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)bstr); SysFreeString (bstr); Index++; //Operation User Name ////////////////////////////////////////encrypt/////////////////////////////////////////// BSTR User_encrypt = SysAllocStringByteLen (NULL,STR32*2); DesBSTREn (E_OU,&User_encrypt,pKey); ////////////////////////////////////////encrypt/////////////////////////////////////////// hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)User_encrypt); Index++; //Record Time AnsiToUnicode((LPCSTR)E_Time,&tmp1); //RecordTime bstr=SysAllocString(tmp1); CoTaskMemFree (tmp1); hResult = SafeArrayPutElement(varWriteDB.parray,(long*)&Index,(void *)bstr); SysFreeString (bstr); Index++; hResult = m_EventService->EventReport(&varWriteDB,1); SysFreeString (EventHostName_encrypt) ; SysFreeString (Event_Description_encrypt) ; SysFreeString (User_encrypt) ; SafeArrayDestroy ( varWriteDB.parray ) ; VariantClear ( &varWriteDB ) ; return hResult; } int InvConvert(long EventID,char *EventDescription,char *EventLevel) { switch (EventID) { case 2001: strcpy(EventDescription,"注册资产服务失败"); strcpy(EventLevel,"1"); break; case 2002: strcpy(EventDescription,"注销资产服务失败"); strcpy(EventLevel,"5"); break; case 2003: strcpy(EventDescription,"新端系统加入失败"); strcpy(EventLevel,"6"); break; case 2004: strcpy(EventDescription,"更新端系统失败"); strcpy(EventLevel,"6"); break; case 2005: strcpy(EventDescription,"查询MAP信息失败"); strcpy(EventLevel,"6"); break; case 2006: strcpy(EventDescription,"查询CPU信息失败"); strcpy(EventLevel,"6"); break; case 2007: strcpy(EventDescription,"查询MEM信息失败"); strcpy(EventLevel,"6"); break; case 2008: strcpy(EventDescription,"查询FILE信息失败"); strcpy(EventLevel,"6"); break; case 2009: strcpy(EventDescription,"查询OS信息失败"); strcpy(EventLevel,"6"); break; case 2010: strcpy(EventDescription,"查询DEVICE信息失败"); strcpy(EventLevel,"6"); break; case 2011: strcpy(EventDescription,"查询NETWORK信息失败"); strcpy(EventLevel,"6"); break; case 2012: strcpy(EventDescription,"查询STAT信息失败"); strcpy(EventLevel,"6"); break; case 2013: strcpy(EventDescription,"查询NETSTAT信息失败"); strcpy(EventLevel,"6"); break; case 2014: strcpy(EventDescription,"查询CONDEV信息失败"); strcpy(EventLevel,"6"); break; case 2015: strcpy(EventDescription,"连接主代理失败"); strcpy(EventLevel,"5"); break; case 2251: strcpy(EventDescription,"端系统不在线"); strcpy(EventLevel,"15"); break; default: strcpy(EventDescription,"未知错误"); strcpy(EventLevel,"16"); } return 0; } int NetConvert(long EventID,char *EventDescription,char *EventLevel) { switch (EventID) { case 1001: strcpy(EventDescription,"注册拓扑服务失败"); strcpy(EventLevel,"1"); break; case 1002: strcpy(EventDescription,"注销拓扑服务失败"); strcpy(EventLevel,"5"); break; case 1003: strcpy(EventDescription,"UCICMP初始化失败"); strcpy(EventLevel,"4"); break; case 1004: strcpy(EventDescription,"Trap发生"); strcpy(EventLevel,"4"); break; case 1005: strcpy(EventDescription,"与资产服务连接失败"); strcpy(EventLevel,"4"); break; case 1006: strcpy(EventDescription,"监控变量值超过上下限"); strcpy(EventLevel,"3"); break; case 1007: strcpy(EventDescription,"网络互联设备信息报告资产服务失败"); strcpy(EventLevel,"7"); break; case 1008: strcpy(EventDescription,"写采样表失败"); strcpy(EventLevel,"7"); break; case 1009: strcpy(EventDescription,"获取MIB变量失败"); strcpy(EventLevel,"7"); break; case 1010: strcpy(EventDescription,"获取拓扑图失败"); strcpy(EventLevel,"7"); break; case 1011: strcpy(EventDescription,"Ping操作失败"); strcpy(EventLevel,"7"); break; case 1012: strcpy(EventDescription,"IP区间搜索失败"); strcpy(EventLevel,"7"); break; case 1013: strcpy(EventDescription,"获取MIB表变量失败"); strcpy(EventLevel,"7"); break; case 1014: strcpy(EventDescription,"MIB变量设置失败"); strcpy(EventLevel,"6"); break; case 1015: strcpy(EventDescription,"查询采样表失败"); strcpy(EventLevel,"7"); break; case 1016: strcpy(EventDescription,"查询监控表失败"); strcpy(EventLevel,"7"); break; case 1017: strcpy(EventDescription,"编辑监控表失败"); strcpy(EventLevel,"6"); break; case 1018: strcpy(EventDescription,"编辑采样表失败"); strcpy(EventLevel,"6"); break; case 1019: strcpy(EventDescription,"查询采样表失败"); strcpy(EventLevel,"7"); break; case 1020: strcpy(EventDescription,"监控表插入失败"); strcpy(EventLevel,"6"); break; case 1021: strcpy(EventDescription,"采样表插入失败"); strcpy(EventLevel,"6"); break; case 1022: strcpy(EventDescription,"监控表更新失败"); strcpy(EventLevel,"6"); break; case 1023: strcpy(EventDescription,"采样表更新失败"); strcpy(EventLevel,"6"); break; case 1024: strcpy(EventDescription,"监控表删除失败"); strcpy(EventLevel,"6"); break; case 1025: strcpy(EventDescription,"采样表删除失败"); strcpy(EventLevel,"6"); break; case 1026: strcpy(EventDescription,"查询监控表失败"); strcpy(EventLevel,"7"); break; default: strcpy(EventDescription,"未知错误"); strcpy(EventLevel,"16"); } return 0; } int AuthConvert(long EventID,char *EventDescription,char *EventLevel) { switch (EventID) { case 7001: strcpy(EventDescription,"注册授权服务失败"); strcpy(EventLevel,"1"); break; case 7002: strcpy(EventDescription,"注销授权服务失败"); strcpy(EventLevel,"5"); break; case 7003: strcpy(EventDescription,"查询授权信息失败"); strcpy(EventLevel,"6"); break; case 7004: strcpy(EventDescription,"插入授权信息失败"); strcpy(EventLevel,"6"); break; case 7005: strcpy(EventDescription,"删除授权信息失败"); strcpy(EventLevel,"6"); break; case 7007: strcpy(EventDescription,"连接端授权代理失败"); strcpy(EventLevel,"4"); break; case 7008: strcpy(EventDescription,"向端授权代理插入授权信息失败"); strcpy(EventLevel,"5"); break; case 7009: strcpy(EventDescription,"向端授权代理删除授权信息失败"); strcpy(EventLevel,"5"); break; case 7010: strcpy(EventDescription,"向端授权代理分发授权信息失败"); strcpy(EventLevel,"5"); break; case 7501: strcpy(EventDescription,"端授权代理注册失败"); strcpy(EventLevel,"6"); break; case 7502: strcpy(EventDescription,"端授权代理注销失败"); strcpy(EventLevel,"10"); break; default: strcpy(EventDescription,"未知错误"); strcpy(EventLevel,"16"); } return 0; } int UserConvert(long EventID,char *EventDescription,char *EventLevel) { switch (EventID) { case 6001: strcpy(EventDescription,"注册用户服务失败"); strcpy(EventLevel,"1"); break; case 6002: strcpy(EventDescription,"注销用户服务失败"); strcpy(EventLevel,"5"); break; case 6003: strcpy(EventDescription,"用户登录失败"); strcpy(EventLevel,"12"); break; case 6004: strcpy(EventDescription,"添加用户失败"); strcpy(EventLevel,"7"); break; case 6005: strcpy(EventDescription,"删除用户失败"); strcpy(EventLevel,"7"); break; case 6006: strcpy(EventDescription,"修改用户失败"); strcpy(EventLevel,"7"); break; case 6007: strcpy(EventDescription,"查询用户失败"); strcpy(EventLevel,"7"); break; case 6008: strcpy(EventDescription,"添加组失败"); strcpy(EventLevel,"7"); break; case 6009: strcpy(EventDescription,"删除组失败"); strcpy(EventLevel,"7"); break; case 6010: strcpy(EventDescription,"修改组失败"); strcpy(EventLevel,"7"); break; case 6011: strcpy(EventDescription,"查询组失败"); strcpy(EventLevel,"7"); break; case 6012: strcpy(EventDescription,"添加组员失败"); strcpy(EventLevel,"7"); break; case 6013: strcpy(EventDescription,"删除组员失败"); strcpy(EventLevel,"7"); break; case 6014: strcpy(EventDescription,"删除系统管理员帐号失败"); strcpy(EventLevel,"7"); break; case 6015: strcpy(EventDescription,"连接端系统失败"); strcpy(EventLevel,"5"); break; case 6016: strcpy(EventDescription,"删除授权失败"); strcpy(EventLevel,"6"); break; case 6017: strcpy(EventDescription,"连接授权服务失败"); strcpy(EventLevel,"5"); break; case 6251: strcpy(EventDescription,"无此帐号"); strcpy(EventLevel,"15"); break; case 6252: strcpy(EventDescription,"密码错误"); strcpy(EventLevel,"15"); break; case 6253: strcpy(EventDescription,"用户重名"); strcpy(EventLevel,"15"); break; case 6254: strcpy(EventDescription,"组已存在"); strcpy(EventLevel,"15"); break; case 6255: strcpy(EventDescription,"组不存在"); strcpy(EventLevel,"15"); break; case 6256: strcpy(EventDescription,"组员不存在"); strcpy(EventLevel,"15"); break; case 6257: strcpy(EventDescription,"无效用户"); strcpy(EventLevel,"15"); break; case 6258: strcpy(EventDescription,"用户登录成功"); strcpy(EventLevel,"15"); break; default: strcpy(EventDescription,"未知错误"); strcpy(EventLevel,"16"); } return 0; } int DSConvert(long EventID,char *EventDescription,char *EventLevel) { switch (EventID) { case 8501: strcpy(EventDescription,"注册软件分发服务失败"); strcpy(EventLevel,"1"); break; case 8502: strcpy(EventDescription,"注销软件分发服务失败"); strcpy(EventLevel,"5"); break; case 8503: strcpy(EventDescription,"连接源端失败"); strcpy(EventLevel,"5"); break; case 8504: strcpy(EventDescription,"连接目标端失败"); strcpy(EventLevel,"5"); break; case 8505: strcpy(EventDescription,"超时操作"); strcpy(EventLevel,"12"); break; case 8506: strcpy(EventDescription,"分发数据不完整"); strcpy(EventLevel,"10"); break; case 8507: strcpy(EventDescription,"数据传输错误"); strcpy(EventLevel,"12"); break; case 8508: strcpy(EventDescription,"删除失败"); strcpy(EventLevel,"7"); break; case 8726: strcpy(EventDescription,"端系统在线注册失败"); strcpy(EventLevel,"6"); break; case 8727: strcpy(EventDescription,"端系统在线注销失败"); strcpy(EventLevel,"10"); break; case 8728: strcpy(EventDescription,"更新端系统DCOMCNFG配置"); strcpy(EventLevel,"15"); break; case 8729: strcpy(EventDescription,"源端SNAP1失败"); strcpy(EventLevel,"6"); break; case 8730: strcpy(EventDescription,"源端无此路径"); strcpy(EventLevel,"12"); break; case 8731: strcpy(EventDescription,"源端SNAP2失败"); strcpy(EventLevel,"6"); break; case 8732: strcpy(EventDescription,"端系统磁盘空间不足"); strcpy(EventLevel,"12"); break; case 8733: strcpy(EventDescription,"端系统存在同名文件"); strcpy(EventLevel,"12"); break; case 8901: strcpy(EventDescription,"源端重启"); strcpy(EventLevel,"15"); break; case 8701: strcpy(EventDescription,"分发完成"); strcpy(EventLevel,"15"); break; case 8702: strcpy(EventDescription,"重发完成"); strcpy(EventLevel,"15"); break; case 8703: strcpy(EventDescription,"卸载完成"); strcpy(EventLevel,"15"); break; default: strcpy(EventDescription,"未知错误"); strcpy(EventLevel,"16"); } return 0; } int SVConvert(long EventID,char *EventDescription,char *EventLevel) { switch (EventID) { case 9001: strcpy(EventDescription,"注册病毒扫描服务失败"); strcpy(EventLevel,"1"); break; case 9002: strcpy(EventDescription,"注销病毒扫描服务失败"); strcpy(EventLevel,"5"); break; case 9003: strcpy(EventDescription,"连接主代理失败"); strcpy(EventLevel,"5"); break; case 9004: strcpy(EventDescription,"启动病毒扫描子代理失败"); strcpy(EventLevel,"6"); break; case 9005: strcpy(EventDescription,"检查子代理信息失败"); strcpy(EventLevel,"6"); break; case 9006: strcpy(EventDescription,"写子代理信息失败"); strcpy(EventLevel,"6"); break; case 9007: strcpy(EventDescription,"代理反馈数据失败"); strcpy(EventLevel,"6"); break; case 9251: strcpy(EventDescription,"扫描主机在扫描期间离线"); strcpy(EventLevel,"12"); break; case 9501: strcpy(EventDescription,"没有安装相应的McAfee软件"); strcpy(EventLevel,"12"); break; case 9502: strcpy(EventDescription,"操作系统类型查找失败"); strcpy(EventLevel,"12"); break; case 9503: strcpy(EventDescription,"扫描意外中止"); strcpy(EventLevel,"7"); break; default: strcpy(EventDescription,"未知错误"); strcpy(EventLevel,"16"); } return 0; } int GeConvert(long EventID,char *EventDescription,char *EventLevel) { switch (EventID) { case 501: strcpy(EventDescription,"连接数据库失败"); strcpy(EventLevel,"1"); break; case 502: strcpy(EventDescription,"INI文件丢失或错误"); strcpy(EventLevel,"1"); break; case 503: strcpy(EventDescription,"数据库操作失败"); strcpy(EventLevel,"1"); break; case 504: strcpy(EventDescription,"连接事件失败"); strcpy(EventLevel,"2"); break; case 505: strcpy(EventDescription,"报告事件失败"); strcpy(EventLevel,"2"); break; case 506: strcpy(EventDescription,"连接授权端服务失败"); strcpy(EventLevel,"4"); break; case 507: strcpy(EventDescription,"授权端服务操作失败"); strcpy(EventLevel,"4"); break; case 508: strcpy(EventDescription,"事件服务未注册"); strcpy(EventLevel,"5"); break; case 509: strcpy(EventDescription,"数据库数据异常"); strcpy(EventLevel,"5"); break; case 510: strcpy(EventDescription,"读取注册表信息失败"); strcpy(EventLevel,"1"); break; case 511: strcpy(EventDescription,"加密失败"); strcpy(EventLevel,"1"); break; case 800: strcpy(EventDescription,"没有权限进行此项操作"); strcpy(EventLevel,"15"); break; case 999: strcpy(EventDescription,"异常"); strcpy(EventLevel,"1"); break; default: strcpy(EventDescription,"致命错误"); strcpy(EventLevel,"1"); } return 0; } int EvConvert(long EventID,char *EventDescription,char *EventLevel) { switch (EventID) { case 8001: break; default: strcpy(EventDescription,"未知错误"); strcpy(EventLevel,"16"); } return 0; } int WriteLog(long EventID,char *EventHostName,char *IPAddress,char *EventDescription,char *EventLevel,char E_Time[15],char *OperName) { char LogFileName[260]; long EventSourceID = ServiceSourceID ; long Eventtype=Event_Type; long ServiceID=ServiceSourceID; unsigned int cbsize=260; strcpy (LogFileName,""); am_LocaConfFile(ArkoMasterDbReg,ArkoDBValue,LogFileName,&cbsize); if (cbsize==-1||cbsize>260) return -1; strcat (LogFileName , "\\log\\"); strcat (LogFileName , ErrorLog); fstream fp; fp.open(LogFileName,ios::app); if(!fp) return -1; char str[MAX_EVENT_LEN]; sprintf(str,"%d %d %d %d %s %s %s %s %s %s",EventID,Eventtype,ServiceID,EventSourceID,EventHostName,IPAddress,EventDescription,EventLevel,OperName,E_Time); fp<<str<<endl; fp.close(); LogCount++; if (LogCount>=MAX_LOGLINE_LEN) { adjustfp(); } return 0; } /* int ReConnect() { HRESULT hr=ConnectEvent(); if ( hr != S_OK ) { hr = ConnectDb(); if ( hr == S_OK ) { hr = ConnectEvent(); return hr; } else return hr; } return S_OK; } */ HRESULT ErrorProc(Eventinfo *pEventInfo) { evptr ev_ptr=NULL; char EventDescription[MAX_DESCRIPTION_LEN]="", EventLevel[MAX_LEVEL_LEN]="", LocalHostName[MAX_HOSTNAME_LEN+1]="", LocalIPAddress[IP_LEN]="", result[MAX_DESCRIPTION_LEN]=""; long EventID, flag; //event flag int res=1; BSTR OperUser; LPOLESTR tmp1; HRESULT hrtmp; Eventinfo eventinfotmp; EventInit ( &eventinfotmp ); //initial structure EventID = pEventInfo->EventID; flag = pEventInfo->flag; //get host name strcpy (LocalHostName,pEventInfo->EventHostName); //get ip address strcpy(LocalIPAddress,pEventInfo->SourceIPAddress); //get opertion user name if ((flag==1)||(flag==3)) { AnsiToUnicode((LPCSTR)pEventInfo->OperUserName,&tmp1); OperUser = SysAllocString(tmp1); CoTaskMemFree (tmp1); } char OperName[STR32]; strcpy (OperName,pEventInfo->OperUserName); //get system time char dbuffer[9],tbuffer[9]; char E_Time[TIME_LEN]; _strdate( dbuffer ); _strtime( tbuffer ); E_Time[0]='2';E_Time[1]='0';E_Time[2]=dbuffer[6];E_Time[3]=dbuffer[7]; E_Time[4]=dbuffer[0];E_Time[5]=dbuffer[1];E_Time[6]=dbuffer[3];E_Time[7]=dbuffer[4]; E_Time[8]=tbuffer[0];E_Time[9]=tbuffer[1];E_Time[10]=tbuffer[3];E_Time[11]=tbuffer[4]; E_Time[12]=tbuffer[6];E_Time[13]=tbuffer[7];E_Time[14]=tbuffer[8]; div_t div_result = div( EventID, 1000 ); long EventSourceID = ServiceSourceID ; //get event description switch (div_result.quot) { case 0: GeConvert(EventID,EventDescription,EventLevel); break; case 1: NetConvert(EventID,EventDescription,EventLevel); break; case 2: InvConvert(EventID,EventDescription,EventLevel); break; case 3: break; case 4: break; case 5: break; case 6: UserConvert(EventID,EventDescription,EventLevel); break; case 7: AuthConvert(EventID,EventDescription,EventLevel); break; case 8: if (EventID > 8499 ) DSConvert(EventID,EventDescription,EventLevel); else EvConvert(EventID,EventDescription,EventLevel); break; case 9: SVConvert(EventID,EventDescription,EventLevel); break; } //prepare return data // strcpy(result,EventDescription); // AnsiToUnicode((LPCSTR)result,&tmp1); // bstr=SysAllocString(tmp1); // CoTaskMemFree (tmp1); if ( flag == 1 || flag == 3 ) //need connect event service { hrtmp=ConnectEvent(&ev_ptr); if (hrtmp != S_OK ) { eventinfotmp.flag=2; eventinfotmp.EventID=hrtmp; ErrorProc(&eventinfotmp); WriteLog (EventID,LocalHostName,LocalIPAddress,EventDescription,EventLevel,E_Time,OperName); return S_OK; } } switch ( flag ) // case flag do report event and write log if event report fail automatically write log file { case 1: res=ReEvent(ev_ptr,EventID,EventSourceID,LocalHostName,LocalIPAddress,EventLevel,EventDescription,OperUser,NULL,NULL); if ( res != S_OK ) { WriteLog (EventID,LocalHostName,LocalIPAddress,EventDescription,EventLevel,E_Time,OperName); eventinfotmp.flag=2; eventinfotmp.EventID=505; ErrorProc(&eventinfotmp); }; break; case 2: WriteLog (EventID,LocalHostName,LocalIPAddress,EventDescription,EventLevel,E_Time,OperName); break; case 3: res=ReEvent(ev_ptr,EventID,EventSourceID,LocalHostName,LocalIPAddress,EventLevel,EventDescription,OperUser,NULL,NULL); WriteLog (EventID,LocalHostName,LocalIPAddress,EventDescription,EventLevel,E_Time,OperName); if ( res != S_OK ) { eventinfotmp.flag=2; eventinfotmp.EventID=505; ErrorProc(&eventinfotmp); }; break; default: GeConvert(FatalError,EventDescription,EventLevel); WriteLog (FatalError,LocalHostName,LocalIPAddress,EventDescription,EventLevel,E_Time,OperName); break; }; if (ev_ptr) ev_ptr->Release(); //if has connect event service release it if((flag==1) || (flag==3)) SysFreeString (OperUser); return S_OK; } /* char *getErrorMessage(HRESULT hr) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,hr,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR) &lpMsgBuf,0,NULL); return LPTSTR(lpMsgBuf); } */ //******************************************************* //GetPublicKey * // Get the public key for commumication * //return * // if succeed, return 0 * //pkey length = 8 * //******************************************************* /*获得通讯时使用的密钥*/ int GetPublicKey(unsigned char *pKey) { CoInitialize(NULL); //初始化COM unsigned int i=0; if(!dbip) return ERROR_DBIP; //用MD5加密数据库服务IP地址 char md5_dbip[MD5KLEN]; i = md5hash((unsigned char *)dbip, strlen(dbip), (unsigned char *)md5_dbip); if(i!=0) return ERROR_MD5_DBIP; //获得本机IP地址并用DES加密 char localip[IP_LEN], md5_localip[MD5KLEN]; BSTR wdes_localip=BSTRAS, wlocalip=BSTRAS; // strcpy((char *)localip, GetIpAddr()); // char *ipaddr; unsigned int ipsize= IP_LEN; if ( c_GetIpAddr(localip,&ipsize)) return FatalError ; wlocalip = MakeWideStrFromAnsi(localip); i = DesBSTREn(wlocalip, &wdes_localip, (unsigned char *)md5_dbip); if(i!=0) return ERROR_DES_LOCALIP; //连接数据库服务 IDBObject *m_SQLObject=NULL; //代理端:此处的接口名不同!!! COSERVERINFO ServerInfo; memset(&ServerInfo, 0, sizeof(ServerInfo)); ServerInfo.pwszName=new wchar_t[16]; mbstowcs(ServerInfo.pwszName, dbip, 16); MULTI_QI mqi[]={{&IID_IDBObject,NULL,0}}; HRESULT hRes=CoCreateInstanceEx(CLSID_DBObject, NULL, CLSCTX_ALL, &ServerInfo, sizeof(mqi)/sizeof(mqi[0]), mqi); if(hRes==0 && SUCCEEDED(mqi[0].hr)) m_SQLObject=(IDBObject*)mqi[0].pItf; if(hRes!=S_OK || m_SQLObject==NULL) { // MessageBox(NULL, getErrorMessage(hRes), NULL, NULL); return ERROR_CONDB; } //调用数据库服务的接口,获得密钥 BSTR wencrypt_pkey=BSTRAS; hRes = m_SQLObject->GetCryptKey(wdes_localip, &wencrypt_pkey); if(hRes!=0) { // MessageBox(NULL, getErrorMessage(hRes), NULL, NULL); return ERROR_ENCRYPT_PKEY; } //用MD5加密本机IP地址 i = md5hash((unsigned char *)localip, strlen(localip), (unsigned char *)md5_localip); if(i!=0) return ERROR_MD5_LOCALIP; //用MD5加密的本地IP,解密,得到公共密钥 BSTR wdecrypt_pkey=BSTRAS; i = DesBSTRDe(wencrypt_pkey, &wdecrypt_pkey, (unsigned char *)md5_localip); if(i!=0) return ERROR_PKEY; //返回公共密钥 char tkey[9]; WideCharToMultiByte(CP_ACP, 0, wdecrypt_pkey, -1, tkey , 9 ,NULL, NULL); memcpy(pKey,tkey,8); m_SQLObject->Release(); CoUninitialize(); return S_OK; } ///////////////////////////////////////////////////////////////////////////////////// // 置位IP字段及TIME字段。 // 字段记数是已""或‘’为单位 // USAGE: // example: // insert into tabname values ("data1",23,"data2","data3",43,"data4","data5") // 1 2 3 4 5 // DES IPADDR DES DES TIME // // source code: // // db_table dbtable; // dbtable.encrypt_id = SetMask(2,5); int SetMask(int index1 = 0,int index2 = 0,int index3 = 0,int index4 = 0) { int mask=0; int e[16] = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}; // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 if(index1) { mask = mask | e[index1-1]; } if(index2) { mask = mask|e[index2-1]; } if(index3) { mask = mask|e[index3-1]; } if(index4) { mask = mask|e[index4-1]; } return mask; }