You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
311 lines
6.9 KiB
311 lines
6.9 KiB
// stdafx.h : include file for standard system include files,
|
|
// or project specific include files that are used frequently,
|
|
// but are changed infrequently
|
|
|
|
#if !defined(AFX_STDAFX_H__97A939A5_466D_43B0_9150_CFBCC67F024B__INCLUDED_)
|
|
#define AFX_STDAFX_H__97A939A5_466D_43B0_9150_CFBCC67F024B__INCLUDED_
|
|
|
|
#include <nt.h>
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <ntddkbd.h>
|
|
#include <ntddmou.h>
|
|
|
|
#include <windows.h>
|
|
#include <winbase.h>
|
|
#include <winerror.h>
|
|
|
|
#include <ntsecapi.h>
|
|
#include <lmcons.h>
|
|
#include <lm.h>
|
|
|
|
#include <wtsapi32.h>
|
|
#include <winsta.h>
|
|
|
|
#include "license.h"
|
|
#include "tlsapi.h"
|
|
#include "lscsp.h"
|
|
|
|
#include "safsessionresolver.h"
|
|
#include "tsremdsk.h"
|
|
#include "tsstl.h"
|
|
#include "locks.h"
|
|
#include "map.h"
|
|
|
|
#include "myassert.h"
|
|
|
|
#include "icshelpapi.h"
|
|
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#ifndef STRICT
|
|
#define STRICT
|
|
#endif
|
|
|
|
#ifndef _WIN32_WINNT
|
|
#define _WIN32_WINNT 0x0400
|
|
#endif
|
|
#define _ATL_APARTMENT_THREADED
|
|
|
|
#include <atlbase.h>
|
|
//You may derive a class from CComModule and use it if you want to override
|
|
//something, but do not change the name of _Module
|
|
|
|
|
|
#ifndef DBG
|
|
|
|
#define IDLE_SHUTDOWN_PERIOD 10 * 1000 * 60 // 10 min wait
|
|
#define EXPIRE_HELPSESSION_PERIOD 60 * 60 * 1000 // Clean up help session every hrs
|
|
|
|
#else
|
|
|
|
#define IDLE_SHUTDOWN_PERIOD 1000 * 60 * 5 // 1 min. time out
|
|
#define EXPIRE_HELPSESSION_PERIOD 5 * 60 * 1000 // Clean up help session every 5 min.
|
|
|
|
#endif
|
|
|
|
#define SESSMGR_NOCONNECTIONEVENT_NAME L"Global\\RemoteDesktopSessMgr"
|
|
#define SERVICE_STARTUP_WAITHINT 1000*30 // 30 second wait
|
|
#define REGKEY_SYSTEM_EVENTSOURCE L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\System"
|
|
#define MAX_FETCHIPADDRESSRETRY 5
|
|
#define DEFAULT_MAXTICKET_EXPIRY 30 * 24 * 60 * 60 // Default max. ticket valid period
|
|
|
|
|
|
class CServiceModule : public CComModule
|
|
{
|
|
public:
|
|
|
|
static DWORD WINAPI
|
|
HandlerEx(
|
|
DWORD dwControl,
|
|
DWORD dwEventType,
|
|
LPVOID lpEventData,
|
|
LPVOID lpContext
|
|
);
|
|
|
|
HRESULT
|
|
RegisterServer(
|
|
FILE* pSetupLog,
|
|
BOOL bRegTypeLib,
|
|
BOOL bService
|
|
);
|
|
|
|
HRESULT
|
|
UnregisterServer(FILE* pSetupLog);
|
|
|
|
HRESULT
|
|
RemoveEventViewerSource(
|
|
FILE* pSetupLog
|
|
);
|
|
|
|
void
|
|
Init(
|
|
_ATL_OBJMAP_ENTRY* p,
|
|
HINSTANCE h,
|
|
UINT nServiceNameID,
|
|
UINT nServiceDispNameID,
|
|
UINT nServiceDescID,
|
|
const GUID* plibid = NULL
|
|
);
|
|
|
|
void Start();
|
|
void
|
|
ServiceMain(
|
|
DWORD dwArgc,
|
|
LPTSTR* lpszArgv
|
|
);
|
|
|
|
void Handler(DWORD dwOpcode);
|
|
void Run();
|
|
BOOL IsInstalled(FILE* pSetupLog);
|
|
BOOL Install(FILE* pSetupLog);
|
|
BOOL Uninstall(FILE* pSetupLog);
|
|
LONG Unlock();
|
|
BOOL UpdateService(FILE* pSetupLog);
|
|
|
|
void
|
|
LogEventWithStatusCode(
|
|
DWORD dwEventType,
|
|
DWORD dwEventId,
|
|
DWORD dwCode
|
|
);
|
|
|
|
void
|
|
LogSessmgrEventLog(
|
|
DWORD dwEventType,
|
|
DWORD dwEventCode,
|
|
CComBSTR& bstrNoviceDomain,
|
|
CComBSTR& bstrNoviceAccount,
|
|
CComBSTR& bstrRaType,
|
|
CComBSTR& bstrExpertIPFromClient,
|
|
CComBSTR& bstrExpertIPFromTS,
|
|
DWORD dwErrCode
|
|
);
|
|
|
|
void
|
|
SetServiceStatus(DWORD dwState);
|
|
|
|
void
|
|
SetupAsLocalServer();
|
|
|
|
ULONG
|
|
AddRef();
|
|
|
|
ULONG
|
|
Release();
|
|
|
|
CServiceModule() : m_RefCount(0), CComModule() {}
|
|
|
|
DWORD
|
|
GetServiceStartupStatus()
|
|
{
|
|
return HRESULT_FROM_WIN32(m_dwServiceStartupStatus);
|
|
}
|
|
|
|
BOOL
|
|
IsSuccessServiceStartup()
|
|
{
|
|
return ERROR_SUCCESS == m_dwServiceStartupStatus;
|
|
}
|
|
|
|
|
|
BOOL
|
|
InitializeSessmgr();
|
|
|
|
|
|
//Implementation
|
|
private:
|
|
|
|
static HANDLE gm_hIdle;
|
|
static HANDLE gm_hIdleMonitorThread;
|
|
|
|
static void WINAPI _ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv);
|
|
static void WINAPI _Handler(DWORD dwOpcode);
|
|
static unsigned int WINAPI IdleMonitorThread( void* ptr );
|
|
static unsigned int WINAPI GPMonitorThread( void* ptr );
|
|
|
|
// data members
|
|
public:
|
|
|
|
//
|
|
// Refer to CreateService() for 256
|
|
//
|
|
TCHAR m_szServiceDesc[257];
|
|
TCHAR m_szServiceName[257];
|
|
TCHAR m_szServiceDispName[257];
|
|
|
|
SERVICE_STATUS_HANDLE m_hServiceStatus;
|
|
SERVICE_STATUS m_status;
|
|
DWORD dwThreadID;
|
|
BOOL m_bService;
|
|
|
|
CCriticalSection m_ModuleLock; // Global _Module lock
|
|
long m_RefCount;
|
|
BOOL m_Initialized;
|
|
|
|
DWORD m_dwServiceStartupStatus;
|
|
};
|
|
|
|
extern CServiceModule _Module;
|
|
|
|
#include <atlcom.h>
|
|
#include "RAEventMsg.h"
|
|
#include "sessmgr.h"
|
|
#include "helper.h"
|
|
#include "helptab.h"
|
|
#include "helpmgr.h"
|
|
#include "helpsess.h"
|
|
#include "tsremdsk.h"
|
|
#include "rderror.h"
|
|
|
|
#ifndef AllocMemory
|
|
|
|
#define AllocMemory(size) \
|
|
LocalAlloc(LPTR, size)
|
|
|
|
#endif
|
|
|
|
#ifndef FreeMemory
|
|
|
|
#define FreeMemory(ptr) \
|
|
if(ptr) \
|
|
{ \
|
|
LocalFree(ptr); \
|
|
ptr=NULL; \
|
|
}
|
|
|
|
#endif
|
|
|
|
#ifndef ReallocMemory
|
|
|
|
#define ReallocMemory(ptr, size) \
|
|
LocalReAlloc(ptr, size, LMEM_ZEROINIT)
|
|
|
|
#endif
|
|
|
|
#define REGKEYCONTROL_REMDSK REG_CONTROL_REMDSK
|
|
|
|
#define CLASS_PRIVATE
|
|
#define CLASS_PUBLIC
|
|
#define CLASS_STATIC
|
|
|
|
struct __declspec(uuid("A55737AB-5B26-4A21-99B7-6D0C606F515E")) SESSIONRESOLVER;
|
|
#define SESSIONRESOLVERCLSID __uuidof(SESSIONRESOLVER)
|
|
|
|
|
|
#define HELPSESSION_UNSOLICATED _TEXT("UnsolicitedHelp")
|
|
#define HELPSESSION_NORMAL_RA _TEXT("SolicitedHelp")
|
|
|
|
//
|
|
// HYDRA_CERT_REG_KEY
|
|
// HYDRA_X509_CERTIFICATE
|
|
// X509_CERT_PUBLIC_KEY_NAME
|
|
// defined in lscsp.h
|
|
//
|
|
|
|
#define REGKEY_TSX509_CERT _TEXT(HYDRA_CERT_REG_KEY)
|
|
#define REGVALUE_TSX509_CERT _TEXT(HYDRA_X509_CERTIFICATE)
|
|
|
|
#define LSA_TSX509_CERT_PUBLIC_KEY_NAME X509_CERT_PUBLIC_KEY_NAME
|
|
|
|
|
|
//
|
|
// Message for notify session logoff or disconnect,
|
|
// WPARAM : Not use
|
|
// LPARAM : the logoff or disconnecting session.
|
|
//
|
|
#define WM_SESSIONLOGOFFDISCONNECT (WM_APP + 1)
|
|
|
|
//
|
|
// Message for expiring help ticket
|
|
// WPARAM : Not use
|
|
// LPARAM : Not use
|
|
//
|
|
#define WM_EXPIREHELPSESSION (WM_SESSIONLOGOFFDISCONNECT + 1)
|
|
|
|
//
|
|
// Notification message to reload termsrv public key
|
|
// WPARAM : Not use
|
|
// LPARAM : Not use
|
|
//
|
|
#define WM_LOADTSPUBLICKEY (WM_EXPIREHELPSESSION + 1)
|
|
|
|
|
|
//
|
|
// Notification for rdsaddin terminates
|
|
// WPARAM : Not use
|
|
// LPARAM : Pointer to help session (ticket) object.
|
|
//
|
|
#define WM_HELPERRDSADDINEXIT (WM_LOADTSPUBLICKEY + 1)
|
|
|
|
#define HELPACCOUNTPROPERLYSETUP \
|
|
_TEXT("L$20ed87e2-3b82-4114-81f9-5e219ed4c481-SALEMHELPACCOUNT")
|
|
|
|
|
|
//{{AFX_INSERT_LOCATION}}
|
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
|
|
|
#endif // !defined(AFX_STDAFX_H__97A939A5_466D_43B0_9150_CFBCC67F024B__INCLUDED)
|