ElmPlugin
ElmPlugin.dll — Edge/Compute Lifecycle Management plugin. Handles session lifecycle, communication, streaming control, and security enforcement.
File Info
| Property | Value |
|---|---|
| File | ElmPlugin.dll |
| Size | 15,162,912 bytes |
| Architecture | x86_64 |
| Build Path | C:\dvs\p4\build\sw\gcomp\dev\src\GCIS\_out\x86_64\release\ElmPlugin\ |
What ElmPlugin Controls
Elm is the control-plane plugin for seat/session lifecycle. It brokers setup/launch/pause/resume/stop flows between GCIS and downstream service domains, then emits termination/error outcomes when policy or runtime checks fail.
Primary domains:
- Session orchestration (
SetupSession,LaunchSession,PauseSession,ResumeSession,StopSession) - GCIS inter-plugin communication (
GCISCommunicationMessage_*) - Content-controller request/response handling
- Event-log driven security triggers via
EventLogMonitorPlugin - Session shutdown settings propagation
Session Management
| Function | Description |
|---|---|
SetupSession | Initialize a new game session |
LaunchSession | Start the game streaming session |
PauseSession | Pause an active session |
ResumeSession | Resume a paused session |
StopSession | Terminate a session |
Internal Runtime Flow
1) Initialization
- Parses config and logger profile from seat/userdata.
- Starts async worker queue (
GcisPluginTaskQueue). - Initializes event watchers (
EventLogMonitorPlugin). - Subscribes to MessageBus/GCIS domains.
Evidence:
EventLogMonitorPluginclass symbolsGSEC_Common_Error_ParseConfigFailedGSEC_Common_Error_ParseLoggerProfileConfigFailedGSEC_Common_Error_NvContainerPerformStartFailed
2) Session Setup and Activation
- Receives setup request from GCIS API domain.
- Builds
GsServiceApi_SetupSessionParams(client IP, keyboard layout, instance types, auth tokens). - Sends
SetupSessionResponseand moves seat state toward active.
Evidence:
GsServiceApi.Request.SetupSessionGsServiceApi.SetupSessionParamskeyboardLayoutclientIpinstanceTypessoTokenGsServiceApi.SetupSessionResponse
3) In-session Control
- Accepts pause/resume/stop requests from bus/API.
- Coordinates with content-controller launch and state messages.
- Emits monitor notifications for health/state changes.
4) Termination and Teardown
- Emits
SecurityTerminationInitiatedon severe policy violations. - May stop streamer process tree when session flow is invalid/incomplete.
- Final stop request/notification paths are sent before teardown.
Evidence:
GSEC_Common_Error_PostStopSessionRequestFailedGSEC_Common_Error_StateTransitionIncompleteKillStreamerGSEC_Common_Error_UnableToFindRunningStreamerProcess
Implements request/response/notification messaging:
GCISCommunicationMessage_Request— outgoing requestsGCISCommunicationMessage_Response— incoming responsesGCISCommunicationMessage_Notification— event notificationsGCISCommunicationMessage_MonitoringNotification— health/monitoring events
Uses GCISServiceAPI for inter-service calls and MessageBusClient for the Bifrost message bus.
Message Domains and Protos
GCIS/GsServiceApi Domain
GsServiceApi.Request.SetupSessionGsServiceApi.Request.PauseSessionGsServiceApi.Request.ResumeSessionGsServiceApi.Request.StopSession
Content Controller Domain
ContentControllerAPI.Generic.Request.LaunchSessionContentControllerAPI.Generic.Response.LaunchSession
Proto Files
| Proto File | Why It Matters |
|---|---|
GCISCommunicationMessagesDef.proto | Base envelope for inter-plugin messaging |
ServiceVersionDef.proto | Version negotiation/reporting |
ContentControllerMessagesDef.proto | App/content lifecycle messages |
SessionShutdownSettingsDef.proto | Exit and teardown controls |
Security and Enforcement Behavior
- Monitors event log signals and policy exceptions.
- Enforces session result mapping (
SRC_*) for user-facing failures. - Applies enforcement overrides during controlled teardown states.
Notable warning/error indicators:
GSEC_ELM_Warning_IgnoringSessionTerminationDueToSessionTearingDownGSEC_ELM_Warning_IgnoringSessionTerminationDueToEnforcementOverrideGSEC_ELM_Error_FailedToProcessEventGSEC_ELM_Error_SessionAbort
Telemetry and Logging
- Emits security and lifecycle telemetry through
NvTelemetry. - Uses event-log and service-state watchers to annotate session outcomes.
- Shared error taxonomy comes from
GciUnifiedErrorCodes.proto.
Key Classes
Core
EventLogMonitorPlugin— event logging and monitoringGcisPluginTaskQueue— async task queueGCISServiceAPI— main service API interface
Session
GameSession— game session modelGsServiceApi_SetupSessionParams— session setup parametersGsServiceApi_SessionTimeout— timeout configurationSessionShutdownSettings— shutdown configuration
Content
ContentControllerConfig— content controller configurationAppFeatures— application feature flagsAppResult— operation results
Practical Debug Checklist
If session lifecycle is stuck:
- Verify setup request parsing and required fields in
GsServiceApi.SetupSessionParams. - Verify content-controller launch response is present.
- Check for
SessionFlowNotActivatedAtSessionStartand stop-request post failures. - Check whether termination was intentionally ignored because teardown was already in progress.
Dependencies
- Poco C++ Libraries v1.10.1
- Protocol Buffers
- MessageBusClient (Bifrost)
- NvTelemetry
- Windows APIs:
CreateProcessAsUser,GetFileVersionInfo, etc.
Error Codes
ElmPlugin is responsible for error codes in these ranges:
| Range | Category |
|---|---|
0x80030013 – 0x8003001A | Security violations (unauthorized/malicious processes) |
0x8004xxxx | Streaming/WebRTC errors |
0x80030108 – 0x80030109 | Multi-login detection |
See the full Error Codes Reference for details.
SRC_ Error Codes
These are the session result codes emitted by ElmPlugin:
| Code | Description |
|---|---|
SRC_MaliciousProcessViolation | Malicious process detected (certutil downloads, etc.) |
SRC_UnauthorizedProcessViolation | Unauthorized process (PowerShell from System32) |
SRC_MinerProcessViolation | Crypto miner detected (f2pool, etc.) |
SRC_MultipleLogin | Same account logged in elsewhere |
SRC_RemoteLogin | Remote login session detected |
SRC_StreamerException | Streaming engine exception |
SRC_StreamFailedToStart | Stream initialization failed |
SRC_StreamingInterrupted | Streaming was interrupted |
SRC_KeyframeDetectionFailed | Video keyframe detection failed |
SRC_ClientConnectFailed | Client connection failed |
SRC_ClientReconnectTimeout | Reconnection timed out |
SRC_BifrostInitiatedSessionPause | Session paused by Bifrost framework |