Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML #if (_WIN32_WINNT > 0x0500 ) case SERVICE_CONTROL_SESSIONCHANGE: if (dwEventType == WTS_SESSION_LOGON) { system_logger_t::instance()->trace_info(L "service accept SESSION LOGON signal" ); if (!run_gui()) system_logger_t::instance()->trace_info(L "[ERROR] creating GUI window for service failed" ); } break ; #endif
Copy Source | Copy HTML
- / * <br/> * /
- bool service_t :: run_gui ()
- {
- HANDLE l_hToken = NULL;
- STARTUPINFOW l_startInfo;
- PROCESS_INFORMATION l_processInfo;
- ULONG l_SID = - 1 ;
- memset (& l_startInfo, 0x00 , sizeof (STARTUPINFOW));
- memset (& l_processInfo, 0x00 , sizeof (PROCESS_INFORMATION));
- l_startInfo.cb = sizeof (STARTUPINFOW);
- l_SID = static_cast < ULONG > (WTSGetActiveConsoleSessionId ());
- if (l_SID! = - 1 )
- {
- if (WTSQueryUserToken (l_SID, & l_hToken)! = FALSE)
- {
- std :: wstringstream l_wss;
- l_wss << get_path () << get_name ();
- if (CreateProcessAsUserW (
- l_hToken
- l_wss.str (). c_str (),
- L "/ gui" ,
- Null
- Null
- FALSE,
- CREATE_DEFAULT_ERROR_MODE,
- Null
- Null
- & l_startInfo,
- & l_processInfo)! = FALSE)
- {
- system_logger_t :: instance () -> trace_info (
- L "creating GUI window for service succeeded"
- );
- return true ;
- }
- }
- }
- return false ;
- }
- // ------------------------------------------------ ---------------------------
Source: https://habr.com/ru/post/91497/
All Articles