Comprehensive pnsrad.dll/pnsovr.dll export tracer
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 38/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- cpp
- Domain
- devtools, reverse-engineering
Research direction
Start with docs/design/2026-09-21-mic-provider-voip-fix.md, echovr-reconstruction/src/pnsrad/Plugin/RadPluginAPI.h, and echovr-reconstruction/src/pnsovr/exports.cpp; then inspect the existing MinHook and HookGuard usage. Done means both DLL export surfaces are traced with the same structured format, including arguments, returns, and duration, while calls continue through to the real implementations.
Written by the indexing model from the issue text.
Description
Andrew: rather than discovering pnsrad.dll defects one feature at a time (mic
stub #15, the party-broadcaster-handle question in pnsrad_enabler.cpp),
build a comprehensive call tracer over both DLLs' full export surfaces so we
know everything they're relied on for, up front.
Design sketch
Reuse the existing MinHook + HookGuard mechanism already used throughout
this codebase — no separate forwarding DLL, no file renaming.
- Every pnsrad.dll export (~33 unique functions; see
docs/design/2026-09-21-mic-provider-voip-fix.mdand
echovr-reconstruction/src/pnsrad/Plugin/RadPluginAPI.hfor the full,
typed list) gets a MinHook trampoline: log name, typed args, return value,
duration → the existing structured logger. Always call through to the real
implementation — pure observation, never altered behavior. This is the
"Fidelity Monitor" pattern the C++/mingw addendum already mandates for
every translation layer ("log both input parameters and output results
side-by-side"). - Same treatment for pnsovr.dll's exports
(echovr-reconstruction/src/pnsovr/exports.cpp), gated on it actually
loading (-micprovider OVR, a machine with the Oculus runtime/headset). - Both traces use the same format, so a pnsrad run and a pnsovr run diff
directly — showing exactly which pnsovr-era behavior pnsrad is silently
not providing, across the whole export surface, not just whichever
feature someone happened to test.
Why now, not blocking
Filed to capture the idea per Andrew's "we don't want to lose state"
convention. Does not block the in-flight mic provider fix (#15, PR #19,
which doesn't depend on this and has no unresolved design questions of its
own). Pick this up after the mic fix, or whenever the next pnsrad social
feature (Party/Friends/Users/Activities — see the unresolved broadcaster-
handle question in pnsrad_enabler.cpp's PartySendInviteHook) needs
investigating anyway.
🤖 Generated with Claude Code
- Dominant language
- C++
- Stars
- 2
- Forks
- 5
- Avg merge
- 5h 8m
- Merged PRs (30d)
- 911
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from EchoTools/nevr-runtime
-
backlog test-gap
Difficulty 2/5 1-3 hours Newbie friendliness 80/100
EchoTools/nevr-runtime#1718 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
EchoTools/nevr-runtime#1679 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
EchoTools/nevr-runtime#1538 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
EchoTools/nevr-runtime#1537 ·
Maintainers usually reply within 1 day
-
quest(log): the login the login-prompt fallback starts is logged without an XPID (logging.md Rule 2)Openbacklog
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
EchoTools/nevr-runtime#1397 ·
Maintainers usually reply within 1 day
All issues in EchoTools/nevr-runtime
Similar issues
-
Bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 82/100
-
v3: Lua m.setvar() returns -1 on errors, so the script gets stack garbagePossibly taken A pull request linked to this issue is open or already merged. Open3.x bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
owasp-modsecurity/ModSecurity#3731 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Sendspin/sendspin-cpp-cli#111 ·
Maintainers usually reply within 1 day
-
[Core/Config] The server fails to start due to an invalid config path when debuggingPossibly taken A pull request linked to this issue is open or already merged. Open
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
azerothcore/azerothcore-wotlk#28350 ·
Maintainers usually reply within 1 day