QueryData genProcesses(QueryContext& context) { QueryData results; auto pidlist = getProcList(context); for (const auto& pid : pidlist) { genProcess(pid, results); } return results; }
QueryData genProcesses(QueryContext& context) { QueryData results; std::string query = "SELECT * FROM Win32_Process"; std::set<long> pidlist; if (context.constraints.count("pid") > 0 && context.constraints.at("pid").exists(EQUALS)) { for (const auto& pid : context.constraints.at("pid").getAll<int>(EQUALS)) { if (pid > 0) { pidlist.insert(pid); } } // None of the constraints returned valid pids, bail out early if (pidlist.empty()) { return results; } } if (pidlist.size() > 0) { std::vector<std::string> constraints; for (const auto& pid : pidlist) { constraints.push_back("ProcessId=" + std::to_string(pid)); } if (constraints.size() > 0) { query += " WHERE " + boost::algorithm::join(constraints, " OR "); } } WmiRequest request(query); if (request.getStatus().ok()) { for (const auto& item : request.results()) { long pid = 0; if (item.GetLong("ProcessId", pid).ok()) { genProcess(item, results); } } } return results; }