Initialversion

This commit is contained in:
2026-08-09 13:27:53 +02:00
commit eec4f52b5a
25 changed files with 2123 additions and 0 deletions
+93
View File
@@ -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;
}