Skip to content

GfnSdkService

GfnSdkService is now documented as a normal service application page instead of a reverse-engineering duplicate.

2026-05-19 application notes

GfnSdkService.exe

What this program actually does

GfnSdkService.exe is the GFN SDK HTTP service helper on a gameseat. It exposes a local HTTP API (Crow-based HttpServer) for in-seat SDK DLLs, proxies NVIDIA Bifrost protobuf request/response types, joins MessageBus as multiple peers, acts as an SSLM client for session setup, and tracks GFNApplication clients via GfnSdkController.

Strings describe it as "Platform GFN SDK Http Service" / "GFN SDK HTTP Service".


Architecture / control flow (recovered symbols)

main
  └─ GfnSdkService (CServiceBase@systemservicebase@nv)
        ├─ ServiceThread
        │     ├─ MessageBusUtils → GfnSdkService:GfnSdkServiceTelemetry
        │     ├─ TasConnector (TAS init ~270ms in log)
        │     ├─ GfnSdkController (GfnRuntime::SdkServiceController)
        │     │     ├─ GfnRuntime:SdkServiceController (bus)
        │     │     ├─ SdkService:SdkServiceController (bus)
        │     │     └─ NvCustomMessageConnector (per session)
        │     ├─ HttpServer → Add API Handler: CloudCheck
        │     └─ SslmClient → GfnSdkService:SSLM
        └─ GfnSdkService::HandleSslmStateChangeNotification
              └─ SessionInfoSetup (GFN_USER_ID/TOKEN env)

Build tree: C:\builds\gfn\gameseat\GfnSdkService\src\

PDB: C:\builds\gfn\gameseat\GfnSdkService\out\x64-windows-release\src\GfnSdkService.pdb


Exported API

ExportAddress (r2)Role
GfnGetGameModStorageQuota0x1402853d0Sole PE export; quota query for game mod storage (behavior not observed in logs)

RTTI / Bifrost messages (deep extract sample)

Embedded NVIDIA.Bifrost.Messages protobuf types include:

Message typeInferred SDK surface
AnnounceJoinRequest/ResponseSession join handshake
AppReadyRequest, AppReadyPrewarmRequestApp readiness signaling
ApplicationSessionInitRequest, ApplicationPause/Save/ExitRequestSession lifecycle
GetClientInfoRequest, GetSessionInfo, GetAuthDataRequestClient/session/auth queries
GetPartnerDataRequest, GetPartnerSecureDataRequestPartner data
SetActionZoneRequest, SetEditBoxRequest, ClearEditBoxRequestUI/action zone control
SendCustomMessageToClientRequest, SendCustomMessageToSdkDllRequestCustom messaging
AuthorizeInferenceRequest/ResponseInference authorization

Telemetry: ApiCallEvent@GfnSdkServiceSchema, ApiName@Fields@GfnSdkServiceSchema.


MessageBus peers (runtime log)

PeerWhen
GfnSdkService:GfnSdkServiceTelemetry18:43:19.390
SdkService:SdkServiceController18:43:19.730
GfnRuntime:SdkServiceController18:43:19.752
GfnSdkService:SSLM18:43:19.775
NvCustomMessageConnector18:48:23.430 (after SessionSetup)

Config file: C:\Program Files\NVIDIA Corporation\NvContainer\plugins\LocalSystem\messagebus.conf


SSLM / session flow (from logs/GfnSdkService/GfnSdkService.log)

Time (local)Event
18:43:19.390Service start banner
18:43:19.796SSLM bus client created; service thread running
18:43:22.361SSLM peer joined: NGS:SSLM
18:43:22.405Subscribed to SSLM notifications
18:43:22.459GFNApplication [Controller] joined (count 1)
18:48:22.386SessionSetup StartOfStateNonBlocking
18:48:23.429SessionSetup EndOfState → GfnSdkController: OnSessionSetup
18:48:23.430NvCustomMessageConnector created
18:48:23.462GSConfigurator SessionObject fetched
18:48:23.463Error: SessionSetup: user info missing in Session config or empty, skipping GFN_USER_ID/GFN_USER_TOKEN
18:48:45.405+Transient GFNApplication [DLL-…] join/leave events

HTTP / service SCM (strings)

StringRole
Add API Handler: CloudCheckHTTP route registration (log)
Install GfnSdkService as a Service / -installSCM install path
GfnSdkService::DirectStartCLI direct run (non-SCM)
Logs dirC:\asgard\logs / GfnSdkService.log

Imports: WS2_32, MSWSOCK (HTTP server sockets), ADVAPI32 (SCM).


Failure modes (strings + logs)

String / logMeaning
Failed to initialize GfnSdkControllerController setup failure
Failed to create SSLM message bus clientSSLM peer creation failed
SSLM subscription rejected with error code: {}SSLM subscribe denied
SessionSetup: user info missing…SessionObject lacked user token fields
MessageBus message received without valid domain…BusObserverEx dispatch warning
Error dispatching message… incompatible protobuf versionsProtobuf mismatch guard

Relationships

ComponentInteraction
In-seat GFN SDK DLLGFNApplication [DLL-pid-hash] bus peers
GSConfiguratorPluginSessionObject config at session setup
NGS:SSLMSession state notifications
Morph, StutterSharkParallel SSLM subscribers on same bus
PandoraVHDX install [14/14] GfnSdkService (logs/sas2/pandoraSoftwareInstall.log)
GfnProductPluginString reference (relationship not log-verified)

Not verified

  • HTTP listen port and full route map (only CloudCheck seen in log).
  • Behavior of export GfnGetGameModStorageQuota at runtime.
  • Whether GfnProductPlugin is loaded dynamically.
  • Partner secure data flows (protobuf present; no session log samples).

Evidence

  • readpe, strings, r2 on services/GfnSdkService/GfnSdkService.exe
  • logs/GfnSdkService/GfnSdkService.log
  • logs/startup/gfnsdkserviceSoftwareInstall.log, logs/sas2/pandoraSoftwareInstall.log
  • logs/GSP/GSConfiguratorPluginCurrent.log, logs/SmithyV2/SmithyController/.../SmithyControllerPlugin.log

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