MCPcopy Create free account
hub / github.com/GameTechDev/PresentMon / GetProcessInformation

Function GetProcessInformation

IntelPresentMon/SampleClient/Utils.h:67–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

65}
66
67void GetProcessInformation(std::optional<std::string>& processName, std::optional<unsigned int>& processId) {
68
69 try
70 {
71 // Explicitly set nullopt in optional values
72 processId = std::nullopt;
73 processName = std::nullopt;
74
75 auto& opt = clio::Options::Get();
76 if (bool(opt.processName) ^ bool(opt.processId)) {
77 HANDLE processes_snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
78 if (processes_snapshot == INVALID_HANDLE_VALUE) {
79 processId = std::nullopt;
80 processName = std::nullopt;
81 return;
82 }
83
84 PROCESSENTRY32 process_info;
85 process_info.dwSize = sizeof(process_info);
86
87 if (!Process32First(processes_snapshot, &process_info)) {
88 // Unable to retrieve the first process
89 CloseHandle(processes_snapshot);
90 processId = std::nullopt;
91 processName = std::nullopt;
92 return;
93 }
94
95 do {
96 if ((bool(opt.processName) && CaseInsensitiveCompare(process_info.szExeFile, *opt.processName)) ||
97 (bool(opt.processId) && process_info.th32ProcessID == *opt.processId)) {
98 CloseHandle(processes_snapshot);
99 processId = process_info.th32ProcessID;
100 processName = process_info.szExeFile;
101 return;
102 }
103 } while (Process32Next(processes_snapshot, &process_info));
104
105 CloseHandle(processes_snapshot);
106 }
107 }
108 catch (const std::exception& e) {
109 std::cout << "Error: " << e.what() << std::endl;
110 return;
111 }
112 catch (...) {
113 std::cout << "Unknown Error" << std::endl;
114 return;
115 }
116}

Callers 3

DynamicQuerySampleFunction · 0.70
FrameQuerySampleFunction · 0.70
WrapperStaticQuerySampleFunction · 0.70

Calls 2

whatMethod · 0.80
CaseInsensitiveCompareFunction · 0.70

Tested by

no test coverage detected