| Left: | ||
| Right: |
| LEFT | RIGHT |
|---|---|
| 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" | |
| 10 #include "session.h" | |
| 9 | 11 |
| 10 //------------------------------------------------------- | 12 //------------------------------------------------------- |
| 11 //------------------------------------------------------- | 13 //------------------------------------------------------- |
| 12 typedef int (__stdcall *IsImmersiveDynamicFunc)(HANDLE); | 14 typedef int (__stdcall *IsImmersiveDynamicFunc)(HANDLE); |
| 13 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 ) |
| 14 { | 16 { |
| 15 if (processNames.find(process.szExeFile) != processNames.end()) | 17 if (processNames.find(process.szExeFile) != processNames.end()) |
| 16 { | 18 { |
| 17 // Make sure the process is still alive | 19 // Make sure the process is still alive |
| 18 HANDLE procHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, process.th 32ProcessID); | 20 Windows_Handle procHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pr ocess.th32ProcessID); |
| 19 if ((procHandle == NULL) || (procHandle == INVALID_HANDLE_VALUE)) return fal se; | 21 if ((procHandle == NULL) || (procHandle == INVALID_HANDLE_VALUE)) return fal se; |
| 20 | 22 |
| 21 DWORD exitCode; | 23 DWORD exitCode; |
| 22 if (!GetExitCodeProcess(procHandle, &exitCode)) return false; | 24 if (!GetExitCodeProcess(procHandle, &exitCode)) return false; |
| 23 | 25 |
| 24 if (exitCode != STILL_ACTIVE) return false; | 26 if (exitCode != STILL_ACTIVE) return false; |
| 25 | 27 |
| 26 // Check if this is a Windows Store app process (we don't care for IE in Mod ern UI) | 28 // Check if this is a Windows Store app process (we don't care for IE in Mod ern UI) |
| 27 HINSTANCE user32Dll = LoadLibrary(L"user32.dll"); | 29 Windows_Module_Handle user32Dll(LoadLibrary(L"user32.dll")); |
|
Eric
2014/06/25 15:08:51
What's the reason for a dynamic load of this libra
Oleksandr
2014/06/26 13:25:57
Why make assumptions? From MSDN http://msdn.micros
| |
| 28 if (!user32Dll) return true; | 30 if (!user32Dll) return true; |
| 29 | 31 |
| 30 IsImmersiveDynamicFunc IsImmersiveDynamicCall = (IsImmersiveDynamicFunc)GetP rocAddress(user32Dll, "IsImmersiveProcess"); | 32 IsImmersiveDynamicFunc IsImmersiveDynamicCall = (IsImmersiveDynamicFunc)GetP rocAddress(user32Dll, "IsImmersiveProcess"); |
| 31 if (!IsImmersiveDynamicCall) return true; | 33 if (!IsImmersiveDynamicCall) return true; |
| 32 | 34 |
| 33 BOOL retValue = !IsImmersiveDynamicCall(procHandle); | 35 BOOL retValue = !IsImmersiveDynamicCall(procHandle); |
|
Eric
2014/06/25 15:08:51
IsImmersiveDynamicCall commingles a false result w
Oleksandr
2014/06/26 13:25:57
I agree it wouldn't hurt to log the GetLastError h
| |
| 34 CloseHandle(procHandle); | |
|
Eric
2014/06/25 15:08:51
Resource Leak. CloseHandle() won't be called under
| |
| 35 | 36 |
| 36 return retValue; | 37 return retValue; |
| 37 } | 38 } |
| 38 } | 39 } |
| 39 | 40 |
| 40 //------------------------------------------------------- | 41 //------------------------------------------------------- |
| 41 // creator_process | 42 // creator_process |
| 42 //------------------------------------------------------- | 43 //------------------------------------------------------- |
| 43 DWORD creator_process( HWND window ) | 44 DWORD creator_process( HWND window ) |
| 44 { | 45 { |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 299 if ( ! is_running() ) | 300 if ( ! is_running() ) |
| 300 { | 301 { |
| 301 return true ; | 302 return true ; |
| 302 } | 303 } |
| 303 } | 304 } |
| 304 // Assert is_running() | 305 // Assert is_running() |
| 305 } | 306 } |
| 306 // No control path leaves the for-loop. | 307 // No control path leaves the for-loop. |
| 307 } ; | 308 } ; |
| 308 | 309 |
| LEFT | RIGHT |