feat: initiale Version 0.1.0 des MSTSC Script Hooks

- Native x64 MSTSC-DVC-Erweiterung für lokalen Programmstart
- Automatischer Script-/Programmstart bei RDP-Verbindungsaufbau
- Separater Programmstart über Trigger innerhalb der RDP-Sitzung
- Bidirektionaler DVC zur Ermittlung des lokalen Client-Hostnamens
- SIOMIN-Trigger zur Anbindung lokaler Sidexis-Installationen
- SIOMIN-Datensatzlängen und Hostname-Felder bytegenau angepasst
- Temporäre SIOMIN-Einträge nach erfolgreicher Übernahme bereinigt
- Native Win32-Konfigurationsoberfläche ohne .NET-Abhängigkeit
- Mehrfachstartschutz und optionaler unsichtbarer Programmstart
- Debug- und Plugin-Logging ergänzt
- RemoteVDDS-Anwendungsfall integriert
- Installer/Registrierung des MSTSC-Plugins über Client-Konfigurator
- Techniker-, Entwickler- und Projektdokumentation ergänzt
- Proprietäre Lizenz für Copyright Patrick Gniza hinzugefügt
This commit is contained in:
2026-08-11 16:32:33 +02:00
parent ee88f1ff30
commit 4c51989600
37 changed files with 4885 additions and 1475 deletions
+18 -1
View File
@@ -5,11 +5,28 @@
namespace hook::protocol
{
// Der Dynamic-Virtual-Channel-Name muss auf Client und Terminalserver identisch sein.
// DVC-Namen dürfen laut WTSVirtualChannelOpenEx bis MAX_PATH lang sein.
inline constexpr char kChannelName[] = "plandent::mstsc-script-hook";
// Absichtlich ein festes Protokollkommando ohne Pfad/Argumente.
// Der Terminalserver kann damit nur den lokal vorkonfigurierten Start anfordern.
inline constexpr char kStartMessage[] = "PLANDENT_MSTSC_HOOK/1 START";
inline constexpr std::size_t kStartMessageLength = sizeof(kStartMessage) - 1;
// START wird quittiert. Die Server-EXE wartet auf diese Antwort, bevor sie den
// DVC schliesst. Dadurch geht die START-Nachricht nicht durch ein zu fruehes
// Schliessen des kurzlebigen Kanals verloren.
inline constexpr char kStartOkResponse[] = "PLANDENT_MSTSC_HOOK/1 START_OK";
inline constexpr std::size_t kStartOkResponseLength = sizeof(kStartOkResponse) - 1;
inline constexpr char kStartFailedResponse[] = "PLANDENT_MSTSC_HOOK/1 START_FAILED";
inline constexpr std::size_t kStartFailedResponseLength = sizeof(kStartFailedResponse) - 1;
// Abfrage des tatsaechlichen Hostnamens des lokalen RDP-Clients.
// Der Name wird direkt auf dem Client vom Plugin ermittelt und nicht aus
// CLIENTNAME/COMPUTERNAME der Remotesitzung uebernommen.
inline constexpr char kGetClientHostnameMessage[] = "PLANDENT_MSTSC_HOOK/1 GET_CLIENT_HOSTNAME";
inline constexpr std::size_t kGetClientHostnameMessageLength = sizeof(kGetClientHostnameMessage) - 1;
inline constexpr char kClientHostnameResponsePrefix[] = "PLANDENT_MSTSC_HOOK/1 CLIENT_HOSTNAME ";
inline constexpr std::size_t kClientHostnameResponsePrefixLength = sizeof(kClientHostnameResponsePrefix) - 1;
}