Phase 1a: input forwarding via DLL injection + XInput hook
The host can now inject coop_hook.dll into a running game and forward controller state to it over shared memory, so the game reads the host's (eventually the guest's) input and nothing else. - hook/: coop_hook.dll. DllMain spawns a worker that opens the shared-memory channel (named by the game's pid) and installs SafetyHook inline hooks on XInputGetState/GetStateEx/GetCapabilities/SetState. Detours synthesize state from shared memory; unmanaged slots report disconnected, hiding physical pads. - host/: process picker (Toolhelp32), CreateRemoteThread(LoadLibraryW) injector with an IsWow64Process2 bitness guard, IPC server publishing pads each frame, and an ImGui Injection panel wiring it together. - tests/: hook_selftest exercises the IPC seqlock + hook detours in-process (no game/controller needed); passes. Build: SafetyHook wired in (COOP_BUILD_HOOK=ON), Zydis via FetchContent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
14
tests/CMakeLists.txt
Normal file
14
tests/CMakeLists.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
# Self-contained verification of the forwarding core (IPC + XInput hook).
|
||||
# Reuses the hook's xinput_hook.cpp directly so it exercises the shipping code.
|
||||
add_executable(hook_selftest
|
||||
hook_selftest.cpp
|
||||
${CMAKE_SOURCE_DIR}/hook/src/xinput_hook.cpp)
|
||||
|
||||
target_include_directories(hook_selftest PRIVATE ${CMAKE_SOURCE_DIR}/hook/src)
|
||||
|
||||
target_link_libraries(hook_selftest PRIVATE
|
||||
coop_common
|
||||
safetyhook::safetyhook
|
||||
xinput)
|
||||
|
||||
add_test(NAME hook_selftest COMMAND hook_selftest)
|
||||
Reference in New Issue
Block a user