Whew, last one.
_FindGameByGDFBinaryPathInScope doesn't free lpData.
It also never returns S_FALSE, but I see you fixed that later. You might want to add a test for GetGameStatistics in the case where a game is installed for all users or not installed at all. That should exercise the S_FALSE cases, if I understand this.
+ bstrGDFBinaryPath = SysAllocString(binaryGDFPath); + if(!bstrGDFBinaryPath) + hr = E_OUTOFMEMORY; + else + { + hr = IGameExplorer_VerifyAccess(IGameExplorer_from_impl(This), bstrGDFBinaryPath, pHasAccess); + SysFreeString(bstrGDFBinaryPath); + }
Given that VerifyAccess requires a BSTR and CheckAccess does not, it might make more sense to implement VerifyAccess based on CheckAccess.
As for why you shouldn't use msvcrt, well, I don't have a good answer for that. I just know seeing it in the makefile doesn't give me a good feeling, and no one else is using it. I asked in #winehackers and was told it can interfere with linking to the native libc.