| 90 | } |
| 91 | |
| 92 | CString CProcessModuleTable::CharacteristicsToString(WinSys::DllCharacteristics ch) { |
| 93 | using namespace WinSys; |
| 94 | |
| 95 | CString result; |
| 96 | if ((ch & DllCharacteristics::HighEntropyVA) != DllCharacteristics::None) |
| 97 | result += L"High Entropy VA, "; |
| 98 | if ((ch & DllCharacteristics::DynamicBase) != DllCharacteristics::None) |
| 99 | result += L"Dynamic Base, "; |
| 100 | if ((ch & DllCharacteristics::ForceIntegrity) != DllCharacteristics::None) |
| 101 | result += L"Force Integrity, "; |
| 102 | if ((ch & DllCharacteristics::NxCompat) != DllCharacteristics::None) |
| 103 | result += L"NX Compat, "; |
| 104 | if ((ch & DllCharacteristics::NoIsolation) != DllCharacteristics::None) |
| 105 | result += L"No Isolation, "; |
| 106 | if ((ch & DllCharacteristics::NoSEH) != DllCharacteristics::None) |
| 107 | result += L"No SEH, "; |
| 108 | if ((ch & DllCharacteristics::NoBind) != DllCharacteristics::None) |
| 109 | result += L"No Bind, "; |
| 110 | if ((ch & DllCharacteristics::AppContainer) != DllCharacteristics::None) |
| 111 | result += L"App Container, "; |
| 112 | if ((ch & DllCharacteristics::WDMDriver) != DllCharacteristics::None) |
| 113 | result += L"WDM Driver, "; |
| 114 | if ((ch & DllCharacteristics::ControlFlowGuard) != DllCharacteristics::None) |
| 115 | result += L"CFG, "; |
| 116 | if ((ch & DllCharacteristics::TerminalServerAware) != DllCharacteristics::None) |
| 117 | result += L"TS Aware, "; |
| 118 | |
| 119 | if (!result.IsEmpty()) |
| 120 | result = result.Left(result.GetLength() - 2); |
| 121 | return result; |
| 122 | } |
| 123 | |
| 124 | int CProcessModuleTable::ParseTableEntry(CString& s, char& mask, int& select, std::shared_ptr<WinSys::ModuleInfo>& info, int column) { |
| 125 | switch (static_cast<ModuleColumn>(column)) { |