ETW graphics providers fail in split privilege model: StartTraceA=5 non-elevated, EnableTraceEx2=1450 elevated

Thomas Hansen 5 Reputation points
2026-07-19T15:35:07.0033333+00:00

I am building a Windows desktop overlay in C++/WPF that needs FPS from graphics present events.

Current setup:

  • non-elevated UI process (normal desktop app)
  • elevated helper/agent process for hardware telemetry
  • native C++ FPS agent using ETW
  • target game: PathOfExile.exe (DX12), tested on Windows 11

What we observe:

  1. Non-elevated native FPS agent
  • successfully finds and locks PathOfExile.exe
  • StartTraceA fails with Win32 error 5 (Access Denied)
  1. Elevated/native helper path
  • StartTrace succeeds
  • EnableTraceEx2 fails with Win32 error 1450 (ERROR_NO_SYSTEM_RESOURCES) for all 3 providers:
    • Microsoft-Windows-DxgKrnl
    • Microsoft-Windows-DXGI
    • D3D9
  • OpenTrace then fails / no events received
  1. Machine-level checks already done
  • xperf -loggers shows no obvious graphics ETW logger conflicts
  • logman query -ets shows only MSDTC_TRACE_SESSION
  • WPR is not recording
  • Xbox-related process and MSI Afterburner were closed; behavior did not change
  • same behavior when testing from copied deployment path

Important extra result:

  • We changed the native FPS agent manifest from requireAdministrator to asInvoker
  • running the agent directly from the non-elevated UI process no longer fails at process start
  • but then StartTraceA still fails with error 5
  • so the split is now:
    • non-elevated: cannot StartTrace
    • elevated: can StartTrace, but cannot EnableTraceEx2 on DxgKrnl/DXGI/D3D9

Question:

Has anyone seen this exact ETW privilege split for graphics providers before?

Is there a supported architecture for this case where:

  • an elevated process owns the ETW session and consumes ProcessTrace
  • a non-elevated UI only reads decoded FPS results via IPC/file

and if so, is that expected to avoid the 1450 failure?

Secondary question:

For graphics ETW providers, is there any known reason why EnableTraceEx2 would consistently return 1450 in an elevated process even when:

  • the game is already running
  • the target PID is known
  • there are no visible competing graphics ETW sessions
  • multiple providers all fail the same way?

Any guidance on whether this is:

  • expected Windows security behavior
  • a known ETW quota/provider issue
  • anti-cheat / protected process interaction
  • or simply a dead end for this architecture

would be very helpful.

Windows development | Windows Performance Toolkit

1 answer

Sort by: Newest
  1. Thomas Hansen 5 Reputation points
    2026-07-20T14:20:57.59+00:00

    Hi Gary,

    Thanks, that pointed us in the right direction.

    You were right to focus on Performance Log Users.

    The non-elevated account was not a member of that group. On this Danish Windows install the localized group name is Brugere af ydelseslog.

    After adding the user to that group and restarting Windows, the ETW FPS path started working correctly.

    What changed after that:

    • the graphics ETW session starts successfully
    • provider enable succeeds
    • live events are received from Microsoft-Windows-DxgKrnl and Microsoft-Windows-DXGI
    • FPS is now shown correctly and matches the game behavior in PathOfExile.exe (DX12)

    Recent state/logs now show:

    • etwStartFailureCount = 0
    • lastEtwError = ""
    • dxgKrnlEnabled = true
    • dxgiEnabled = true
    • d3d9Enabled = true
    • etwEventsReceived = true

    So in our case this was not anti-cheat, and not a dead end for ETW. It was a permissions/setup issue, and Performance Log Users membership plus reboot was the missing piece.

    Thanks again, ThomasHi Gary,

    Thanks, that pointed us in the right direction.

    You were right to focus on Performance Log Users.

    The non-elevated account was not a member of that group. On this Danish Windows install the localized group name is Brugere af ydelseslog.

    After adding the user to that group and restarting Windows, the ETW FPS path started working correctly.

    What changed after that:

    • the graphics ETW session starts successfully
    • provider enable succeeds
    • live events are received from Microsoft-Windows-DxgKrnl and Microsoft-Windows-DXGI
    • FPS is now shown correctly and matches the game behavior in PathOfExile.exe (DX12)

    Recent state/logs now show:

    • etwStartFailureCount = 0
    • lastEtwError = ""
    • dxgKrnlEnabled = true
    • dxgiEnabled = true
    • d3d9Enabled = true
    • etwEventsReceived = true

    So in our case this was not anti-cheat, and not a dead end for ETW. It was a permissions/setup issue, and Performance Log Users membership plus reboot was the missing piece.

    Thanks again,
    Thomas

    Was this answer helpful?

    1 person found this answer helpful.

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.