https://bugs.winehq.org/show_bug.cgi?id=38576
Bug ID: 38576 Summary: PES2015 won't connect to online services/2 (ConvertInterfaceLuidToGuid is missing) Product: Wine Version: 1.7.42 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: iphlpapi Assignee: wine-bugs@winehq.org Reporter: c10ud.dev@gmail.com Distribution: ---
the game needs this unimplemented function (iphlpapi):
@ stdcall ConvertInterfaceLuidToGuid( ptr ptr )
DWORD WINAPI ConvertInterfaceLuidToGuid(const NET_LUID *InterfaceLuid, GUID *InterfaceGuid) { FIXME("(handle %d): stub\n", *InterfaceLuid); return NO_ERROR; }
this is just enough for getting it working. This function looks simple so maybe a proper implementation can be easily done.
https://bugs.winehq.org/show_bug.cgi?id=38576
Sebastian Lackner sebastian@fds-team.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |sebastian@fds-team.de
https://bugs.winehq.org/show_bug.cgi?id=38576
Bruno Jesus 00cpxxx@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever confirmed|0 |1
--- Comment #1 from Bruno Jesus 00cpxxx@gmail.com --- Please print both variables as %p with their respective names and try returning ERROR_NOT_SUPPORTED instead, returning NO_ERROR means that the function worked and filled InterfaceGuid properly, which is not the case.
https://bugs.winehq.org/show_bug.cgi?id=38576
--- Comment #2 from Riccardo c10ud.dev@gmail.com --- Bruno, this is what I came up to:
DWORD WINAPI ConvertInterfaceLuidToGuid(const NET_LUID *InterfaceLuid, GUID *InterfaceGuid) { ULONG ret, size, osize, i; IP_ADAPTER_ADDRESSES *aa, *ptr;
FIXME("stub[LUID: %p -- GUID %p]\n", InterfaceLuid, InterfaceGuid);
osize = 15000; ptr = HeapAlloc(GetProcessHeap(), 0, osize); ret = GetAdaptersAddresses(AF_UNSPEC, 0, NULL, ptr, &osize);
for (aa = ptr; !ret && aa; aa = aa->Next) { FIXME("GOT LUID: %p --- READ LUID: % GUIDptr(str): %s\n", InterfaceLuid, &aa->Luid, &aa->NetworkGuid); if (&aa->Luid == InterfaceLuid) { memcpy(InterfaceGuid, (GUID*) &aa->NetworkGuid, sizeof(GUID)); goto out_good; } } HeapFree(GetProcessHeap(), 0, ptr); return ERROR_INVALID_PARAMETER;
out_good: HeapFree(GetProcessHeap(), 0, ptr);
return NO_ERROR; }
fixme:iphlpapi:ConvertInterfaceLuidToGuid stub[LUID: 0x1812cd58 -- GUID 0x1812cd64] fixme:iphlpapi:ConvertInterfaceLuidToGuid GOT LUID: 0x1812cd58 --- READ LUID: 0x86f9298 GUIDptr(str): (null) fixme:iphlpapi:ConvertInterfaceLuidToGuid GOT LUID: 0x1812cd58 --- READ LUID: 0x86f94ec GUIDptr(str): (null) fixme:iphlpapi:ConvertInterfaceLuidToGuid GOT LUID: 0x1812cd58 --- READ LUID: 0x86f9740 GUIDptr(str): (null) fixme:iphlpapi:ConvertInterfaceLuidToGuid GOT LUID: 0x1812cd58 --- READ LUID: 0x86f9994 GUIDptr(str): (null)
Also the other issue about interface_bind: Failed to bind to interface, receiving broadcast packets will not work on socket XXX the call is actually executed twice, for the local network interface and works OK and then the game tries to bind the external ip address -->fail. (I guess that's expected)
https://bugs.winehq.org/show_bug.cgi?id=38576
--- Comment #3 from Bruno Jesus 00cpxxx@gmail.com --- Sounds plausible despite some issues like comparing the pointer instead of the variable contents.
The main problem is not that though, I can't see any function that sets the LUID for the interface, so all LUID values are possibly zero and trying to look for an empty LUID will probably hit the first value from GetAdaptersAddresses.
That's why I think it may be easier to try returning ERROR_NOT_SUPPORTED.
https://bugs.winehq.org/show_bug.cgi?id=38576
--- Comment #4 from Riccardo c10ud.dev@gmail.com --- (In reply to Bruno Jesus from comment #3)
Sounds plausible despite some issues like comparing the pointer instead of the variable contents.
The main problem is not that though, I can't see any function that sets the LUID for the interface, so all LUID values are possibly zero and trying to look for an empty LUID will probably hit the first value from GetAdaptersAddresses.
That's why I think it may be easier to try returning ERROR_NOT_SUPPORTED.
I tried comparing the ptr since the they were all null, but now I get why :) returning ERROR_INVALID_PARAMETER seems to be just enough
https://bugs.winehq.org/show_bug.cgi?id=38576
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch CC| |focht@gmx.net
--- Comment #5 from Anastasius Focht focht@gmx.net --- Hello folks,
obviously still present as of Wine 1.7.44
A patch for the stub is also available/included in Wine-Staging by default:
https://github.com/wine-compholio/wine-staging/blob/master/patches/iphlpapi-...
Regards
https://bugs.winehq.org/show_bug.cgi?id=38576
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |6444290aceba182cbddd7175052 | |648a3369fec50 Status|NEW |RESOLVED Resolution|--- |FIXED
--- Comment #6 from Nikolay Sivov bunglehead@gmail.com --- Stub is added as 6444290aceba182cbddd7175052648a3369fec50.
https://bugs.winehq.org/show_bug.cgi?id=38576
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #7 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 1.7.45.