void FromAppRule( Kxe_AppRule_Param& ruleParam, KAppRule& rule ) { FromGUID( &(ruleParam.id), &(rule.m_id) ); ruleParam.nRuleType = (int)( rule.GetType() ); ruleParam.strExePath = rule.GetExePath(); FromMd5( &(ruleParam.checkSum), rule.m_checkSum ); ruleParam.ftLast = *(rule.GetLastFileTime()); ruleParam.ftLastTrustRep = *(rule.GetLastTrustRepTime()); ruleParam.strCreator = rule.GetCreator(); ruleParam.ftCreate = *(rule.GetCreateDate()); ruleParam.strReason = rule.GetCreateReason(); ruleParam.ftLastModify = *(rule.GetLastModifyDate()); ruleParam.m_strModifyer = rule.GetLastModifyer(); ruleParam.tcpRemoteDenyRange = rule.m_tcpRemoteDenyRange; ruleParam.tcpLocalDenyRange = rule.m_tcpLocalDenyRange; ruleParam.udpRemoteDenyRange = rule.m_udpRemoteDenyRange; ruleParam.udpLocalDenyRange = rule.m_udpLocalDenyRange; ruleParam.nUserMode = rule.m_userMode; ruleParam.nTrustMode = rule.m_trustMode; ruleParam.lPathhashCode = rule.m_pathhashCode; ruleParam.pExternData = (DWORD)(rule.m_pExternData); }
inline HRESULT KAppFile::ReadRule(KRecord* pRecord) { HRESULT hr = S_OK; ASSERT(pRecord->GetType() == AppRule_Rule); KAppRule* pRule = m_pAppMgr->CreateRule(); KRecord rule = pRecord->FirstSubRecord(); while (pRecord->IsSubRecord(rule)) { if (!rule.Ok()) { hr = E_APP_FILE_UNKNOWN_FMT; break; } switch (rule.GetType()) { case AppRule_RuleID: { ASSERT(rule.GetDataSize() == sizeof(GUID)); pRule->SetID(*(GUID*)rule.GetData()); } break; case AppRule_ExePath: { pRule->SetExePath( (LPWSTR)rule.GetData() ); kis::KPath path(pRule->GetExePath()); if (!path.Exists()) { hr = E_FAIL; goto EXIT0; //break; } if (m_pAppMgr->FindRule(pRule->GetExePath()) != NULL) { hr = E_FAIL; goto EXIT0; } } break; case AppRule_UserMode: { ASSERT(rule.GetDataSize() == sizeof(INT)); pRule->SetUserMode(*(INT*)rule.GetData()); } break; case AppRule_TrustMode: { ASSERT(rule.GetDataSize() == sizeof(INT)); pRule->SetTrustMode(*(INT*)rule.GetData()); } break; case AppRule_CheckSum: { ASSERT(rule.GetDataSize() == sizeof(pRule->m_checkSum)); memcpy(pRule->m_checkSum, rule.GetData(), sizeof(pRule->m_checkSum)); } break; case AppRule_LastFileTime: { ASSERT(rule.GetDataSize() == sizeof(FILETIME)); pRule->SetLastFileTime( *(FILETIME*)rule.GetData() ); } break; case AppRule_Creator: { pRule->SetCreator( (LPWSTR)rule.GetData() ); } break; case AppRule_CreateDate: { ASSERT(rule.GetDataSize() == sizeof(FILETIME)); pRule->SetCreateDate( *(FILETIME*)rule.GetData() ); } break; case AppRule_CreateReason: { pRule->SetCreateReason( (LPWSTR)rule.GetData() ); } break; case AppRule_LastModifyDate: { ASSERT(rule.GetDataSize() == sizeof(FILETIME)); pRule->SetLastModifyDate( *(FILETIME*)rule.GetData() ); } break; case AppRule_LastModifyer: { pRule->SetLastModifyer( (LPWSTR)rule.GetData() ); } break; case AppRule_DenyPortList: { hr = ReadDenyPortList( &rule , pRule); if (FAILED(hr)) break; } break; } rule = rule.NextRecord(); } EXIT0: if (SUCCEEDED(hr)) { if (SUCCEEDED(m_pAppMgr->AddRule(pRule))) return hr; } delete pRule; return hr; }