| 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 "installer-lib.h" | 8 #include "installer-lib.h" |
| 9 #include "handle.h" | 9 #include "handle.h" |
| 10 | 10 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 for ( unsigned int j = 0 ; j < n_file_names ; ++ j ) | 85 for ( unsigned int j = 0 ; j < n_file_names ; ++ j ) |
| 86 { | 86 { |
| 87 insert( wstring_ci( file_name_list[ j ] ) ) ; | 87 insert( wstring_ci( file_name_list[ j ] ) ) ; |
| 88 } | 88 } |
| 89 } | 89 } |
| 90 } ; | 90 } ; |
| 91 | 91 |
| 92 //------------------------------------------------------- | 92 //------------------------------------------------------- |
| 93 //------------------------------------------------------- | 93 //------------------------------------------------------- |
| 94 /** | 94 /** |
| 95 * Filter by process name. Comparison is case-insensitive. With ABP module loade
d | 95 * Filter by process name. Comparison is case-insensitive. Windows Store app pro
cesses excluded |
| 96 */ | 96 */ |
| 97 class process_by_any_exe_with_any_module | 97 class process_by_any_exe_not_immersive |
| 98 : public std::binary_function< PROCESSENTRY32W, file_name_set, bool > | 98 : public std::unary_function<PROCESSENTRY32W, bool> |
| 99 { | 99 { |
| 100 /** | 100 /** |
| 101 * Set of file names from which to match candidate process names. | 101 * Set of file names from which to match candidate process names. |
| 102 * | 102 * |
| 103 * This is a reference to, not a copy of, the set. | 103 * This is a reference to, not a copy of, the set. |
| 104 * The lifetime of this object must be subordinate to that of its referent. | 104 * The lifetime of this object must be subordinate to that of its referent. |
| 105 * The set used to instantiate this class is a member of Process_Closer, | 105 * The set used to instantiate this class is a member of Process_Closer, |
| 106 * and so also is this class. | 106 * and so also is this class. |
| 107 * Hence the lifetimes are coterminous, and the reference is not problematic. | 107 * Hence the lifetimes are coterminous, and the reference is not problematic. |
| 108 */ | 108 */ |
| 109 const file_name_set & processNames ; | 109 const file_name_set & processNames; |
| 110 const file_name_set & moduleNames; | |
| 111 public: | 110 public: |
| 112 bool operator()( const PROCESSENTRY32W & ) ; | 111 bool operator()( const PROCESSENTRY32W & ); |
| 113 process_by_any_exe_with_any_module( const file_name_set & names, const file_na
me_set & moduleNames ) | 112 process_by_any_exe_not_immersive(const file_name_set & names) : processNames(
names ) {} |
| 114 : processNames( names ), moduleNames( moduleNames ) | |
| 115 {} | |
| 116 } ; | 113 } ; |
| 117 | 114 |
| 118 | 115 |
| 119 //------------------------------------------------------- | 116 //------------------------------------------------------- |
| 120 // Process utility functions. | 117 // Process utility functions. |
| 121 //------------------------------------------------------- | 118 //------------------------------------------------------- |
| 122 /** | 119 /** |
| 123 * A promiscuous filter admits everything. | 120 * A promiscuous filter admits everything. |
| 124 */ | 121 */ |
| 125 struct every_process | 122 struct every_process |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 601 std::set< DWORD > pid_set ; | 598 std::set< DWORD > pid_set ; |
| 602 | 599 |
| 603 /** | 600 /** |
| 604 * Set of executable names by which to filter. | 601 * Set of executable names by which to filter. |
| 605 * | 602 * |
| 606 * The argument of the filter constructor is a set by reference. | 603 * The argument of the filter constructor is a set by reference. |
| 607 * Since it does not make a copy for itself, we define it as a class member to
provide its allocation. | 604 * Since it does not make a copy for itself, we define it as a class member to
provide its allocation. |
| 608 */ | 605 */ |
| 609 file_name_set process_names ; | 606 file_name_set process_names ; |
| 610 | 607 |
| 611 /** | 608 process_by_any_exe_not_immersive filter ; |
| 612 * Set of module (DLL) names by which to filter. | |
| 613 */ | |
| 614 file_name_set module_names ; | |
| 615 | |
| 616 process_by_any_exe_with_any_module filter ; | |
| 617 | 609 |
| 618 /** | 610 /** |
| 619 * Copy function object copies just the process ID. | 611 * Copy function object copies just the process ID. |
| 620 */ | 612 */ |
| 621 copy_PID copy ; | 613 copy_PID copy ; |
| 622 | 614 |
| 623 /** | 615 /** |
| 624 * Snapshot of running processes. | 616 * Snapshot of running processes. |
| 625 */ | 617 */ |
| 626 Process_Snapshot & snapshot ; | 618 Process_Snapshot & snapshot ; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 657 if ( ! b ) | 649 if ( ! b ) |
| 658 { | 650 { |
| 659 // Assert the process that created the window is not in our pid_set | 651 // Assert the process that created the window is not in our pid_set |
| 660 return true ; | 652 return true ; |
| 661 } | 653 } |
| 662 return f( window ) ; | 654 return f( window ) ; |
| 663 } | 655 } |
| 664 } ; | 656 } ; |
| 665 | 657 |
| 666 public: | 658 public: |
| 667 template <size_t n_file_names, size_t n_module_names> | 659 template <size_t n_file_names> |
| 668 Process_Closer(Process_Snapshot & snapshot, const wchar_t* (&file_name_list)[n
_file_names], const wchar_t* (&module_name_list)[n_module_names]) | 660 Process_Closer(Process_Snapshot & snapshot, const wchar_t * (&file_name_list)[
n_file_names]) |
| 669 : snapshot(snapshot), process_names(file_name_list), module_names(module_nam
e_list), filter(process_names, module_names) | 661 : snapshot(snapshot), process_names(file_name_list), filter(process_names) |
| 670 { | 662 { |
| 671 update() ; | 663 update() ; |
| 672 } | 664 } |
| 673 template <size_t n_file_names> | |
| 674 Process_Closer(Process_Snapshot & snapshot, const wchar_t * (&file_name_list)[
n_file_names]) | |
| 675 : snapshot(snapshot), process_names(file_name_list), module_names(), filter(
process_names, module_names) | |
| 676 { | |
| 677 update() ; | |
| 678 } | |
| 679 | 665 |
| 680 /** | 666 /** |
| 681 * Refresh our state to match the snapshot state. | 667 * Refresh our state to match the snapshot state. |
| 682 */ | 668 */ |
| 683 void refresh() | 669 void refresh() |
| 684 { | 670 { |
| 685 pid_set.clear() ; | 671 pid_set.clear() ; |
| 686 update() ; | 672 update() ; |
| 687 } | 673 } |
| 688 | 674 |
| 689 bool is_running() { return ! pid_set.empty() ; } ; | 675 bool is_running() { return ! pid_set.empty() ; } ; |
| 690 | 676 |
| 691 bool contains( DWORD pid ) const { return pid_set.find( pid ) != pid_set.end()
; } ; | 677 bool contains( DWORD pid ) const { return pid_set.find( pid ) != pid_set.end()
; } ; |
| 692 | 678 |
| 693 template< class F > | 679 template< class F > |
| 694 bool iterate_our_windows( F f ) | 680 bool iterate_our_windows( F f ) |
| 695 { | 681 { |
| 696 only_our_processes< F > g( * this, f ) ; | 682 only_our_processes< F > g( * this, f ) ; |
| 697 return enumerate_windows( g ) ; | 683 return enumerate_windows( g ) ; |
| 698 } | 684 } |
| 699 | 685 |
| 700 /* | 686 /* |
| 701 * Shut down every process in the pid_set. | 687 * Shut down every process in the pid_set. |
| 702 */ | 688 */ |
| 703 bool shut_down() ; | 689 bool shut_down() ; |
| 704 | 690 |
| 705 } ; | 691 } ; |
| 706 | 692 |
| 707 #endif | 693 #endif |
| OLD | NEW |