Left: | ||
Right: |
OLD | NEW |
---|---|
1 /** | 1 /** |
2 * \file process.h | 2 * \file process.h |
3 */ | 3 */ |
4 | 4 |
5 #ifndef PROCESS_H | 5 #ifndef PROCESS_H |
6 #define PROCESS_H | 6 #define PROCESS_H |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 #include <set> | 9 #include <set> |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
114 insert( exe_name( exe_name_list[ j ] ) ) ; | 114 insert( exe_name( exe_name_list[ j ] ) ) ; |
115 } | 115 } |
116 } | 116 } |
117 } ; | 117 } ; |
118 | 118 |
119 //------------------------------------------------------- | 119 //------------------------------------------------------- |
120 //------------------------------------------------------- | 120 //------------------------------------------------------- |
121 /** | 121 /** |
122 * Filter by process name. Comparison is case-insensitive. | 122 * Filter by process name. Comparison is case-insensitive. |
123 */ | 123 */ |
124 class process_by_any_exe_name_CI | 124 class process_by_any_exe_name_CI |
Eric
2014/03/27 16:56:51
Since this filter isn't being used any more, it ca
Wladimir Palant
2014/03/28 07:34:55
I strongly prefer to remove any unused code that's
| |
125 : public std::unary_function< PROCESSENTRY32W, bool > | 125 : public std::unary_function< PROCESSENTRY32W, bool > |
126 { | 126 { |
127 const exe_name_set & names ; | 127 const exe_name_set & names ; |
128 public: | 128 public: |
129 bool operator()( const PROCESSENTRY32W & ) ; | 129 bool operator()( const PROCESSENTRY32W & ) ; |
130 process_by_any_exe_name_CI( const exe_name_set & names ) | 130 process_by_any_exe_name_CI( const exe_name_set & names ) |
131 : names( names ) | 131 : names( names ) |
132 {} | 132 {} |
133 } ; | 133 } ; |
134 | 134 |
135 //------------------------------------------------------- | 135 //------------------------------------------------------- |
136 //------------------------------------------------------- | |
137 /** | |
138 * Filter by process name. Comparison is case-insensitive. With ABP module loade d | |
139 */ | |
140 class process_by_any_exe_name_CI_w_ABP | |
Eric
2014/03/27 16:52:44
This is not ABP-specific until after we pass it AB
| |
141 : public std::binary_function< PROCESSENTRY32W, exe_name_set, bool > | |
142 { | |
143 const exe_name_set & names ; | |
Eric
2014/03/27 16:52:44
This should be renamed to process_names (or the li
| |
144 const exe_name_set & moduleNames; | |
145 public: | |
146 bool operator()( const PROCESSENTRY32W & ) ; | |
147 process_by_any_exe_name_CI_w_ABP( const exe_name_set & names, const exe_name_s et & moduleNames ) | |
148 : names( names ), moduleNames( moduleNames ) | |
149 {} | |
150 } ; | |
151 | |
152 | |
153 //------------------------------------------------------- | |
136 // Process utility functions. | 154 // Process utility functions. |
137 //------------------------------------------------------- | 155 //------------------------------------------------------- |
138 /** | 156 /** |
139 * A promiscuous filter admits everything. | 157 * A promiscuous filter admits everything. |
140 */ | 158 */ |
141 struct every_process | 159 struct every_process |
142 : public std::unary_function< PROCESSENTRY32W, bool > | 160 : public std::unary_function< PROCESSENTRY32W, bool > |
143 { | 161 { |
144 bool operator()( const PROCESSENTRY32W & ) { return true ; } ; | 162 bool operator()( const PROCESSENTRY32W & ) { return true ; } ; |
145 } ; | 163 } ; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
275 * Return a pointer to the next process in the snapshot. | 293 * Return a pointer to the next process in the snapshot. |
276 * begin() must have been called first. | 294 * begin() must have been called first. |
277 */ | 295 */ |
278 PROCESSENTRY32W * next() ; | 296 PROCESSENTRY32W * next() ; |
279 | 297 |
280 /** | 298 /** |
281 * Type definition for pointer to underlying structure. | 299 * Type definition for pointer to underlying structure. |
282 */ | 300 */ |
283 typedef PROCESSENTRY32W * Pointer ; | 301 typedef PROCESSENTRY32W * Pointer ; |
284 } ; | 302 } ; |
285 | 303 |
Eric
2014/03/27 16:52:44
We need some documentation here about CreateToolhe
| |
304 class ModulesSnapshot | |
305 { | |
306 /** | |
307 * Handle to the process snapshot. | |
308 */ | |
309 Windows_Handle handle ; | |
310 | |
311 /** | |
312 * Buffer for reading a single module entry out of the snapshot. | |
313 */ | |
314 MODULEENTRY32W module; | |
315 | |
316 /** | |
317 * process ID of the process to retrieve modules for. | |
318 */ | |
319 DWORD processId; | |
Eric
2014/03/27 16:52:44
Only needed for refresh(), which we don't need.
| |
320 | |
321 /** | |
322 * Copy constructor declared private and not defined. | |
323 * | |
324 * \par Implementation | |
325 * Add "= delete" for C++11. | |
326 */ | |
327 ModulesSnapshot( const ModulesSnapshot & ) ; | |
328 | |
329 /** | |
330 * Copy assignment declared private and not defined. | |
331 * | |
332 * \par Implementation | |
333 * Add "= delete" for C++11. | |
334 */ | |
335 ModulesSnapshot operator=( const ModulesSnapshot & ) ; | |
336 | |
337 | |
338 public: | |
339 /** | |
340 * Default constructor takes the snapshot. | |
341 */ | |
342 ModulesSnapshot(DWORD processId) ; | |
343 | |
344 /** | |
345 * Reconstruct the current instance with a new system snapshot. | |
346 */ | |
347 void refresh(DWORD processId) ; | |
Eric
2014/03/27 16:52:44
The way this is being used, I don't believe we nee
| |
348 | |
349 /** | |
350 * Return a pointer to the first process in the snapshot. | |
351 */ | |
352 MODULEENTRY32W * begin() ; | |
353 | |
354 /** | |
355 * The end pointer is an alias for the null pointer. | |
356 */ | |
357 inline MODULEENTRY32W * end() const { return 0 ; } | |
358 | |
359 /** | |
360 * Return a pointer to the next process in the snapshot. | |
361 * begin() must have been called first. | |
362 */ | |
363 MODULEENTRY32W * next() ; | |
364 | |
365 /** | |
366 * Type definition for pointer to underlying structure. | |
367 */ | |
368 typedef MODULEENTRY32W * Pointer ; | |
369 } ; | |
370 | |
371 | |
286 //------------------------------------------------------- | 372 //------------------------------------------------------- |
287 // initialize_process_list | 373 // initialize_process_list |
288 //------------------------------------------------------- | 374 //------------------------------------------------------- |
289 /** | 375 /** |
290 * \tparam T The type into which a PROCESSENTRY32W struture is extracted. | 376 * \tparam T The type into which a PROCESSENTRY32W struture is extracted. |
291 * \tparam Admittance Function type for argument 'admit' | 377 * \tparam Admittance Function type for argument 'admit' |
292 * \tparam Extractor Function type for argument 'extract' | 378 * \tparam Extractor Function type for argument 'extract' |
293 * \param admit A unary predicate function class that determines what's included | 379 * \param admit A unary predicate function class that determines what's included |
294 * A process appears in the list only if the predicate returns true. | 380 * A process appears in the list only if the predicate returns true. |
295 * The use of this predicate is analogous to that in std::copy_if. | 381 * The use of this predicate is analogous to that in std::copy_if. |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
459 */ | 545 */ |
460 std::set< DWORD > pid_set ; | 546 std::set< DWORD > pid_set ; |
461 | 547 |
462 /** | 548 /** |
463 * Set of executable names by which to filter. | 549 * Set of executable names by which to filter. |
464 * | 550 * |
465 * The argument of the filter constructor is a set by reference. | 551 * The argument of the filter constructor is a set by reference. |
466 * Since it does not make a copy for itself, we define it as a class member to provide its allocation. | 552 * Since it does not make a copy for itself, we define it as a class member to provide its allocation. |
467 */ | 553 */ |
468 exe_name_set exe_names ; | 554 exe_name_set exe_names ; |
555 exe_name_set module_names ; | |
Eric
2014/03/27 16:52:44
I'd use dll_names. We configure these with .EXE an
Oleksandr
2014/03/27 23:28:46
I actually think module_names is more consistent,
| |
469 | 556 |
470 /** | 557 /** |
471 * Filter function object matches on any of the exe names specified in the con structor. | 558 * Filter function object matches on any of the exe names specified in the con structor. |
472 */ | 559 */ |
473 process_by_any_exe_name_CI filter ; | 560 // process_by_any_exe_name_CI filter ; |
561 | |
562 process_by_any_exe_name_CI_w_ABP filter ; | |
474 | 563 |
475 /** | 564 /** |
476 * Copy function object copies just the process ID. | 565 * Copy function object copies just the process ID. |
477 */ | 566 */ |
478 copy_PID copy ; | 567 copy_PID copy ; |
479 | 568 |
480 /** | 569 /** |
481 * Snapshot of running processes. | 570 * Snapshot of running processes. |
482 */ | 571 */ |
483 Snapshot & snapshot ; | 572 Snapshot & snapshot ; |
(...skipping 30 matching lines...) Expand all Loading... | |
514 if ( ! b ) | 603 if ( ! b ) |
515 { | 604 { |
516 // Assert the process that created the window is not in our pid_set | 605 // Assert the process that created the window is not in our pid_set |
517 return true ; | 606 return true ; |
518 } | 607 } |
519 return f( window ) ; | 608 return f( window ) ; |
520 } | 609 } |
521 } ; | 610 } ; |
522 | 611 |
523 public: | 612 public: |
524 Process_Closer( Snapshot & snapshot, const wchar_t * exe_name_list[], size_t n _exe_names ) | 613 Process_Closer( Snapshot & snapshot, const wchar_t * exe_name_list[], size_t n _exe_names, const wchar_t * module_name_list[], size_t n_module_names ) |
Eric
2014/03/27 16:52:44
Likewise dll_name_list etc. here.
| |
525 : snapshot( snapshot ), exe_names( exe_name_list, n_exe_names ), filter( exe _names ) | 614 : snapshot( snapshot ), exe_names( exe_name_list, n_exe_names ), module_name s(module_name_list, n_module_names), filter( exe_names, module_names ) |
526 { | 615 { |
527 update() ; | 616 update() ; |
528 } | 617 } |
529 | 618 |
530 /** | 619 /** |
531 * Refresh our state to match the snapshot state. | 620 * Refresh our state to match the snapshot state. |
532 */ | 621 */ |
533 void refresh() | 622 void refresh() |
534 { | 623 { |
535 pid_set.clear() ; | 624 pid_set.clear() ; |
(...skipping 12 matching lines...) Expand all Loading... | |
548 } | 637 } |
549 | 638 |
550 /* | 639 /* |
551 * Shut down every process in the pid_set. | 640 * Shut down every process in the pid_set. |
552 */ | 641 */ |
553 bool shut_down() ; | 642 bool shut_down() ; |
554 | 643 |
555 } ; | 644 } ; |
556 | 645 |
557 #endif | 646 #endif |
OLD | NEW |