Is there a reason that the record/playback of input needs to be done in the win32 layer, rather than in the game layer? We seem to be recording the game_input struct, and we have debug functions to do file access, so it feels like this only needs to be done once, rather than for each platform. I'm still catching up, and so I realise I may have missed something that comes later, or just something obvious that stops you doing this.
If different platforms played back at the same frame rate etc, you could maybe even use files created on one to playback in another, although that might not really be needed unless you create a load of 'tests' for your game.