| OLD | NEW |
| 1 #include <stdexcept> | 1 #include <stdexcept> |
| 2 #include <functional> | 2 #include <functional> |
| 3 #include <wctype.h> | 3 #include <wctype.h> |
| 4 // <thread> is C++11, but implemented in VS2012 | 4 // <thread> is C++11, but implemented in VS2012 |
| 5 #include <thread> | 5 #include <thread> |
| 6 | 6 |
| 7 #include "installer-lib.h" | 7 #include "installer-lib.h" |
| 8 #include "process.h" | 8 #include "process.h" |
| 9 #include "handle.h" | 9 #include "handle.h" |
| 10 #include "session.h" | 10 #include "session.h" |
| 11 | 11 |
| 12 //------------------------------------------------------- | 12 //------------------------------------------------------- |
| 13 //------------------------------------------------------- | 13 //------------------------------------------------------- |
| 14 typedef int (__stdcall *IsImmersiveDynamicFunc)(HANDLE); | 14 typedef int (__stdcall *IsImmersiveDynamicFunc)(HANDLE); |
| 15 bool process_by_any_exe_not_immersive::operator()( const PROCESSENTRY32W & proce
ss ) | 15 bool process_by_any_exe_not_immersive::operator()( const PROCESSENTRY32W & proce
ss ) |
| 16 { | 16 { |
| 17 if (processNames.find(process.szExeFile) != processNames.end()) | 17 // If the name is not found in our list, it's filtered out |
| 18 { | 18 if (processNames.find(process.szExeFile) == processNames.end()) return false; |
| 19 // Make sure the process is still alive | |
| 20 HANDLE tmpHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, process.th3
2ProcessID); | |
| 21 if (tmpHandle == NULL) | |
| 22 return false; | |
| 23 Windows_Handle procHandle(tmpHandle); | |
| 24 | 19 |
| 25 DWORD exitCode; | 20 // Make sure the process is still alive |
| 26 if (!GetExitCodeProcess(procHandle, &exitCode)) return false; | 21 HANDLE tmpHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, process.th32P
rocessID); |
| 22 if (tmpHandle == NULL) return false; |
| 23 Windows_Handle procHandle(tmpHandle); |
| 24 DWORD exitCode; |
| 25 if (!GetExitCodeProcess(procHandle, &exitCode)) return false; |
| 26 if (exitCode != STILL_ACTIVE) return false; |
| 27 | 27 |
| 28 if (exitCode != STILL_ACTIVE) return false; | 28 // Check if this is a Windows Store app process (we don't care for IE in Moder
n UI) |
| 29 | 29 HMODULE user32Dll = LoadLibrary(L"user32.dll"); |
| 30 // Check if this is a Windows Store app process (we don't care for IE in Mod
ern UI) | 30 if (!user32Dll) return true; |
| 31 HMODULE tmpModule = LoadLibrary(L"user32.dll"); | 31 IsImmersiveDynamicFunc IsImmersiveDynamicCall = (IsImmersiveDynamicFunc)GetPro
cAddress(user32Dll, "IsImmersiveProcess"); |
| 32 if (tmpModule == NULL) | 32 if (!IsImmersiveDynamicCall) return true; |
| 33 return true; | 33 return !IsImmersiveDynamicCall(procHandle); |
| 34 Windows_Module_Handle user32Dll(tmpModule); | |
| 35 if (!user32Dll) return true; | |
| 36 | |
| 37 IsImmersiveDynamicFunc IsImmersiveDynamicCall = (IsImmersiveDynamicFunc)GetP
rocAddress(user32Dll, "IsImmersiveProcess"); | |
| 38 if (!IsImmersiveDynamicCall) return true; | |
| 39 | |
| 40 BOOL retValue = !IsImmersiveDynamicCall(procHandle); | |
| 41 | |
| 42 return retValue; | |
| 43 } | |
| 44 return false; | |
| 45 } | 34 } |
| 46 | 35 |
| 47 //------------------------------------------------------- | 36 //------------------------------------------------------- |
| 48 // creator_process | 37 // creator_process |
| 49 //------------------------------------------------------- | 38 //------------------------------------------------------- |
| 50 DWORD creator_process( HWND window ) | 39 DWORD creator_process( HWND window ) |
| 51 { | 40 { |
| 52 DWORD pid ; | 41 DWORD pid ; |
| 53 DWORD r = GetWindowThreadProcessId( window, & pid ) ; | 42 DWORD r = GetWindowThreadProcessId( window, & pid ) ; |
| 54 if ( r == 0 ) | 43 if ( r == 0 ) |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 306 if ( ! is_running() ) | 295 if ( ! is_running() ) |
| 307 { | 296 { |
| 308 return true ; | 297 return true ; |
| 309 } | 298 } |
| 310 } | 299 } |
| 311 // Assert is_running() | 300 // Assert is_running() |
| 312 } | 301 } |
| 313 // No control path leaves the for-loop. | 302 // No control path leaves the for-loop. |
| 314 } ; | 303 } ; |
| 315 | 304 |
| OLD | NEW |