www.gusucode.com > 一些VC++加密算法+实例源码源码程序 > 一些VC++加密算法+实例源码/优化后的加密注册模块/优化后的加密注册模块/inventory(syn_thread)/InventoryObj.cpp
/******************************************************* Arko Information Technology Co.,Ltd. ******************************************************* *InventoryObj.cpp Version: 1.0 *Copyright: This is a part of the Arko Source Code … ******************************************************* *Programmmer: yangfan *Date: 2000/12/19 ******************************************************* *Description: Implementation of CInventoryObj. Implementation of all interface function. *********************************************************/ #include "stdafx.h" #include <afx.h> #include "am_lv1.h" #include "Module.h" #include "general.h" #include "Inventory.h" #include "InventoryObj.h" #include "Encry.h" #include "MapLink.h" #include "ErrorReport.h" #include "sqlservice_i.c" extern MapLink *MAPL; //map link(global) extern unsigned char pKey[8]; //the global public key for communication extern int SetMask(int index1, int index2, int index3, int index4); extern Eventinfo eventinfo; //event information int RecordNum[10]; //global array for record number //define a pointer of BSTR for each table extern BSTR *condevdb; extern BSTR *mapdb; extern BSTR *cpudb; extern BSTR *memdb; extern BSTR *filedb; extern BSTR *osdb; extern BSTR *devicedb; extern BSTR *networkdb; extern BSTR *statdb; extern BSTR *netstatdb; ///////////////////////////////////////////////////////////////////////////// // CInventoryObj ////////////////////////////////////////////////////////////////////////////////// STDMETHODIMP CInventoryObj::InterfaceSupportsErrorInfo(REFIID riid) { static const IID* arr[] = { &IID_IInventoryObj }; for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++) { if (InlineIsEqualGUID(*arr[i],riid)) return S_OK; } return S_FALSE; } STDMETHODIMP CInventoryObj::HelloWorld() { return S_OK; } //**************************************************** //*CINV_s_sObj::Connect_To_DB * //*Function: * //* Connect to database service * //*Call format: * //*CINV_s_sObj::Connect_To_DB() * //*Output: * //* success of failure on connect to db service * //*Procedure called: * //* _tWinMain: connect to database service * //* CINV_s_sObj::Put_CPUInfo * //* CINV_s_sObj::Put_MEMInfo * //* CINV_s_sObj::Put_FILEInfo * //* CINV_s_sObj::Put_OSInfo * //* CINV_s_sObj::Put_DEVInfo * //* CINV_s_sObj::Put_NETInfo * //* CINV_s_sObj::Put_STATInfo * //* CINV_s_sObj::Put_NSTAInfo * //* CINV_s_sObj::Put_MAPInfo * //* CINV_s_sObj::Put_CONInfo * //* CINV_s_sObj::Put_SendPol * //* CINV_s_sObj::Put_SendPolNet * //* CINV_s_sObj::Put_SelectNet * //* : connect to database service * //**************************************************** STDMETHODIMP CInventoryObj::Connect_To_DB(void) { COSERVERINFO ServerInfo; memset(&ServerInfo, 0, sizeof(ServerInfo)); char temp[20]; strcpy(temp,dbip); char *RemoteService=temp; ServerInfo.pwszName=new wchar_t[IP_LEN]; mbstowcs(ServerInfo.pwszName, RemoteService, IP_LEN); m_pIobject_mm=NULL; MULTI_QI mqi[]={ {&IID_IDBObject,NULL,0}}; HRESULT hRes=CoCreateInstanceEx( CLSID_DBObject, NULL, CLSCTX_ALL, &ServerInfo, sizeof(mqi)/sizeof(mqi[0]), mqi); /* HRESULT hRes=::CoCreateInstance(CLSID_object_mm, NULL, CLSCTX_ALL, IID_Iobject_mm, (void**)&m_pIobject_mm); */ if(hRes==0 && SUCCEEDED(mqi[0].hr)) m_pIobject_mm=(IDBObject*)mqi[0].pItf; else if(hRes!=S_OK || m_pIobject_mm==NULL) return S_FALSE; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_CPUInfo * //*Function: * //* put cpu information into database * //*Call format: * //*CINV_s_sObj::Put_CPUInfo(CPUdb FAR *result, * //* long FAR *ID,int first * //* result : CPU information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting cpu information * //*Output: * //* success of failure on putting cpu information * //*Procedure called: * //* End system agent: put cpu information into db * //**************************************************** STDMETHODIMP CInventoryObj::Put_CPUInfo(CPUdb FAR *result,long FAR *ID,int first) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); //connect to sqlservice if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_CPU; in_table.encrypt_id = 0; //delete the original record that has the same endsystemid as "result->ID" if(first==1) { in_table.db_operation = DELETE; sprintf((char *)sql_str,"delete from INV_CPUTAB where EndSystemID = %ld",result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); //encrypt SQL sentence hRes = m_pIobject_mm->av_dbsql2(&in_table); } //insert the record that is from Mas_Agent (result) in_table.db_operation = INSERT; char CPUType[STR32], CPUManufacture[STR128]; DesStrDe((unsigned char *)result->CPUType, (unsigned char *)CPUType, (unsigned char *)pKey); //decrypt the data from Mas_Agent DesStrDe((unsigned char *)result->CPUManufacture, (unsigned char *)CPUManufacture, (unsigned char *)pKey); sprintf((char *)sql_str,"insert into INV_CPUTAB values (%ld,\"%s\",%d,\"%s\",%d)",result->ID,CPUType,result->CPUSpeed,CPUManufacture,result->CPUMMXFlag); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); //encrypt SQL sentence hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; //the error code is: connect db failed return S_OK; } //**************************************************** //*CINV_s_sObj::Put_MEMInfo * //*Function: * //* put memory information into database * //*Call format: * //*CINV_s_sObj::Put_MEMInfo(MEMORYdb FAR *result, * //* long FAR *ID,int first * //* result : memory information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting memory information * //*Output: * //* success of failure on putting memory info * //*Procedure called: * //* End system agent: put memory info into db * //**************************************************** STDMETHODIMP CInventoryObj::Put_MEMInfo(MEMORYdb FAR *result,long FAR *ID,int first) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); //connect to sqlservice if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_MEM; in_table.encrypt_id = 0; //delete the original record that has the same endsystemid as "result->ID" if(first==1) { in_table.db_operation = DELETE; sprintf((char *)sql_str,"delete from INV_MEMORYTAB where EndSystemID = %ld",result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); } //insert the record that is from Mas_Agent (result) in_table.db_operation = INSERT; sprintf((char *)sql_str,"insert into INV_MEMORYTAB values (%ld,%d,%d,%d)",result->ID,result->PhysicalSize,result->VirtualSize,result->PageSize); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_FILEInfo * //*Function: * //* put filesystem information into database * //*Call format: * //*CINV_s_sObj::Put_CPUInfo(FILESYSTEMdb FAR *result,* //* long FAR *ID,int first * //* result : filesystem information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting file system info * //*Output: * //* success of failure on putting file system info * //*Procedure called: * //* End system agent: put file system info into db * //**************************************************** STDMETHODIMP CInventoryObj::Put_FILEInfo(FILESYSTEMdb FAR *result,long FAR *ID,int first) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_FS; in_table.encrypt_id = 0; //delete the original record that has the same endsystemid as "result->ID" if(first==1) { in_table.db_operation = DELETE; sprintf((char *)sql_str,"delete from INV_FILETAB where EndSystemID = %ld",result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); } //insert the record that is from Mas_Agent (result) in_table.db_operation = INSERT; //decrypt data from Mas_Agent char FileSystemType[STR128], FileSystemDeviceName[STR32], FileSystemDescription[STR256]; DesStrDe((unsigned char *)result->FileSystemType, (unsigned char *)FileSystemType, (unsigned char *)pKey); DesStrDe((unsigned char *)result->FileSystemDeviceName, (unsigned char *)FileSystemDeviceName, (unsigned char *)pKey); DesStrDe((unsigned char *)result->FileSystemDescription, (unsigned char *)FileSystemDescription, (unsigned char *)pKey); sprintf((char *)sql_str,"insert into INV_FILETAB values (%ld,\"%s\",%d,%d,\"%s\",\"%s\")",result->ID,FileSystemType,result->FileSystemSize,result->FileSystemSurplus,FileSystemDeviceName,FileSystemDescription); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_OSInfo * //*Function: * //* put os information into database * //*Call format: * //*CINV_s_sObj::Put_OSInfo(OSdb FAR *result, * //* long FAR *ID,int first * //* result : OS information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting os information * //*Output: * //* success of failure on putting os information * //*Procedure called: * //* End system agent: put os information into db * //**************************************************** STDMETHODIMP CInventoryObj::Put_OSInfo(OSdb FAR *result,long FAR *ID,int first) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_OS; in_table.encrypt_id = 0; //delete the original record that has the same endsystemid as "result->ID" if(first==1) { in_table.db_operation = DELETE; sprintf((char *)sql_str,"delete from INV_OSTAB where EndSystemID = %ld",result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); } //insert the record that is from Mas_Agent (result) in_table.db_operation = INSERT; //decrypt data from Mas_Agent char OSType[STR32], OSVersion[STR32], OSDescription[STR256], OSInstallPath[STR256]; DesStrDe((unsigned char *)result->OSType, (unsigned char *)OSType, (unsigned char *)pKey); DesStrDe((unsigned char *)result->OSVersion, (unsigned char *)OSVersion, (unsigned char *)pKey); DesStrDe((unsigned char *)result->OSDescription, (unsigned char *)OSDescription, (unsigned char *)pKey); DesStrDe((unsigned char *)result->OSInstallPath, (unsigned char *)OSInstallPath, (unsigned char *)pKey); in_table.encrypt_id=SetMask(3,0,0,0); sprintf((char *)sql_str,"insert into INV_OSTAB values (%ld,\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")",result->ID,OSType,OSVersion,result->OSInstallTime,OSDescription,OSInstallPath); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_DEVInfo * //*Function: * //* put device information into database * //*Call format: * //*CINV_s_sObj::Put_DEVInfo(DEVICEdb FAR *result, * //* long FAR *ID,int first * //* result : device information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting device information * //*Output: * //* success of failure on putting device info * //*Procedure called: * //* End system agent: put device info into db * //**************************************************** STDMETHODIMP CInventoryObj::Put_DEVInfo(DEVICEdb FAR *result,long FAR *ID,int first) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_DEV; in_table.encrypt_id = 0; //delete the original record that has the same endsystemid as "result->ID" if(first==1) { in_table.db_operation = DELETE; sprintf((char *)sql_str,"delete from INV_DEVICETAB where EndSystemID = %ld",result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); } //insert the record that is from Mas_Agent (result) in_table.db_operation = INSERT; //decrypt data from Mas_Agent char DeviceName[STR128], DeviceManufacture[STR128], DeviceModel[STR128]; DesStrDe((unsigned char *)result->DeviceName, (unsigned char *)DeviceName, (unsigned char *)pKey); DesStrDe((unsigned char *)result->DeviceManufacture, (unsigned char *)DeviceManufacture, (unsigned char *)pKey); DesStrDe((unsigned char *)result->DeviceModel, (unsigned char *)DeviceModel, (unsigned char *)pKey); in_table.encrypt_id=SetMask(4,0,0,0); sprintf((char *)sql_str,"insert into INV_DEVICETAB values (%ld,\"%s\",\"%s\",\"%s\",\"%s\",%d,%d,%d)",result->ID,DeviceName,DeviceManufacture,DeviceModel,result->DeviceInstallTime,result->DeviceWorkStatus,result->DevicePNPFlag,result->DeviceIRQNO); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_NETInfo * //*Function: * //* put network information into database * //*Call format: * //*CINV_s_sObj::Put_NETInfo(NETWORKdb FAR *result, * //* long FAR *ID,int first * //* result : network information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting network information * //*Output: * //* success of failure on putting network info * //*Procedure called: * //* End system agent: put network info into db * //**************************************************** STDMETHODIMP CInventoryObj::Put_NETInfo(NETWORKdb FAR *result,long FAR *ID,int first) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_NET; in_table.encrypt_id = 0; //delete the original record that has the same endsystemid as "result->ID" if(first==1) { in_table.db_operation = DELETE; sprintf((char *)sql_str, "delete from INV_NETWORKTAB where EndSystemID = %ld",result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); } //insert the record that is from Mas_Agent (result) in_table.db_operation = INSERT; Transform_IP((char *)result->IPAddress); Transform_IP((char *)result->NetMask); //decrypt data from Mas_Agent char HostName[STR128], Currentuser[STR32], WorkGroup[STR32], LoginDomain[STR32], AdapterMAC[MAC_LEN]; DesStrDe((unsigned char *)result->HostName, (unsigned char *)HostName, (unsigned char *)pKey); DesStrDe((unsigned char *)result->Currentuser, (unsigned char *)Currentuser, (unsigned char *)pKey); DesStrDe((unsigned char *)result->WorkGroup, (unsigned char *)WorkGroup, (unsigned char *)pKey); DesStrDe((unsigned char *)result->LoginDomain, (unsigned char *)LoginDomain, (unsigned char *)pKey); DesStrDe((unsigned char *)result->AdapterMAC, (unsigned char *)AdapterMAC, (unsigned char *)pKey); in_table.encrypt_id=SetMask(2,3,0,0); sprintf((char *)sql_str,"insert into INV_NETWORKTAB values (%ld,\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")",result->ID,HostName,result->IPAddress,result->NetMask,Currentuser,WorkGroup,LoginDomain ,AdapterMAC); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_STATInfo * //*Function: * //* put statistics information into database * //*Call format: * //*CINV_s_sObj::Put_STATInfo(STATdb FAR *result, * //* long FAR *ID,int first * //* result : statistics information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting statistics info * //*Output: * //* success of failure on putting statistics info * //*Procedure called: * //* End system agent: put statistics info into db * //**************************************************** STDMETHODIMP CInventoryObj::Put_STATInfo(STATISTICSdb FAR *result,long FAR *ID,int first) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_STAT; in_table.encrypt_id = 0; //update the original record which newtag=1 in_table.db_operation = UPDATE; sprintf((char *)sql_str,"update INV_STATISTICSTAB set newtag=0 where newtag=1 and endsystemID=%ld",result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); //insert the record from Mas_Agent(result) in_table.db_operation = INSERT; sprintf((char *)sql_str,"insert into INV_STATISTICSTAB values (%ld,\"%s\",%d,%f,%f,%f,1)",result->ID,result->StatisticsTime,result->ProcessNum,result->CPUUseRate,result->MemoryUseRate,result->FileSystemUseRate); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); in_table.encrypt_id=SetMask(1,0,0,0); hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_NSTAInfo * //*Function: * //* put net statistics information into database * //*Call format: * //*CINV_s_sObj::Put_NSTAInfo(NETSTATdb FAR *result, * //* long FAR *ID,int first * //* result : net statistics information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting net statistics info * //*Output: * //* success of failure on putting net statistics info* //*Procedure called: * //* End system agent: put net statistics info into db* //**************************************************** STDMETHODIMP CInventoryObj::Put_NSTAInfo(NETSTATdb FAR *result,long FAR *ID,int first) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_NETSTAT; in_table.encrypt_id = 0; //update the record which newtag=1 in_table.db_operation = UPDATE; sprintf((char *)sql_str,"update INV_NETSTATAB set newtag=0 where newtag=1 and endsystemID=%ld",result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); //insert the record from Mas_Agent(result) in_table.db_operation = INSERT; Transform_IP((char *)result->IPAddress); Transform_IP((char *)result->NetMask); char AdapterMAC[MAC_LEN]; DesStrDe((unsigned char *)result->AdapterMAC, (unsigned char *)AdapterMAC, (unsigned char *)pKey); in_table.encrypt_id=SetMask(1,2,4,0); sprintf((char *)sql_str,"insert into INV_NETSTATAB values (%ld,\"%s\",\"%s\",\"%s\",%u,%u,%u,%u,%u,%u,%u,\"%s\",1)",result->ID,result->IPAddress,result->NetMask,AdapterMAC,result->ReceiveByte,result->SendByte,result->ReceiveByte,result->SendPacket,result->DiscardPacket,result->UnknownProtocols,result->ErrorPacket,result->StatisticsTime); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_MAPInfo * //*Function: * //* put map information into database * //*Call format: * //*CINV_s_sObj::Put_MAPInfo(MAPdb FAR *result, * //* long FAR *ID,int first * //* result : map information structure * //* ID : calling end system's ID(-1 if new member* //* first : whether this is the first record * //*Input: * //* all parameters of putting map information * //*Output: * //* success of failure on putting map information * //* distribute ID to new end system * //*Procedure called: * //* End system agent: put map information into db * //**************************************************** STDMETHODIMP CInventoryObj::Put_MAPInfo(MAPdb FAR *result,long *ID,int first) { char sql_str[1024]; HRESULT hRes; hRes=Connect_To_DB(); db_table in_table; if(result->ID==-1) //a new endsystem add { if(hRes==S_OK) { tab_record records; tables_union *ret_records=NULL; int i=0,start = 0,rec_number=0; int offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_MAP; in_table.encrypt_id = 0; Transform_IP((char *)result->IPAddress); //search the record that has the same ipaddr and hostname as "result" in_table.db_operation = SELECT; char HostName[STR128]; DesStrDe((unsigned char *)result->HostName, (unsigned char *)HostName, (unsigned char *)pKey); in_table.encrypt_id=SetMask(1,0,0,0); sprintf((char *)sql_str, "select * from INV_MAPTAB where IPAddress=\"%s\"", result->IPAddress); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if(rec_number > 0) { //exist such record that has the same ipaddr and hostname as "result", //so delete the original record from each table bases on endsystemid. ret_records = (tables_union *)records.records_buf; long ID = ret_records->table_inv_cpu.endsystem_id; in_table.db_operation = DELETE; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_MAPTAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); in_table.db_table_id = DB_INV | TABLE_INV_CPU; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_CPUTAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); in_table.db_table_id = DB_INV | TABLE_INV_MEM; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_MEMORYTAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); in_table.db_table_id = DB_INV | TABLE_INV_FS; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_FILETAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); in_table.db_table_id = DB_INV | TABLE_INV_OS; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_OSTAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); in_table.db_table_id = DB_INV | TABLE_INV_DEV; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_DEVICETAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); in_table.db_table_id = DB_INV | TABLE_INV_NET; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_NETWORKTAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); in_table.db_table_id = DB_INV | TABLE_INV_STAT; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_STATISTICSTAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); in_table.db_table_id = DB_INV | TABLE_INV_NETSTAT; in_table.encrypt_id = 0; sprintf((char *)sql_str, "delete from INV_NETSTATAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); } //insert the new record to map table in_table.db_table_id = DB_INV | TABLE_INV_MAP; in_table.db_operation = INSERT; in_table.encrypt_id=SetMask(1,0,0,0); //the endsystemid of this new record is automatic created by SQL server sprintf((char *)sql_str,"insert into INV_MAPTAB values (\"%s\",\"%s\",%d)",result->IPAddress,HostName,1); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); //select map table to get the new endsystemid in_table.db_operation = SELECT; in_table.encrypt_id=SetMask(1,0,0,0); sprintf((char *)sql_str,"select * from INV_MAPTAB where IPAddress= \"%s\" and HostName= \"%s\"",result->IPAddress,HostName); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes == DB_SUCCEED) { ret_records = (tables_union *)records.records_buf; if(offset > 0) result->ID=(ret_records+i)->table_inv_map.endsystem_id; } m_pIobject_mm->Release(); } } else //update the exist record of original endsystem { if(hRes==S_OK) { in_table.db_table_id = DB_INV | TABLE_INV_MAP; in_table.encrypt_id = 0; if(first==1) { //update the original record in_table.db_operation = UPDATE; Transform_IP((char *)result->IPAddress); char HostName[STR128]; DesStrDe((unsigned char *)result->HostName, (unsigned char *)HostName, (unsigned char *)pKey); in_table.encrypt_id=SetMask(1,0,0,0); sprintf((char *)sql_str,"update INV_MAPTAB set IPAddress= \"%s\", HostName= \"%s\", AvailableTag=%d where EndSystemID = %ld",result->IPAddress,HostName,1 /*result->AvailableTag*/,result->ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); } m_pIobject_mm->Release(); } } *ID=result->ID; //output the endsystem identity to Mas_Agent if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::Put_CONInfo * //*Function: * //* put connect device information into database * //*Call format: * //*CINV_s_sObj::Put_CONInfo(CONDEVdb FAR *result, * //* long FAR *ID,int first * //* result : connect device information structure * //* ID : calling end system's ID(no use) * //* first : whether this is the first record * //*Input: * //* all parameters of putting connect device info * //*Output: * //* success of failure on putting connect device info* //*Procedure called: * //* End system agent: put connect device info into db* //**************************************************** STDMETHODIMP CInventoryObj::Put_CONInfo(CONDEVdb FAR *result,long FAR *ID) { char sql_str[MAX_BUFFER]; HRESULT hRes=Connect_To_DB(); if(hRes==S_OK) { db_table in_table; in_table.db_table_id = DB_INV | TABLE_INV_DEVSYS; in_table.encrypt_id = 0; //delete the exist record that has the same DeviceObjectID and DeviceSysName as "result" in_table.db_operation = DELETE; char DeviceObjectID[STR256], DeviceSysName[STR256]; DesStrDe((unsigned char *)result->DeviceObjectID, (unsigned char *)DeviceObjectID, (unsigned char *)pKey); DesStrDe((unsigned char *)result->DeviceSysName, (unsigned char *)DeviceSysName, (unsigned char *)pKey); sprintf((char *)sql_str,"delete from INV_CONDEVTAB where DeviceObjectID = \"%s\" and DeviceSysName=\"%s\"",DeviceObjectID, DeviceSysName); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); //insert the new record in_table.db_operation = INSERT; char DeviceSysDescr[STR256], DeviceSysContact[STR256], DeviceSysLocation[STR256], DeviceVender[STR128]; DesStrDe((unsigned char *)result->DeviceSysDescr, (unsigned char *)DeviceSysDescr, (unsigned char *)pKey); DesStrDe((unsigned char *)result->DeviceSysContact, (unsigned char *)DeviceSysContact, (unsigned char *)pKey); DesStrDe((unsigned char *)result->DeviceSysLocation, (unsigned char *)DeviceSysLocation, (unsigned char *)pKey); DesStrDe((unsigned char *)result->DeviceVender, (unsigned char *)DeviceVender, (unsigned char *)pKey); sprintf((char *)sql_str,"insert into INV_CONDEVTAB values (\"%s\",\"%s\",\"%s\",\"%s\",%d,%d,%d,\"%s\",\"%s\")",DeviceSysDescr,DeviceObjectID,DeviceSysContact,DeviceSysLocation,result->DeviceSysServices,result->DeviceAvailablePortNO,result->DeviceActivePortNum,DeviceVender,DeviceSysName); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql2(&in_table); m_pIobject_mm->Release(); } if (hRes != DB_SUCCEED) return 501; return S_OK; } //**************************************************** //*CINV_s_sObj::RecCount * //*Function: * //* get the number of records of each table * //*Call format: * //*CINV_s_sObj::RecCount(BSTR DBname, * //* long FAR *count) * //* name : table name * //* count : number of records of each table * //*Input: * //* table name * //*Output: * //* number of records of each table * //*Procedure called: * //* INV CSCI: get the number of each table'srecords* //* NM CSCI: get the number of each table'srecords* //**************************************************** STDMETHODIMP CInventoryObj::RecCount(BSTR DBname,long FAR *count) { //decrypt the table name BSTR des_name=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(DBname, &des_name, (unsigned char *)pKey); char tmpstr[STR32]; WideCharToMultiByte(CP_ACP, 0, des_name, -1, tmpstr, STR32, NULL, NULL); SysFreeString(des_name); //matching table name, and output the record number if(strcmp(tmpstr , "MAP")==0) *count=RecordNum[0]; else if(strcmp(tmpstr , "CPU")==0) *count=RecordNum[1]; else if(strcmp(tmpstr , "MEM")==0) *count=RecordNum[2]; else if(strcmp(tmpstr , "FILE")==0) *count=RecordNum[3]; else if(strcmp(tmpstr , "OS")==0) *count=RecordNum[4]; else if(strcmp(tmpstr, "DEVICE")==0) *count=RecordNum[5]; else if(strcmp(tmpstr , "NETWORK")==0) *count=RecordNum[6]; else if(strcmp(tmpstr, "STAT")==0) *count=RecordNum[7]; else if(strcmp(tmpstr ,"NETSTAT")==0) *count=RecordNum[8]; else if(strcmp(tmpstr ,"CONDEV")==0) *count=RecordNum[9]; return S_OK; } //**************************************************** //*CINV_s_sObj::SendPolNet * //*Function: * //* search db by given net policy * //*Call format: * //*CINV_s_sObj::SendPolNet(BSTR name, * //* long andor1,long andor2,long andor3, * //* BSTR Sysname,BSTR Vender,long Services) * //* name : policy name * //* andorX : and/or/Nothing * //* Sysname : device system name * //* Vender : device vendor * //* Services: service level * //*Input: * //* net policy name and content * //*Output: * //* success of failure on searching database * //*Procedure called: * //* INV CSCI: search db by given net policy * //**************************************************** STDMETHODIMP CInventoryObj::SendPolNet(BSTR name,long andor1,long andor2,long andor3,BSTR Sysname,BSTR Vender,long Services) { //decrypt the policy name BSTR des_name=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(name, &des_name, (unsigned char *)pKey); HRESULT hRes=Connect_To_DB(); if(hRes!=S_OK) { RecordNum[9]=0; return 501; } int rec_number,i,j; db_table in_table; tab_record records; tables_union *ret_records; int start = 0; int offset=0; in_table.db_table_id = DB_INV | TABLE_INV_DEVSYS; in_table.db_operation = SELECT; in_table.encrypt_id = 0; char temp[10]; char namestr[STR32],Sysnamestr[STR256],Venderstr[STR128]; char sel_str[4096],sql_str[4096]; strcpy((char *)sel_str,"select * from INV_CONDEVTAB"); int first=1; //if the pointer of name is null, query all records. //the pointer of name isn't null, so build the policy. if (strcmp((LPSTR)des_name , "")!=0) { //decrypt the input variables BSTR des_Sysname=SysAllocStringByteLen(NULL, STR256*2); BSTR des_Vender=SysAllocStringByteLen(NULL, STR256*2); DesBSTRDe(Sysname, &des_Sysname, (unsigned char *)pKey); DesBSTRDe(Vender, &des_Vender, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_name, -1, namestr, STR32, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, des_Sysname, -1, Sysnamestr, STR256, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, des_Vender, -1, Venderstr, STR128, NULL, NULL); SysFreeString(des_name); SysFreeString(des_Sysname); SysFreeString(des_Vender); //build SQL sentence strcpy((char *)sql_str,""); //device_system name: "or" if(andor1==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } strcat((char *)sql_str,"DeviceSysName = \""); strcat((char *)sql_str,Sysnamestr); strcat((char *)sql_str,"\""); } //device_vender: "or" if(andor2==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } strcat((char *)sql_str,"DeviceVendor = \""); strcat((char *)sql_str,Venderstr); strcat((char *)sql_str,"\""); } //service level: "or" if(andor3==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } char tmp[2]; strcat((char *)sql_str,"DeviceSysServices = "); strcat((char *)sql_str,_itoa( Services, (char *)tmp, 10 )); } if(first==0) strcat((char *)sql_str," ) "); //device_system name: " and " if(andor1==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; strcat((char *)sql_str,"DeviceSysName = \""); strcat((char *)sql_str,Sysnamestr); strcat((char *)sql_str,"\""); } //device_vender: " and " if(andor2==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; strcat((char *)sql_str,"DeviceVendor = \""); strcat((char *)sql_str,Venderstr); strcat((char *)sql_str,"\""); } //service level: "and" if(andor3==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; char tmp[2]; strcat((char *)sql_str,"DeviceSysServices = "); strcat((char *)sql_str,_itoa( Services, (char *)tmp, 10 )); } if(strcmp((char *)sql_str,"")!=0) { strcat((char *)sel_str," where "); strcat((char *)sel_str,sql_str); } } //encrypt SQL sentence DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; BSTR tempbstr; char tempstr[STR256]; start=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED) { RecordNum[9]=0; if(hRes==1001) return S_OK; return 2014; } //distribute a memory block for condevdb if(first==0) { delete []condevdb; RecordNum[9]=rec_number; condevdb = new BSTR[9*rec_number]; first=1; } ret_records = (tables_union *)records.records_buf; //put the records queried from db to condevdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_desc, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_oid, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+1] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+1], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_contact, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+2] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+2], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_location, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+3] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+3], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_devsys.devsys_service,temp,10); tempbstr = MakeWideStrFromAnsi((char *)temp); condevdb[j*9+4] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+4], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_devsys.devsys_port_no,temp,10); tempbstr = MakeWideStrFromAnsi((char *)temp); condevdb[j*9+5] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+5], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_devsys.devsys_port_num,temp,10); tempbstr = MakeWideStrFromAnsi((char *)temp); condevdb[j*9+6] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+6], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_name, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+7] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+7], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_vendor, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+8] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+8], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[9]); m_pIobject_mm->Release(); return S_OK; } //**************************************************** //*CINV_s_sObj::SelectNet * //*Function: * //* search db by given ObjectID * //*Call format: * //*CINV_s_sObj::SelectNet(BSTR ObjectID) * //* ObjectID : connect device ObjectID * //*Input: * //* connect device ObjectID * //*Output: * //* success of failure on searching database * //*Procedure called: * //* INV CSCI: search db by given ObjectID * //**************************************************** STDMETHODIMP CInventoryObj::SelectNet(BSTR ObjectID, BSTR DeviceSysName) { HRESULT hRes=Connect_To_DB(); if(hRes!=S_OK) { RecordNum[9]=0; return 501; } int rec_number,i,j; db_table in_table; tab_record records; tables_union *ret_records; int start = 0; int offset=0; in_table.db_table_id = DB_INV | TABLE_INV_DEVSYS; in_table.db_operation = SELECT; in_table.encrypt_id = 0; char temp[10]; char sel_str[4096],ObjID[STR256],SysName[STR256]; int first=1; //decrypt the input variables BSTR des_ObjectID=SysAllocStringByteLen(NULL, STR256*2); BSTR des_DeviceSysName=SysAllocStringByteLen(NULL, STR256*2); DesBSTRDe(ObjectID, &des_ObjectID, (unsigned char *)pKey); DesBSTRDe(DeviceSysName, &des_DeviceSysName, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_ObjectID, -1, ObjID, STR256, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, des_DeviceSysName, -1, SysName, STR256, NULL, NULL); SysFreeString(des_ObjectID); SysFreeString(des_DeviceSysName); //build SQL sentence sprintf((char *)sel_str, "Select * from INV_CONDEVTAB where DeviceObjectID=\"%s\" and DeviceSysName=\"%s\"", ObjID, SysName); DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); BSTR tempbstr; char tempstr[STR256]; first=0; start=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED) { RecordNum[9]=0; if(hRes==1001) return S_OK; return 2014; } //distribute a memory block for condevdb if(first==0) { delete []condevdb; RecordNum[9]=rec_number; condevdb = new BSTR[9*rec_number]; first=1; } ret_records = (tables_union *)records.records_buf; //put the records queried from db to condevdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_desc, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_oid, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+1] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+1], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_contact, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+2] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+2], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_location, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+3] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+3], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_devsys.devsys_service,temp,10); tempbstr = MakeWideStrFromAnsi((char *)temp); condevdb[j*9+4] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+4], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_devsys.devsys_port_no,temp,10); tempbstr = MakeWideStrFromAnsi((char *)temp); condevdb[j*9+5] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+5], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_devsys.devsys_port_num,temp,10); tempbstr = MakeWideStrFromAnsi((char *)temp); condevdb[j*9+6] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+6], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_name, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+7] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+7], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_devsys.devsys_vendor, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); condevdb[j*9+8] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &condevdb[j*9+8], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[9]); m_pIobject_mm->Release(); return S_OK; } //**************************************************** //*CINV_s_sObj::SendPol * //*Function: * //* search db by given policy * //*Call format: * //*CINV_s_sObj::SendPol(BSTR name, * //* long andor1,long andor2,long andor3, * //* long andor4,long andor5,long andor6, * //* long andor7,BSTR CPUMin,BSTR CPUMax, * //* BSTR MemMin,BSTR MemMax,BSTR DskMin, * //* BSTR DskMax,long OSIndex, BSTR Equ, * //* BSTR IPMin,BSTR IPMax,BSTR Mac) * //* name : policy name * //* andorX : and/or/Nothing * //* CPUMin,CPUMax : CPU speed range * //* MemMin,MemMax : Memory space range * //* DskMin,DskMax : Disk space range * //* OsIndex : OS type index * //* 0--Windows 95 * //* 1--Windows 98 * //* 2--Windows NT * //* 3--Solaris * //* Equ : Equipment name * //* IPMin,IPMax : IP address range * //* Mac : Mac address * //*Input: * //* policy name and content * //*Output: * //* success of failure on searching database * //*Procedure called: * //* INV CSCI: search db by given policy * //**************************************************** STDMETHODIMP CInventoryObj::SendPol(BSTR name,long andor1,long andor2,long andor3,long andor4,long andor5,long andor6,long andor7,BSTR CPUMin,BSTR CPUMax,BSTR MemMin,BSTR MemMax,BSTR DskMin,BSTR DskMax,long OSIndex, BSTR Equ,BSTR IPMin,BSTR IPMax,BSTR Mac) { //decrypt the policy name BSTR des_name=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(name, &des_name, (unsigned char *)pKey); int i,j; HRESULT hRes=Connect_To_DB(); if(hRes!=S_OK) { for(i=0;i<7;i++) RecordNum[i]=0; return 501; } int rec_number; db_table in_table; tab_record records; tables_union *ret_records; int start = 0; int offset=0; in_table.db_table_id = DB_INV | VIEW_INV_ENDSYSTEM; in_table.db_operation = SELECT; in_table.encrypt_id = 0; char temp[10]; char namestr[STR32],CPUMinstr[STR32],CPUMaxstr[STR32],MemMinstr[STR32],MemMaxstr[STR32],DskMinstr[STR32],DskMaxstr[STR32],Equstr[STR128],IPMinstr[IP_LEN],IPMaxstr[IP_LEN],Macstr[MAC_LEN]; char sel_str[4096],sql_str[4096]; int first=1; strcpy((char *)sql_str,""); //if the pointer of name is null, query all records. //the pointer of name isn't null, so build the policy. if (strcmp((LPSTR)des_name , "")!=0) { //decryt the input variables WideCharToMultiByte(CP_ACP, 0, des_name, -1, namestr, STR32, NULL, NULL); SysFreeString(des_name); BSTR des_CPUMin=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(CPUMin, &des_CPUMin, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_CPUMin, -1, CPUMinstr, STR32, NULL, NULL); SysFreeString(des_CPUMin); BSTR des_CPUMax=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(CPUMax, &des_CPUMax, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, CPUMax, -1, CPUMaxstr, STR32, NULL, NULL); SysFreeString(des_CPUMax); BSTR des_MemMin=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(MemMin, &des_MemMin, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_MemMin, -1, MemMinstr, STR32, NULL, NULL); SysFreeString(des_MemMin); BSTR des_MemMax=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(MemMax, &des_MemMax, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_MemMax, -1, MemMaxstr, STR32, NULL, NULL); SysFreeString(des_MemMax); BSTR des_DskMin=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(DskMin, &des_DskMin, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_DskMin, -1, DskMinstr, STR32, NULL, NULL); SysFreeString(des_DskMin); BSTR des_DskMax=SysAllocStringByteLen(NULL, STR32*2); DesBSTRDe(DskMax, &des_DskMax, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_DskMax, -1, DskMaxstr, STR32, NULL, NULL); SysFreeString(des_DskMax); WideCharToMultiByte(CP_ACP, 0, IPMin, -1, IPMinstr, IP_LEN, NULL, NULL); if (strcmp(IPMinstr, "")!=0) Transform_IP(IPMinstr); WideCharToMultiByte(CP_ACP, 0, IPMax, -1, IPMaxstr, IP_LEN, NULL, NULL); if(strcmp(IPMaxstr, "")!=0) Transform_IP(IPMaxstr); BSTR des_Equ=SysAllocStringByteLen(NULL, STR128*2); DesBSTRDe(Equ, &des_Equ, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_Equ, -1, Equstr, STR128, NULL, NULL); SysFreeString(des_Equ); BSTR des_Mac=SysAllocStringByteLen(NULL, MAC_LEN*2); DesBSTRDe(Mac, &des_Mac, (unsigned char *)pKey); WideCharToMultiByte(CP_ACP, 0, des_Mac, -1, Macstr, MAC_LEN, NULL, NULL); SysFreeString(des_Mac); strcpy((char *)sel_str,"select * from EndSystemView"); //build SQL sentence strcpy((char *)sql_str,""); //CPU speed: "or" if(andor1==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } //have both the min and max value if(strcmp((char *)CPUMinstr,"")!=0 && strcmp((char *)CPUMaxstr,"")!=0) { strcat((char *)sql_str,"CPUSpeed >= "); strcat((char *)sql_str,CPUMinstr); strcat((char *)sql_str," and CPUSpeed <="); strcat((char *)sql_str,CPUMaxstr); } //only have the min value else if(strcmp((char *)CPUMinstr,"")!=0) { strcat((char *)sql_str,"CPUSpeed >= "); strcat((char *)sql_str,CPUMinstr); } //only have the max value else if(strcmp((char *)CPUMaxstr,"")!=0) { strcat((char *)sql_str,"CPUSpeed <="); strcat((char *)sql_str,CPUMaxstr); } } //memory size: "or" if(andor2==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } //have both the min and max value if(strcmp((char *)MemMinstr,"")!=0 && strcmp((char *)MemMaxstr,"")!=0) { strcat((char *)sql_str,"MemorySize >= "); strcat((char *)sql_str,MemMinstr); strcat((char *)sql_str," and MemorySize <="); strcat((char *)sql_str,MemMaxstr); } //only have the min value else if(strcmp((char *)MemMinstr,"")!=0) { strcat((char *)sql_str,"MemorySize >= "); strcat((char *)sql_str,MemMinstr); } //only have the max value else if(strcmp((char *)MemMaxstr,"")!=0) { strcat((char *)sql_str,"MemorySize <="); strcat((char *)sql_str,MemMaxstr); } } //harddisk size: "or" if(andor3==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } //have both the min and max value if(strcmp((char *)DskMinstr,"")!=0 && strcmp((char *)DskMaxstr,"")!=0) { strcat((char *)sql_str,"HardDiskSize >= "); strcat((char *)sql_str,DskMinstr); strcat((char *)sql_str," and HardDiskSize <="); strcat((char *)sql_str,DskMaxstr); } //only have the min value else if(strcmp((char *)DskMinstr,"")!=0) { strcat((char *)sql_str,"HardDiskSize >= "); strcat((char *)sql_str,DskMinstr); } //only have the max value else if(strcmp((char *)DskMaxstr,"")!=0) { strcat((char *)sql_str,"HardDiskSize <="); strcat((char *)sql_str,DskMaxstr); } } //os type: "or" if(andor4==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } switch (OSIndex) { case 0: strcat((char *)sql_str,"OSType = \"Windows 95\""); break; case 1: strcat((char *)sql_str,"OSType = \"Windows 98\""); break; case 2: strcat((char *)sql_str,"OSType = \"Windows NT\""); break; case 3: strcat((char *)sql_str,"OSType = \"Solaris\""); break; } } //equipment name: "or" if(andor5==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } strcat((char *)sql_str,"DeviceName = \""); strcat((char *)sql_str,Equstr); strcat((char *)sql_str,"\""); } //ip address: "or" if(andor6==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } //have both the min and max value if(strcmp((char *)IPMinstr,"")!=0 && strcmp((char *)IPMaxstr,"")!=0) { strcat((char *)sql_str,"IPAddress >= \""); strcat((char *)sql_str,IPMinstr); strcat((char *)sql_str,"\" and IPAddress <= \""); strcat((char *)sql_str,IPMaxstr); strcat((char *)sql_str,"\""); } //only have the min value else if(strcmp((char *)IPMinstr,"")!=0) { strcat((char *)sql_str,"IPAddress >= \""); strcat((char *)sql_str,IPMinstr); strcat((char *)sql_str,"\""); } //only have the max value else if(strcmp((char *)IPMaxstr,"")!=0) { strcat((char *)sql_str,"IPAddress <= \""); strcat((char *)sql_str,IPMaxstr); strcat((char *)sql_str,"\""); } } //MAC address: "or" if(andor7==1) { if (first==0) strcat((char *)sql_str," or "); else { strcat((char *)sql_str," ( "); first = 0; } strcat((char *)sql_str,"MACAddress = \""); strcat((char *)sql_str,Macstr); strcat((char *)sql_str,"\""); } if(first==0) strcat((char *)sql_str," ) "); //CPU speed: "and" if(andor1==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; //have both the min and max value if(strcmp((char *)CPUMinstr,"")!=0 && strcmp((char *)CPUMaxstr,"")!=0) { strcat((char *)sql_str,"CPUSpeed >= "); strcat((char *)sql_str,CPUMinstr); strcat((char *)sql_str," and CPUSpeed <="); strcat((char *)sql_str,CPUMaxstr); } //only have the min value else if(strcmp((char *)CPUMinstr,"")!=0) { strcat((char *)sql_str,"CPUSpeed >= "); strcat((char *)sql_str,CPUMinstr); } //only have the max value else if(strcmp((char *)CPUMaxstr,"")!=0) { strcat((char *)sql_str,"CPUSpeed <="); strcat((char *)sql_str,CPUMaxstr); } } //memory size: "and" if(andor2==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; //have both the min and max value if(strcmp((char *)MemMinstr,"")!=0 && strcmp((char *)MemMaxstr,"")!=0) { strcat((char *)sql_str,"MemorySize >= "); strcat((char *)sql_str,MemMinstr); strcat((char *)sql_str," and MemorySize <="); strcat((char *)sql_str,MemMaxstr); } //only have the min value else if(strcmp((char *)MemMinstr,"")!=0) { strcat((char *)sql_str,"MemorySize >= "); strcat((char *)sql_str,MemMinstr); } //only have the max value else if(strcmp((char *)MemMaxstr,"")!=0) { strcat((char *)sql_str,"MemorySize <="); strcat((char *)sql_str,MemMaxstr); } } //harddisk size: "and" if(andor3==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; //have both the min and max value if(strcmp((char *)DskMinstr,"")!=0 && strcmp((char *)DskMaxstr,"")!=0) { strcat((char *)sql_str,"HardDiskSize >= "); strcat((char *)sql_str,DskMinstr); strcat((char *)sql_str," and HardDiskSize <="); strcat((char *)sql_str,DskMaxstr); } //only have the min value else if(strcmp((char *)DskMinstr,"")!=0) { strcat((char *)sql_str,"HardDiskSize >= "); strcat((char *)sql_str,DskMinstr); } //only have the max value else if(strcmp((char *)DskMaxstr,"")!=0) { strcat((char *)sql_str,"HardDiskSize <="); strcat((char *)sql_str,DskMaxstr); } } //os type: " and " if(andor4==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; switch (OSIndex) { case 0: strcat((char *)sql_str,"OSType = \"Windows 95\""); break; case 1: strcat((char *)sql_str,"OSType = \"Windows 98\""); break; case 2: strcat((char *)sql_str,"OSType = \"Windows NT\""); break; case 3: strcat((char *)sql_str,"OSType = \"Solaris\""); break; } } //equipment name: "and" if(andor5==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; strcat((char *)sql_str,"DeviceName = \""); strcat((char *)sql_str,Equstr); strcat((char *)sql_str,"\""); } //IP address: "and" if(andor6==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; //both have the min and max value if(strcmp((char *)IPMinstr,"")!=0 && strcmp((char *)IPMaxstr,"")!=0) { strcat((char *)sql_str,"IPAddress >= \""); strcat((char *)sql_str,IPMinstr); strcat((char *)sql_str,"\" and IPAddress <= \""); strcat((char *)sql_str,IPMaxstr); strcat((char *)sql_str,"\""); } //only have the min value else if(strcmp((char *)IPMinstr,"")!=0) { strcat((char *)sql_str,"IPAddress >= \""); strcat((char *)sql_str,IPMinstr); strcat((char *)sql_str,"\""); } //only have the max value else if(strcmp((char *)IPMaxstr,"")!=0) { strcat((char *)sql_str,"IPAddress <= \""); strcat((char *)sql_str,IPMaxstr); strcat((char *)sql_str,"\""); } } //MAC address: "and" if(andor7==2) { if (first==0) strcat((char *)sql_str," and "); else first = 0; strcat((char *)sql_str,"MACAddress = \""); strcat((char *)sql_str,Macstr); strcat((char *)sql_str,"\""); } if(strcmp((char *)sql_str,"")!=0) { strcat((char *)sel_str," where "); strcat((char *)sel_str,sql_str); } //encrypt SQL sentence DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); //set mask for ipaddress int index=0; if(andor6==1) { if(andor4==1) index++; else if(andor5==1) index++; else if(strcmp((char *)IPMinstr,"")!=0 && strcmp((char *)IPMaxstr,"")!=0) index=index+2; else if(strcmp((char *)IPMinstr,"")!=0) index++; else if(strcmp((char *)IPMaxstr,"")!=0) index++; } else if(andor6==2) { if(andor7==1) index++; else if(andor4==1 || andor4==2) index++; else if(andor5==1 || andor5==2) index++; else if(strcmp((char *)IPMinstr,"")!=0 && strcmp((char *)IPMaxstr,"")!=0) index=index+2; else if(strcmp((char *)IPMinstr,"")!=0) index++; else if(strcmp((char *)IPMaxstr,"")!=0) index++; } if( index>0 ) { if(strcmp((char *)IPMinstr,"")!=0 && strcmp((char *)IPMaxstr,"")!=0) in_table.encrypt_id=SetMask(index-1, index,0,0); else if(strcmp((char *)IPMinstr,"")!=0 || strcmp((char *)IPMaxstr,"")!=0) in_table.encrypt_id=SetMask(index,0,0,0); } first=0; //build "where" sentence basis on the endsystemid that queried from the view strcpy((char *)sel_str,""); start=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); ret_records = (tables_union *)records.records_buf; if (hRes != DB_SUCCEED){ for(i=0;i<7;i++) RecordNum[i]=0; return 2005; } if(offset > 0){ for(i=0;i<offset;i++) { if(first!=0) strcat((char *)sel_str," or "); else first=1; _ltoa((ret_records+i)->view_inv_endsystem.endsystem_id,temp,10); strcat(sel_str,"EndSystemID="); strcat(sel_str,temp); } } } while(start+offset<rec_number); if(first>0) { strcpy((char *)sql_str," where "); strcat((char *)sql_str,sel_str); } else strcpy((char *)sql_str,""); } //build SQL sentence(add "where" condition), select each table //encrypt/decrypt each records in_table.db_operation = SELECT; in_table.encrypt_id = 0; char tempstr[STR256]; BSTR tempbstr; start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_MAP; strcpy((char *)sel_str,"Select * from INV_MAPTAB "); strcat((char *)sel_str,sql_str); DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED) { RecordNum[0]=0; if(hRes==1001) return S_OK; return 2005; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for mapdb if(first==0) { delete []mapdb; RecordNum[0]=rec_number; mapdb = new BSTR[4*rec_number]; first=1; } //put the records queried from db to mapdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_map.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); mapdb[j*4]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_map.map_ip_addr); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); mapdb[j*4+1]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+1], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_map.map_hostname, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); mapdb[j*4+2]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+2], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_map.map_available_flag,temp,10); tempbstr = MakeWideStrFromAnsi(temp); mapdb[j*4+3]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+3], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[0]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_CPU; strcpy((char *)sel_str,"Select * from INV_CPUTAB "); strcat((char *)sel_str,sql_str); DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[1]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for cpudb if(first==0) { delete []cpudb; RecordNum[1]=rec_number; cpudb = new BSTR[5*rec_number]; first=1; } //put the records queried from db to cpudb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_cpu.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); cpudb[j*5] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &cpudb[j*5], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_cpu.cpu_type, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); cpudb[j*5+1] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &cpudb[j*5+1], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_cpu.cpu_speed,temp,10); tempbstr = MakeWideStrFromAnsi(temp); cpudb[j*5+2] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &cpudb[j*5+2], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_cpu.cpu_manufacture, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); cpudb[j*5+3] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &cpudb[j*5+3], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_cpu.cpu_mmx_flag,temp,10); tempbstr = MakeWideStrFromAnsi(temp); cpudb[j*5+4] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &cpudb[j*5+4], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[1]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_MEM; strcpy((char *)sel_str,"Select * from INV_MEMORYTAB "); strcat((char *)sel_str,sql_str); DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[2]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block from db to memdb if(first==0) { delete []memdb; RecordNum[2]=rec_number; memdb = new BSTR[4*rec_number]; first=1; } //put the records queried from db to memdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_mem.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); memdb[j*4] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &memdb[j*4], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_mem.mem_physical_size,temp,10); tempbstr = MakeWideStrFromAnsi(temp); memdb[j*4+1] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &memdb[j*4+1], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_mem.mem_virtual_size,temp,10); tempbstr = MakeWideStrFromAnsi(temp); memdb[j*4+2] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &memdb[j*4+2], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_mem.mem_page_size,temp,10); tempbstr = MakeWideStrFromAnsi(temp); memdb[j*4+3] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &memdb[j*4+3], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[2]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_FS; strcpy((char *)sel_str,"Select * from INV_FILETAB "); strcat((char *)sel_str,sql_str); DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[3]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for filedb if(first==0) { delete []filedb; RecordNum[3]=rec_number; filedb = new BSTR[6*rec_number]; first=1; } //put the records queried from db to filedb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_fs.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); filedb[j*6] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &filedb[j*6], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_fs.fs_type, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); filedb[j*6+1] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &filedb[j*6+1], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_fs.fs_size,temp,10); tempbstr = MakeWideStrFromAnsi(temp); filedb[j*6+2] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &filedb[j*6+2], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_fs.fs_surplus,temp,10); tempbstr = MakeWideStrFromAnsi(temp); filedb[j*6+3] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &filedb[j*6+3], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_fs.fs_dev_name, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); filedb[j*6+4] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &filedb[j*6+4], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_fs.fs_desc, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); filedb[j*6+5] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &filedb[j*6+5], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[3]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_OS; strcpy((char *)sel_str,"Select * from INV_OSTAB "); strcat((char *)sel_str,sql_str); DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[4]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for osdb if(first==0) { delete []osdb; RecordNum[4]=rec_number; osdb = new BSTR[6*rec_number]; first=1; } //put the records queried from db to osdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_os.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); osdb[j*6] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &osdb[j*6], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_os.os_type, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); osdb[j*6+1] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &osdb[j*6+1], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_os.os_ver, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); osdb[j*6+2] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &osdb[j*6+2], (unsigned char *)pKey); SysFreeString(tempbstr); tempbstr = MakeWideStrFromAnsi((char *)(ret_records+i)->table_inv_os.os_install_time); osdb[j*6+3] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &osdb[j*6+3], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_os.os_desc, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); osdb[j*6+4] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &osdb[j*6+4], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_os.os_install_path, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); osdb[j*6+5] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &osdb[j*6+5], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[4]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_DEV; strcpy((char *)sel_str,"Select * from INV_DEVICETAB "); strcat((char *)sel_str,sql_str); DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[5]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for devicedb if(first==0) { delete []devicedb; RecordNum[5]=rec_number; devicedb = new BSTR[8*rec_number]; first=1; } //put the records queried from db to devicedb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_dev.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); devicedb[j*8] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &devicedb[j*8], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_dev.dev_name, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); devicedb[j*8+1] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &devicedb[j*8+1], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_dev.dev_manufacture, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); devicedb[j*8+2] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &devicedb[j*8+2], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_dev.dev_model, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); devicedb[j*8+3] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &devicedb[j*8+3], (unsigned char *)pKey); SysFreeString(tempbstr); tempbstr = MakeWideStrFromAnsi((char *)(ret_records+i)->table_inv_dev.dev_install_time); devicedb[j*8+4] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &devicedb[j*8+4], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_dev.dev_status,temp,10); tempbstr = MakeWideStrFromAnsi(temp); devicedb[j*8+5] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &devicedb[j*8+5], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_dev.dev_pnp_flag,temp,10); tempbstr = MakeWideStrFromAnsi(temp); devicedb[j*8+6] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &devicedb[j*8+6], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_dev.dev_irq_no,temp,10); tempbstr = MakeWideStrFromAnsi(temp); devicedb[j*8+7] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &devicedb[j*8+7], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[5]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_NET; strcpy((char *)sel_str,"Select * from INV_NETWORKTAB "); strcat((char *)sel_str,sql_str); DesStrEn((unsigned char *)sel_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[6]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for networkdb if(first==0) { delete []networkdb; RecordNum[6]=rec_number; networkdb = new BSTR[8*rec_number]; first=1; } //put the records queried from db to networkdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_dev.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); networkdb[j*8] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &networkdb[j*8], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_net.net_hostname, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); networkdb[j*8+1] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &networkdb[j*8+1], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_net.net_ip_addr); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); networkdb[j*8+2] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &networkdb[j*8+2], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_net.net_mask); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); networkdb[j*8+3] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &networkdb[j*8+3], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_net.net_cur_user, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); networkdb[j*8+4] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &networkdb[j*8+4], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_net.net_work_grp, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); networkdb[j*8+5] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &networkdb[j*8+5], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_net.net_domain, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); networkdb[j*8+6] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &networkdb[j*8+6], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_net.net_mac_addr, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi(tempstr); networkdb[j*8+7] =SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &networkdb[j*8+7], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[6]); m_pIobject_mm->Release(); return S_OK; } //**************************************************** //*CINV_s_sObj::SelectDyn * //*Function: * //* search db dynamically * //*Call format: * //*CINV_s_sObj::SelectDyn() * //*Output: * //* success of failure on searching database * //*Procedure called: * //* INV CSCI: search db dynamically * //**************************************************** STDMETHODIMP CInventoryObj::SelectDyn() { char sql_str[MAX_BUFFER]; int i; HRESULT hRes=Connect_To_DB(); if(hRes!=S_OK) { RecordNum[0]=0; for(i=7;i<9;i++) RecordNum[i]=0; return 501; } int j,rec_number; db_table in_table; tab_record records; tables_union *ret_records; int start,offset,first; char temp[10],IPMinstr[16]; //select each table in_table.db_operation = SELECT; in_table.encrypt_id = 0; char tempstr[256]; BSTR tempbstr; start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_MAP; strcpy((char *)sql_str,"Select * from INV_MAPTAB"); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED) { RecordNum[0]=0; if(hRes==1001) return S_OK; return 2005; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for mapdb if(first==0) { /* if(RecordNum[0]>0)//是否应该释放? { for(i=0; i<RecordNum[0]; i++) { SysFreeString(mapdb[i*4]); SysFreeString(mapdb[i*4+1]); SysFreeString(mapdb[i*4+2]); SysFreeString(mapdb[i*4+3]); } }*/ delete []mapdb; RecordNum[0]=rec_number; mapdb = new BSTR[4*rec_number]; first=1; } //put the records queried from db to mapdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_map.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); mapdb[j*4]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_map.map_ip_addr); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); mapdb[j*4+1]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+1], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_map.map_hostname, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); mapdb[j*4+2]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+2], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_map.map_available_flag,temp,10); tempbstr = MakeWideStrFromAnsi(temp); mapdb[j*4+3]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+3], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[0]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_STAT; strcpy((char *)sql_str,"Select * from INV_STATISTICSTAB where newtag=1"); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[7]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for statdb if(first==0) { delete []statdb; RecordNum[7]=rec_number; statdb=new BSTR[6*rec_number]; first=1; } //put the records queried from db to statdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_stat.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6], (unsigned char *)pKey); SysFreeString(tempbstr); tempbstr = MakeWideStrFromAnsi((char *)(ret_records+i)->table_inv_stat.stat_time); statdb[j*6+1] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+1], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_stat.stat_proc_num,temp,10); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+2] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+2], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_cpu_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+3] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+3], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_mem_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+4] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+4], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_fs_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+5] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+5], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[7]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_NETSTAT; strcpy((char *)sql_str,"Select * from INV_NETSTATAB where newtag=1"); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[8]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for netstatdb if(first==0) { delete []netstatdb; RecordNum[8]=rec_number; netstatdb = new BSTR[12*rec_number]; first=1; } //put the records queried from db to netstatdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_netstat.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12], (unsigned char *)pKey); SysFreeString(tempbstr); tempbstr = MakeWideStrFromAnsi((char *)(ret_records+i)->table_inv_netstat.netstat_time); netstatdb[j*12+1] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+1], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_netstat.netstat_ip_addr); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); netstatdb[j*12+2] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+2], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_netstat.netstat_mask); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); netstatdb[j*12+3] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+3], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_netstat.netstat_mac_addr, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); netstatdb[j*12+4] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+4], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_rcv_byte,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+5] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+5], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_send_byte,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+6] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+6], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_rcv_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+7] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+7], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_send_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+8] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+8], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_discard_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+9] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+9], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_unknown_protocol,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+10] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+10], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_error_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+11] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+11], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[8]); m_pIobject_mm->Release(); return S_OK; } //**************************************************** //*CINV_s_sObj::SelectDyn1 * //*Function: * //* search db dynamically * //*Call format: * //*CINV_s_sObj::SelectDyn1() * //*Output: * //* success of failure on searching database * //*Procedure called: * //* INV CSCI: search db dynamically * //**************************************************** STDMETHODIMP CInventoryObj::SelectDyn1() { char sql_str[MAX_BUFFER]; int i; HRESULT hRes=Connect_To_DB(); if(hRes!=S_OK) { RecordNum[0]=0; RecordNum[7]=0; return 501; } int j,rec_number; db_table in_table; tab_record records; tables_union *ret_records; int start,offset,first; char temp[10],IPMinstr[IP_LEN]; //select each table in_table.db_operation = SELECT; in_table.encrypt_id = 0; char tempstr[STR256]; BSTR tempbstr; start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_MAP; strcpy((char *)sql_str, "Select * from INV_MAPTAB"); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED) { RecordNum[0]=0; if(hRes==1001) return S_OK; return 2005; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for mapdb if(first==0) { delete []mapdb; RecordNum[0]=rec_number; mapdb = new BSTR[4*rec_number]; first=1; } //put the records queried from db to mapdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_map.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); mapdb[j*4]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_map.map_ip_addr); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); mapdb[j*4+1]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+1], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_map.map_hostname, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); mapdb[j*4+2]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+2], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_map.map_available_flag,temp,10); tempbstr = MakeWideStrFromAnsi(temp); mapdb[j*4+3]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+3], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[0]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_STAT; strcpy((char *)sql_str,"Select * from INV_STATISTICSTAB where newtag=1"); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[7]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for statdb if(first==0) { delete []statdb; RecordNum[7]=rec_number; statdb=new BSTR[6*rec_number]; first=1; } //put the records queried from db to statdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_stat.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6], (unsigned char *)pKey); SysFreeString(tempbstr); tempbstr = MakeWideStrFromAnsi((char *)(ret_records+i)->table_inv_stat.stat_time); statdb[j*6+1] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+1], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_stat.stat_proc_num,temp,10); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+2] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+2], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_cpu_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+3] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+3], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_mem_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+4] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+4], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_fs_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+5] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+5], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[7]); m_pIobject_mm->Release(); return S_OK; } //**************************************************** //*CINV_s_sObj::SelectDyn2 * //*Function: * //* search db dynamically * //*Call format: * //*CINV_s_sObj::SelectDyn2() * //*Output: * //* success of failure on searching database * //*Procedure called: * //* INV CSCI: search db dynamically * //**************************************************** STDMETHODIMP CInventoryObj::SelectDyn2() { char sql_str[MAX_BUFFER]; int i; HRESULT hRes=Connect_To_DB(); if(hRes!=S_OK) { RecordNum[0]=0; RecordNum[8]=0; return 501; } int j,rec_number; db_table in_table; tab_record records; tables_union *ret_records; int start,offset,first; char temp[10],IPMinstr[IP_LEN]; //select each table in_table.db_operation = SELECT; in_table.encrypt_id = 0; char tempstr[STR256]; BSTR tempbstr; start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_MAP; strcpy((char *)sql_str,"Select * from INV_MAPTAB"); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED) { RecordNum[0]=0; if(hRes==1001) return S_OK; return 2005; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for mapdb if(first==0) { delete []mapdb; RecordNum[0]=rec_number; mapdb = new BSTR[4*rec_number]; first=1; } //put the records queried from db to mapdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_map.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); mapdb[j*4]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_map.map_ip_addr); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); mapdb[j*4+1]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+1], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_map.map_hostname, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); mapdb[j*4+2]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+2], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_map.map_available_flag,temp,10); tempbstr = MakeWideStrFromAnsi(temp); mapdb[j*4+3]=SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &mapdb[j*4+3], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[0]); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_NETSTAT; strcpy((char *)sql_str,"Select * from INV_NETSTATAB where newtag=1"); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[8]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for netstatdb if(first==0) { delete []netstatdb; RecordNum[8]=rec_number; netstatdb = new BSTR[12*rec_number]; first=1; } //put the records queried from db to netstatdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_netstat.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12], (unsigned char *)pKey); SysFreeString(tempbstr); tempbstr = MakeWideStrFromAnsi((char *)(ret_records+i)->table_inv_netstat.netstat_time); netstatdb[j*12+1] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+1], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_netstat.netstat_ip_addr); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); netstatdb[j*12+2] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+2], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_netstat.netstat_mask); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); netstatdb[j*12+3] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+3], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_netstat.netstat_mac_addr, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); netstatdb[j*12+4] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+4], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_rcv_byte,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+5] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+5], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_send_byte,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+6] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+6], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_rcv_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+7] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+7], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_send_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+8] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+8], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_discard_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+9] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+9], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_unknown_protocol,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+10] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+10], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_error_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+11] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+11], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[8]); m_pIobject_mm->Release(); return S_OK; } //**************************************************** //*CINV_s_sObj::Sel_NetChart * //*Function: * //* search EndSystemID's Statistics * //*Call format: * //*CINV_s_sObj::Sel_NetChart(BSTR EndSystemID, * //* BSTR FromTime,BSTR ToTime) * //* EndSystemID : ID of EndSysstem * //* FromTime : Select from this time * //* ToTime : Select to this time * //*Input: * //* select condition //*Output: * //* success of failure on searching database * //*Procedure called: * //* INV CSCI: search EndSystemID's Statistics * //**************************************************** STDMETHODIMP CInventoryObj::Sel_NetChart(BSTR EndSystemID, BSTR FromTime,BSTR ToTime) { char sql_str[MAX_BUFFER]; char tempstr[STR256]; BSTR tempbstr; int i; HRESULT hRes=Connect_To_DB(); if(hRes!=S_OK) { RecordNum[8]=0; return 501; } int j,rec_number; db_table in_table; tab_record records; tables_union *ret_records; int start,offset,first; char temp[10],IPMinstr[IP_LEN]; char IDstr[7],Fromstr[15],Tostr[15]; WideCharToMultiByte(CP_ACP, 0, EndSystemID, -1, IDstr, 7, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, FromTime, -1, Fromstr, 15, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, ToTime, -1, Tostr, 15, NULL, NULL); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_NETSTAT; in_table.encrypt_id=SetMask(2,3,0,0); //build SQL sentence sprintf((char *)sql_str, "Select * from INV_NETSTATAB where EndSystemID=%s and StatisticsTime > '%s' and StatisticsTime<='%s'",IDstr,Fromstr,Tostr); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[8]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for netstatdb if(first==0) { delete netstatdb; RecordNum[8]=rec_number; netstatdb = new BSTR[12*rec_number]; first=1; } //put the records queried from db to netstatdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_netstat.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12], (unsigned char *)pKey); SysFreeString(tempbstr); tempbstr = MakeWideStrFromAnsi((char *)(ret_records+i)->table_inv_netstat.netstat_time); netstatdb[j*12+1] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+1], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_netstat.netstat_ip_addr); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); netstatdb[j*12+2] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+2], (unsigned char *)pKey); SysFreeString(tempbstr); strcpy((char *)IPMinstr,(char *)(ret_records+i)->table_inv_netstat.netstat_mask); Tranvers_IP(IPMinstr); tempbstr = MakeWideStrFromAnsi(IPMinstr); netstatdb[j*12+3] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+3], (unsigned char *)pKey); SysFreeString(tempbstr); DesStrDe((unsigned char *)(ret_records+i)->table_inv_netstat.netstat_mac_addr, (unsigned char *)tempstr, (unsigned char *)pKey); tempbstr = MakeWideStrFromAnsi((char *)tempstr); netstatdb[j*12+4] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+4], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_rcv_byte,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+5] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+5], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_send_byte,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+6] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+6], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_rcv_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+7] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+7], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_send_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+8] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+8], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_discard_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+9] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+9], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_unknown_protocol,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+10] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+10], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_netstat.netstat_error_packet,temp,10); tempbstr = MakeWideStrFromAnsi(temp); netstatdb[j*12+11] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &netstatdb[j*12+11], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[8]); m_pIobject_mm->Release(); return S_OK; } //**************************************************** //*CINV_s_sObj::Sel_StaChart * //*Function: * //* search EndSystemID's Statistics * //*Call format: * //*CINV_s_sObj::Sel_StaChart(BSTR EndSystemID, * //* BSTR FromTime,BSTR ToTime) * //* EndSystemID : ID of EndSysstem * //* FromTime : Select from this time * //* ToTime : Select to this time * //*Input: * //* select condition //*Output: * //* success of failure on searching database * //*Procedure called: * //* INV CSCI: search EndSystemID's Statistics * //**************************************************** STDMETHODIMP CInventoryObj::Sel_StaChart(BSTR EndSystemID, BSTR FromTime,BSTR ToTime) { char sql_str[MAX_BUFFER]; BSTR tempbstr; int i; HRESULT hRes=Connect_To_DB(); if(hRes!=S_OK) { RecordNum[7]=0; return 501; } int j,rec_number; db_table in_table; tab_record records; tables_union *ret_records; int start,offset,first; char temp[10]; char IDstr[7],Fromstr[15],Tostr[15]; WideCharToMultiByte(CP_ACP, 0, EndSystemID, -1, IDstr, 7, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, FromTime, -1, Fromstr, 15, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, ToTime, -1, Tostr, 15, NULL, NULL); start = 0; offset = 0; in_table.db_table_id = DB_INV | TABLE_INV_STAT; in_table.encrypt_id=SetMask(2,3,0,0); //build SQL sentence sprintf((char *)sql_str,"Select * from INV_STATISTICSTAB where EndSystemID=%s and StatisticsTime > '%s' and StatisticsTime<='%s'",IDstr,Fromstr,Tostr); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); first=0; do { start+=offset; hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); if (hRes != DB_SUCCEED){ RecordNum[7]=0; first=1; offset=0; rec_number=0; } ret_records = (tables_union *)records.records_buf; //distribute a memory block for statdb if(first==0) { delete statdb; RecordNum[7]=rec_number; statdb=new BSTR[6*rec_number]; first=1; } //put the records queried from db to statdb if(offset > 0){ for(i=0,j=start;i<offset;i++,j++){ _ltoa((ret_records+i)->table_inv_stat.endsystem_id,temp,10); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6], (unsigned char *)pKey); SysFreeString(tempbstr); tempbstr = MakeWideStrFromAnsi((char *)(ret_records+i)->table_inv_stat.stat_time); statdb[j*6+1] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+1], (unsigned char *)pKey); SysFreeString(tempbstr); itoa((ret_records+i)->table_inv_stat.stat_proc_num,temp,10); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+2] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+2], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_cpu_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+3] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+3], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_mem_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+4] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+4], (unsigned char *)pKey); SysFreeString(tempbstr); sprintf(temp,"%f",(ret_records+i)->table_inv_stat.stat_fs_rate); tempbstr = MakeWideStrFromAnsi(temp); statdb[j*6+5] = SysAllocStringByteLen(NULL, 256*2); DesBSTREn(tempbstr, &statdb[j*6+5], (unsigned char *)pKey); SysFreeString(tempbstr); } } } while(start+offset<RecordNum[7]); m_pIobject_mm->Release(); return S_OK; } //**************************************************** //*CINV_s_sObj::ReceiveMAP * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveMAP(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveMAP(VARIANT FAR *oarray) { BSTR *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; count=RecordNum[0]; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; for (i=0;i<count;i++) //put the data to variant { pbstr[i*4] = mapdb[i*4]; pbstr[i*4+1] = mapdb[i*4+1]; pbstr[i*4+2] = mapdb[i*4+2]; pbstr[i*4+3] = mapdb[i*4+3]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2005; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveCPU * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveCPU(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveCPU(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[1]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*5] = cpudb[i*5]; pbstr[i*5+1] = cpudb[i*5+1]; pbstr[i*5+2] = cpudb[i*5+2]; pbstr[i*5+3] = cpudb[i*5+3]; pbstr[i*5+4] = cpudb[i*5+4]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2006; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveMEM * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveMEM(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveMEM(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[2]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*4] = memdb[i*4]; pbstr[i*4+1] = memdb[i*4+1]; pbstr[i*4+2] = memdb[i*4+2]; pbstr[i*4+3] = memdb[i*4+3]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2007; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveFILE * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveFILE(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveFILE(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[3]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*6] = filedb[i*6]; pbstr[i*6+1] = filedb[i*6+1]; pbstr[i*6+2] = filedb[i*6+2]; pbstr[i*6+3] = filedb[i*6+3]; pbstr[i*6+4] = filedb[i*6+4]; pbstr[i*6+5] = filedb[i*6+5]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2008; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveOS * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveOS(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveOS(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[4]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*6] = osdb[i*6]; pbstr[i*6+1] = osdb[i*6+1]; pbstr[i*6+2] = osdb[i*6+2]; pbstr[i*6+3] = osdb[i*6+3]; pbstr[i*6+4] = osdb[i*6+4]; pbstr[i*6+5] = osdb[i*6+5]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2009; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveDEVICE * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveDEVICE(ARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveDEVICE(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[5]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*8] = devicedb[i*8]; pbstr[i*8+1] = devicedb[i*8+1]; pbstr[i*8+2] = devicedb[i*8+2]; pbstr[i*8+3] = devicedb[i*8+3]; pbstr[i*8+4] = devicedb[i*8+4]; pbstr[i*8+5] = devicedb[i*8+5]; pbstr[i*8+6] = devicedb[i*8+6]; pbstr[i*8+7] = devicedb[i*8+7]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2010; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveNETWORK * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveNETWORK(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveNETWORK(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[6]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*8] = networkdb[i*8]; pbstr[i*8+1] = networkdb[i*8+1]; pbstr[i*8+2] = networkdb[i*8+2]; pbstr[i*8+3] = networkdb[i*8+3]; pbstr[i*8+4] = networkdb[i*8+4]; pbstr[i*8+5] = networkdb[i*8+5]; pbstr[i*8+6] = networkdb[i*8+6]; pbstr[i*8+7] = networkdb[i*8+7]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2011; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveSTAT * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveSTAT(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveSTAT(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[7]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*6] = statdb[i*6]; pbstr[i*6+1] = statdb[i*6+1]; pbstr[i*6+2] = statdb[i*6+2]; pbstr[i*6+3] = statdb[i*6+3]; pbstr[i*6+4] = statdb[i*6+4]; pbstr[i*6+5] = statdb[i*6+5]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2012; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveNETSTAT * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveNETSTAT(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveNETSTAT(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[8]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*12] = netstatdb[i*12]; pbstr[i*12+1] = netstatdb[i*12+1]; pbstr[i*12+2] = netstatdb[i*12+2]; pbstr[i*12+3] = netstatdb[i*12+3]; pbstr[i*12+4] = netstatdb[i*12+4]; pbstr[i*12+5] = netstatdb[i*12+5]; pbstr[i*12+6] = netstatdb[i*12+6]; pbstr[i*12+7] = netstatdb[i*12+7]; pbstr[i*12+8] = netstatdb[i*12+8]; pbstr[i*12+9] = netstatdb[i*12+9]; pbstr[i*12+10] = netstatdb[i*12+10]; pbstr[i*12+11] = netstatdb[i*12+11]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2013; ErrorProc(&eventinfo); return eventinfo.EventID; } //**************************************************** //*CINV_s_sObj::ReceiveCONDEV * //*Function: * //* receive search result * //*Call format: * //*CINV_s_sObj::ReceiveCONDEV(VARIANT FAR *oarray) * //* oarray : search result * //*Output: * //* search result * //*Procedure called: * //* INV CSCI: receive search result * //**************************************************** STDMETHODIMP CInventoryObj::ReceiveCONDEV(VARIANT FAR *oarray) { BSTR HUGEP *pbstr; SAFEARRAY FAR* psa = NULL; HRESULT hr; int i,count; psa = V_ARRAY(oarray); // Get a pointer to the elements of the array. hr=SafeArrayAccessData(psa, (void HUGEP* FAR*)&pbstr); if (FAILED(hr)) goto error; count=RecordNum[9]; for (i=0;i<count;i++) //put the data to variant { pbstr[i*9]=condevdb[i*9]; pbstr[i*9+1]=condevdb[i*9+1]; pbstr[i*9+2]=condevdb[i*9+2]; pbstr[i*9+3]=condevdb[i*9+3]; pbstr[i*9+4]=condevdb[i*9+4]; pbstr[i*9+5]=condevdb[i*9+5]; pbstr[i*9+6]=condevdb[i*9+6]; pbstr[i*9+7]=condevdb[i*9+7]; pbstr[i*9+8]=condevdb[i*9+8]; } hr=SafeArrayUnaccessData(psa); if (FAILED(hr)) goto error; return S_OK; error: eventinfo.flag = 1; eventinfo.EventID = 2014; ErrorProc(&eventinfo); return eventinfo.EventID; } //*************************************************************** //ModifyMap // Modify the map link //parameters // <in> result pointer of MAPdb // <in> thenum no useful //return // S_OK //comments // Call this function after call Put_MAPInfo(). // If the endsystem isn't in the map link, add this endsystem // to map link. //**************************************************************** STDMETHODIMP CInventoryObj::ModifyMap(MAPdb *result, int thenum) { if(MAPL->SearchNode (result->ID) == NULL) { MAPL->AddNode (result); } return S_OK; } /******************************************************** *check: * * check the caller's permission * *para. * * UserName caller's username * * permission 1 caller has the access. * * 0 caller hasn't the access. * * -1 errors occurred. * *********************************************************/ extern int CheckAccess(long service_id, BSTR user_name); STDMETHODIMP CInventoryObj::Check(BSTR UserName, int *permission) { *permission=CheckAccess(INV_S_ID,UserName); //call the event-service method to report events occurred. switch(*permission) { case 1: break; case 0: eventinfo.flag=1; eventinfo.EventID=800; ErrorProc(&eventinfo); return eventinfo.EventID; case -1: eventinfo.flag=1; eventinfo.EventID=506; ErrorProc(&eventinfo); return eventinfo.EventID; default: break; } return S_OK; } //************************************************************** //QueryFromNet // Finish the Query from NetService //parameters // <in> IPAdress BSTR of ipaddress // <in,out> HostName pointer of a BSTR of hostname // <in,out> OSType pointer of a BSTR of ostype //return // If succeed,return S_OK;or return error code //comments // Query hostname and ostype from db basis on corresponding ipaddress // that provided by Netservice. //************************************************************** STDMETHODIMP CInventoryObj::QueryFromNet(BSTR IPAddress, BSTR *HostName, BSTR *OSType) { char IpAddr[IP_LEN], Host[STR128], OS[STR32]; char sql_str[MAX_BUFFER]; long ID; HRESULT hRes; hRes = Connect_To_DB(); if(hRes!=DB_SUCCEED) return 501; WideCharToMultiByte(CP_ACP, 0, IPAddress, -1, IpAddr, 16, NULL, NULL); Transform_IP(IpAddr); int rec_number = 0; int start = 0; int offset=0; db_table in_table; tab_record records; tables_union *ret_records; in_table.db_operation = SELECT; in_table.encrypt_id = 0; //query map table basis on ipaddr, get endsystemid and hostname in_table.db_table_id = DB_INV | TABLE_INV_MAP; in_table.encrypt_id=SetMask(1,0,0,0); sprintf((char *)sql_str, "Select * from INV_MAPTAB where IpAddress=\"%s\"", IpAddr); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); ret_records = (tables_union *)records.records_buf; if((rec_number>0) && (ret_records->table_inv_map.map_available_flag!=0)) { ID = ret_records->table_inv_map.endsystem_id; DesStrDe((unsigned char *)ret_records->table_inv_map.map_hostname, (unsigned char *)Host, (unsigned char *)pKey); //query os table basis on endsystemid, get ostype start = 0; offset = 0; rec_number = 0; in_table.db_table_id = DB_INV | TABLE_INV_OS; sprintf((char *)sql_str, "Select * from INV_OSTAB where EndSystemID=%d", ID); DesStrEn((unsigned char *)sql_str, (unsigned char *)in_table.sql_statement, (unsigned char *)pKey); hRes = m_pIobject_mm->av_dbsql(&in_table,&records,&rec_number,&offset,start); ret_records = (tables_union *)records.records_buf; if(rec_number > 0) { DesStrDe((unsigned char *)ret_records->table_inv_os.os_type, (unsigned char *)OS, (unsigned char *)pKey); } else strcpy((char *)OS, ""); } else { strcpy((char *)Host, ""); strcpy((char *)OS, ""); } //encrypt hostname and ostype, export to Netservice BSTR wHost, wOS, des_HostName, des_OSTpye; wHost =MakeWideStrFromAnsi(Host); wOS = MakeWideStrFromAnsi(OS); des_HostName=SysAllocStringByteLen(NULL, 32*2); des_OSTpye=SysAllocStringByteLen(NULL, 32*2); DesBSTREn(wHost, &des_HostName, (unsigned char *)pKey); DesBSTREn(wOS, &des_OSTpye, (unsigned char *)pKey); *HostName = des_HostName; *OSType = des_OSTpye; SysFreeString(wHost); SysFreeString(wOS); m_pIobject_mm->Release(); return S_OK; } //********************************************************* //SendCryptkey // Send the crypted public key to agent //parameters // <in> inbstr input BSTR(encrypted agent ip) // <in,out> outbstr encrypted public key //return // If succeed, return S_OK;else, return S_FALSE. //comments // Agent must call this interface function to get the public key for // communicating with service. //********************************************************* STDMETHODIMP CInventoryObj::SendCryptKey(BSTR inbstr, BSTR *outbstr) { unsigned int i=0; if(pKey[0]!=0 && pKey[1]!=0 && pKey[2]!=0 && pKey[3]!=0 && pKey[4]!=0 && pKey[5]!=0 && pKey[6]!=0 && pKey[7]!=0) return 2; //return error because the pKey is error. //get local ipaddr, and encrypt it by MD5 char localip[IP_LEN],md5_localip[MD5KLEN]; unsigned int size = IP_LEN; c_GetIpAddr(localip, &size); i = md5hash((unsigned char *)localip,strlen(localip), (unsigned char *)md5_localip); if(i!=0) return S_FALSE; //decrypt, get the agent ipaddr BSTR wagent_ip=BSTRAS; char agentip[IP_LEN]; i = DesBSTRDe(inbstr, &wagent_ip, (unsigned char *)md5_localip); if(i!=0) return S_FALSE; WideCharToMultiByte(CP_ACP, 0, wagent_ip, -1, agentip, IP_LEN, NULL, NULL); //encrypt the agent ipaddr by MD5 char md5_agentip[MD5KLEN]; i = md5hash((unsigned char *)agentip, strlen(agentip), (unsigned char *)md5_agentip); if(i!=0) return S_FALSE; //encrypt public key BSTR wPublicKey=BSTRAS, des_PublicKey=BSTRAS; wPublicKey=MakeWideStrFromAnsi((char *)pKey); i = DesBSTREn(wPublicKey, &des_PublicKey, (unsigned char *)md5_agentip); if(i!=0) return S_FALSE; *outbstr = des_PublicKey; //export encrypted public key return S_OK; }