Initialversion
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#include "ScriptHookPlugin.h"
|
||||
|
||||
#include "Logging.h"
|
||||
#include "RegistryConfig.h"
|
||||
|
||||
ScriptHookPlugin::ScriptHookPlugin() = default;
|
||||
ScriptHookPlugin::~ScriptHookPlugin() = default;
|
||||
|
||||
HRESULT STDMETHODCALLTYPE ScriptHookPlugin::QueryInterface(REFIID riid, void** ppvObject)
|
||||
{
|
||||
if (ppvObject == nullptr)
|
||||
{
|
||||
return E_POINTER;
|
||||
}
|
||||
|
||||
*ppvObject = nullptr;
|
||||
if (riid == __uuidof(IUnknown) || riid == __uuidof(IWTSPlugin))
|
||||
{
|
||||
*ppvObject = static_cast<IWTSPlugin*>(this);
|
||||
AddRef();
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
ULONG STDMETHODCALLTYPE ScriptHookPlugin::AddRef()
|
||||
{
|
||||
return static_cast<ULONG>(InterlockedIncrement(&refCount_));
|
||||
}
|
||||
|
||||
ULONG STDMETHODCALLTYPE ScriptHookPlugin::Release()
|
||||
{
|
||||
ULONG remaining = static_cast<ULONG>(InterlockedDecrement(&refCount_));
|
||||
if (remaining == 0)
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
return remaining;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE ScriptHookPlugin::Initialize(IWTSVirtualChannelManager* channelManager)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(channelManager);
|
||||
const hook::HookConfig config = hook::LoadConfig();
|
||||
hook::Log(config.enableLogging, L"IWTSPlugin::Initialize aufgerufen.");
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE ScriptHookPlugin::Connected()
|
||||
{
|
||||
const hook::HookConfig config = hook::LoadConfig();
|
||||
hook::Log(config.enableLogging, L"RDP-Verbindung hergestellt (IWTSPlugin::Connected).");
|
||||
|
||||
if (!config.enabled || !config.startOnConnect)
|
||||
{
|
||||
hook::Log(config.enableLogging, L"Start ist in der Konfiguration deaktiviert.");
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// Nur Registry lesen + CreateProcess aufrufen. Es wird niemals auf das Script gewartet.
|
||||
launcher_.Start(config);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE ScriptHookPlugin::Disconnected(DWORD disconnectCode)
|
||||
{
|
||||
const hook::HookConfig config = hook::LoadConfig();
|
||||
hook::Log(config.enableLogging,
|
||||
L"RDP-Verbindung getrennt (IWTSPlugin::Disconnected), Code=" + std::to_wstring(disconnectCode) + L".");
|
||||
|
||||
if (config.stopOnDisconnect)
|
||||
{
|
||||
launcher_.Stop(config.enableLogging);
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE ScriptHookPlugin::Terminated()
|
||||
{
|
||||
const hook::HookConfig config = hook::LoadConfig();
|
||||
hook::Log(config.enableLogging, L"IWTSPlugin::Terminated aufgerufen.");
|
||||
|
||||
if (config.stopOnDisconnect)
|
||||
{
|
||||
launcher_.Stop(config.enableLogging);
|
||||
}
|
||||
else
|
||||
{
|
||||
launcher_.Detach(config.enableLogging);
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
Reference in New Issue
Block a user