Skip to content

ElmPlugin

ElmPlugin.dll — Edge/Compute Lifecycle Management plugin. Handles session lifecycle, communication, streaming control, and security enforcement.

File Info

PropertyValue
FileElmPlugin.dll
Size15,162,912 bytes
Architecturex86_64
Build PathC:\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

FunctionDescription
SetupSessionInitialize a new game session
LaunchSessionStart the game streaming session
PauseSessionPause an active session
ResumeSessionResume a paused session
StopSessionTerminate 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:

  • EventLogMonitorPlugin class symbols
  • GSEC_Common_Error_ParseConfigFailed
  • GSEC_Common_Error_ParseLoggerProfileConfigFailed
  • GSEC_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 SetupSessionResponse and moves seat state toward active.

Evidence:

  • GsServiceApi.Request.SetupSession
  • GsServiceApi.SetupSessionParamskeyboardLayoutclientIpinstanceTypessoToken
  • GsServiceApi.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 SecurityTerminationInitiated on 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_PostStopSessionRequestFailed
  • GSEC_Common_Error_StateTransitionIncompleteKillStreamer
  • GSEC_Common_Error_UnableToFindRunningStreamerProcess

Implements request/response/notification messaging:

  • GCISCommunicationMessage_Request — outgoing requests
  • GCISCommunicationMessage_Response — incoming responses
  • GCISCommunicationMessage_Notification — event notifications
  • GCISCommunicationMessage_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.SetupSession
  • GsServiceApi.Request.PauseSession
  • GsServiceApi.Request.ResumeSession
  • GsServiceApi.Request.StopSession

Content Controller Domain

  • ContentControllerAPI.Generic.Request.LaunchSession
  • ContentControllerAPI.Generic.Response.LaunchSession

Proto Files

Proto FileWhy It Matters
GCISCommunicationMessagesDef.protoBase envelope for inter-plugin messaging
ServiceVersionDef.protoVersion negotiation/reporting
ContentControllerMessagesDef.protoApp/content lifecycle messages
SessionShutdownSettingsDef.protoExit 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_IgnoringSessionTerminationDueToSessionTearingDown
  • GSEC_ELM_Warning_IgnoringSessionTerminationDueToEnforcementOverride
  • GSEC_ELM_Error_FailedToProcessEvent
  • GSEC_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 monitoring
  • GcisPluginTaskQueue — async task queue
  • GCISServiceAPI — main service API interface

Session

  • GameSession — game session model
  • GsServiceApi_SetupSessionParams — session setup parameters
  • GsServiceApi_SessionTimeout — timeout configuration
  • SessionShutdownSettings — shutdown configuration

Content

  • ContentControllerConfig — content controller configuration
  • AppFeatures — application feature flags
  • AppResult — operation results

Practical Debug Checklist

If session lifecycle is stuck:

  1. Verify setup request parsing and required fields in GsServiceApi.SetupSessionParams.
  2. Verify content-controller launch response is present.
  3. Check for SessionFlowNotActivatedAtSessionStart and stop-request post failures.
  4. 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:

RangeCategory
0x800300130x8003001ASecurity violations (unauthorized/malicious processes)
0x8004xxxxStreaming/WebRTC errors
0x800301080x80030109Multi-login detection

See the full Error Codes Reference for details.

SRC_ Error Codes

These are the session result codes emitted by ElmPlugin:

CodeDescription
SRC_MaliciousProcessViolationMalicious process detected (certutil downloads, etc.)
SRC_UnauthorizedProcessViolationUnauthorized process (PowerShell from System32)
SRC_MinerProcessViolationCrypto miner detected (f2pool, etc.)
SRC_MultipleLoginSame account logged in elsewhere
SRC_RemoteLoginRemote login session detected
SRC_StreamerExceptionStreaming engine exception
SRC_StreamFailedToStartStream initialization failed
SRC_StreamingInterruptedStreaming was interrupted
SRC_KeyframeDetectionFailedVideo keyframe detection failed
SRC_ClientConnectFailedClient connection failed
SRC_ClientReconnectTimeoutReconnection timed out
SRC_BifrostInitiatedSessionPauseSession paused by Bifrost framework

admindesk.top — Reversed & documented from Asgard rig backups and GCIS plugin binaries.