Skip to content

GCIS Plugin System ​

This page now owns the GCIS host and plugin-system reverse-engineering notes from the 2026-05-19 Asgard snapshot. Individual plugin pages live in this Plugins category rather than under /reverse-engineering/ duplicates.

2026-05-19 application notes ​

NvContainerGcis.exe ​

What this program actually does ​

NvContainerGcis.exe is the Windows service host for GCIS (Grid Cloud Init Security) on a GeForce NOW gameseat. It implements NVIDIA NvContainer v1.45, loads seven mandatory security plugins from services/GCIS/plugins/, and orchestrates their lifecycle: secure load → initialize → start → stop → unload. It does not implement seat security policy itself; it is the process supervisor that keeps all GCIS plugins running in one SYSTEM service (GCIS).

If any mandatory plugin fails during Starting, the container tears down all plugins and exits — observed exit code 14109 in this snapshot.


Architecture / control flow (recovered symbols) ​

main / ServiceHost
  └─ nvc::ServiceHost / NvcServiceHost
        └─ nvc::HostWin32 (dynamic plugin load/unload disabled on seat)
              └─ nvc::PluginManager
                    ├─ RegistryStorage (per-plugin config during load)
                    ├─ Secure plugin load (NvcPluginLoadHel)
                    └─ State machine: Unloaded → Initializing → Initialized → Starting → Started
                          │ fail (mandatory) → Stopping → Stopped → Uninitializing → Unloaded → container exit
                          └─ MessageQueue (plugin notifications)

RTTI classes (strings): ServiceHost, PluginConfig, RegistryStorage, MessageQueue, DirectoryListenerWin32, DefaultContainerConfig, HostWin32.

Export: NvPluginGetInfo is used by plugins, not this EXE. This EXE exports NvOptimusEnablement (Optimus-related; seat usage not verified).

Build path string: C:\dvs\p4\build\sw\gcomp\rel\src\NvContainer\...\NvContainer.pdb


External interfaces ​

InterfaceRole
Windows Service GCISInstalled/stopped via services/GCIS/Uninstall.bat (net stop GCIS, sc delete GCIS)
Plugin directory%AG_HOME%\services\GCIS\plugins\ — loads ElmPlugin, GciPlugin, GcpPlugin, GssmPlugin, LkmPlugin, UadMLPlugin, UadPlugin
RegistryRegistryStorage created for each plugin load (config source not in workspace)
Logs%AG_LOGS%\GCIS\NvContainerGcis.log
Message busIndirect — plugins use GSConfigClient; host forwards system messages to plugins
DACL adjustmentOn start: Created new DACL with added privileges 0x00100000 for child process

No direct network/RPC surface in this binary — all external I/O is via loaded plugins.


Plugin lifecycle API (inferred from strings + logs) ​

Function / componentBehavior
NvcPluginManager::LoadSecure-load DLL, query NvPluginGetInfo, mark mandatory
Initiate transition to InitializingAsync plugin init; notification code 1 = success
Initiate transition to StartingPluginStart task in each plugin
Notification 2 from pluginFailure during Starting (observed for all GCIS plugins)
NvcPluginUnloadStatsPer-plugin stop/uninit timing telemetry
Base host: mandatory plugin %s has failed. ExitFatal path
AllowDynamicPluginLoad / AllowDynamicPluginUnloadDisabled on gameseat (Dynamic loading of plugins is disabled)

Runtime timeline (from logs/GCIS/NvContainerGcis.log) ​

Time (local)Event
19:04:51.902Container main v1.45, telemetry API init
19:04:51.906Load plugins from C:\Asgard\services\GCIS\plugins
19:04:51.906–52.264Secure-load all 7 mandatory plugins (versions 1.0.0.0 / 2.0.0.0)
19:04:52.264–52.882All plugins reach Initialized (notification 1)
19:04:52.882Container initialized; service reports Running
19:04:52.882Parallel transition to Starting for all plugins
19:04:53.028–53.052All mandatory plugins fail Starting (notification 2)
19:04:53.053–53.084Unload/stop each plugin; Failed to complete transition to Started
19:04:53.084Container exit; service Stopped, exit code 14109

Root cause (from plugin logs): each plugin’s PluginStart fetches GcisConfigData from GSConfigurator → OBJECT_NOT_FOUND → container abort.


Failure modes (error strings) ​

StringMeaning
Failed to load plugins. ExitingPlugin directory load failure
Failed to complete transition to StartedOne or more mandatory plugins failed Starting
Async state transition failure is detected for %s pluginPlugin reported failure asynchronously
Base host: mandatory plugin %s has failed. ExitFatal mandatory plugin failure
Failed to initialize RegistryStorage with statusRegistry config access failure
Plugin count exceeded maximum allowed %uToo many plugins configured

Relationships ​

ComponentInteraction
GCIS plugins (7 DLLs)Loaded/managed by this host
NvContainerGSP.exeSibling container; hosts GSConfigurator (config authority)
GSConfiguratorPluginPlugins fetch GcisConfigData, ZoneConfig, SeatConfig via message bus
mb-repeaterForwards GciPluginSysmon / ProcessEventMessage broadcasts
GciSchCo-uninstalled with GCIS per Uninstall.bat

Not verified ​

  • Exact GCIS acronym expansion.
  • Service install registry keys / SCM configuration (not in workspace).
  • Meaning of exit code 14109.
  • Whether NvOptimusEnablement export is invoked on the gameseat.
  • Container JSON/XML config file location (only RegistryStorage referenced in logs).

Evidence ​

  • strings / objdump -p on services/GCIS/NvContainerGcis.exe
  • logs/GCIS/NvContainerGcis.log, NvContainerGcis.log_backup1
  • services/GCIS/Uninstall.bat
  • Plugin logs under logs/GCIS/*Plugin*.log

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