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
| Export | Address (r2) | Role |
|---|---|---|
GfnGetGameModStorageQuota | 0x1402853d0 | Sole 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 type | Inferred SDK surface |
|---|---|
AnnounceJoinRequest/Response | Session join handshake |
AppReadyRequest, AppReadyPrewarmRequest | App readiness signaling |
ApplicationSessionInitRequest, ApplicationPause/Save/ExitRequest | Session lifecycle |
GetClientInfoRequest, GetSessionInfo, GetAuthDataRequest | Client/session/auth queries |
GetPartnerDataRequest, GetPartnerSecureDataRequest | Partner data |
SetActionZoneRequest, SetEditBoxRequest, ClearEditBoxRequest | UI/action zone control |
SendCustomMessageToClientRequest, SendCustomMessageToSdkDllRequest | Custom messaging |
AuthorizeInferenceRequest/Response | Inference authorization |
Telemetry: ApiCallEvent@GfnSdkServiceSchema, ApiName@Fields@GfnSdkServiceSchema.
MessageBus peers (runtime log)
| Peer | When |
|---|---|
GfnSdkService:GfnSdkServiceTelemetry | 18:43:19.390 |
SdkService:SdkServiceController | 18:43:19.730 |
GfnRuntime:SdkServiceController | 18:43:19.752 |
GfnSdkService:SSLM | 18:43:19.775 |
NvCustomMessageConnector | 18: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.390 | Service start banner |
| 18:43:19.796 | SSLM bus client created; service thread running |
| 18:43:22.361 | SSLM peer joined: NGS:SSLM |
| 18:43:22.405 | Subscribed to SSLM notifications |
| 18:43:22.459 | GFNApplication [Controller] joined (count 1) |
| 18:48:22.386 | SessionSetup StartOfStateNonBlocking |
| 18:48:23.429 | SessionSetup EndOfState → GfnSdkController: OnSessionSetup |
| 18:48:23.430 | NvCustomMessageConnector created |
| 18:48:23.462 | GSConfigurator SessionObject fetched |
| 18:48:23.463 | Error: 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)
| String | Role |
|---|---|
Add API Handler: CloudCheck | HTTP route registration (log) |
Install GfnSdkService as a Service / -install | SCM install path |
GfnSdkService::DirectStart | CLI direct run (non-SCM) |
| Logs dir | C:\asgard\logs / GfnSdkService.log |
Imports: WS2_32, MSWSOCK (HTTP server sockets), ADVAPI32 (SCM).
Failure modes (strings + logs)
| String / log | Meaning |
|---|---|
Failed to initialize GfnSdkController | Controller setup failure |
Failed to create SSLM message bus client | SSLM 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 versions | Protobuf mismatch guard |
Relationships
| Component | Interaction |
|---|---|
| In-seat GFN SDK DLL | GFNApplication [DLL-pid-hash] bus peers |
GSConfiguratorPlugin | SessionObject config at session setup |
NGS:SSLM | Session state notifications |
Morph, StutterShark | Parallel SSLM subscribers on same bus |
| Pandora | VHDX install [14/14] GfnSdkService (logs/sas2/pandoraSoftwareInstall.log) |
GfnProductPlugin | String reference (relationship not log-verified) |
Not verified
- HTTP listen port and full route map (only
CloudCheckseen in log). - Behavior of export
GfnGetGameModStorageQuotaat runtime. - Whether
GfnProductPluginis loaded dynamically. - Partner secure data flows (protobuf present; no session log samples).
Evidence
readpe,strings, r2 onservices/GfnSdkService/GfnSdkService.exelogs/GfnSdkService/GfnSdkService.loglogs/startup/gfnsdkserviceSoftwareInstall.log,logs/sas2/pandoraSoftwareInstall.loglogs/GSP/GSConfiguratorPluginCurrent.log,logs/SmithyV2/SmithyController/.../SmithyControllerPlugin.log