The attached screenshot (UNMODIFIED) depicts the WGA 'GenuineCheck.exe' program that is used on the microsoft web site to 'validate' Windows so that you can download crap. Normally, it will not generate the needed key under Wine, but I have a screenshot (attached) of it doing so. I don't know is this is worth noting, as i couldn't tell you how I made it work (a LOT of things, too many to even count). However, I thought it might be something of intrest. If this is in any way useful to the development of Wine, please let me know.
On Saturday 17 December 2005 07:00, Segin wrote:
The attached screenshot (UNMODIFIED) depicts the WGA 'GenuineCheck.exe' program that is used on the microsoft web site to 'validate' Windows so that you can download crap. Normally, it will not generate the needed
If WGA enables downloading crap, why are you spending effort running it on Wine?
key under Wine, but I have a screenshot (attached) of it doing so. I don't know is this is worth noting, as i couldn't tell you how I made it work (a LOT of things, too many to even count). However, I thought it might be something of intrest. If this is in any way useful to the development of Wine, please let me know.
It can be very simple to make Wine compatible with the WGA check, the patch below used to do it for me. Patches like this are not likely to be applied to mainstream Wine though.
As has been discussed before, it's not wise to engage in a hide and seek game with Microsoft, since they will allways be able to change the check one more time.
They _are_ straddling the fence though, because the check can be seen as a means to tie applications to their OS. They use it to control distribution of "OS components" that applications depend on and where the term "OS component" is given a rather broad interpretation.
Of course, the right way for Wine to circumvent the WGA check is to provide open source implementations of those OS components.
-Hans
Index: dlls/ntdll/reg.c =================================================================== RCS file: /home/wine/wine/dlls/ntdll/reg.c,v retrieving revision 1.68 diff -u -r1.68 reg.c --- dlls/ntdll/reg.c 9 Dec 2005 13:52:46 -0000 1.68 +++ dlls/ntdll/reg.c 17 Dec 2005 12:49:16 -0000 @@ -115,6 +115,14 @@ { NTSTATUS ret; DWORD len = attr->ObjectName->Length; + static const WCHAR GenuineCheck[] = + { 'G','e','n','u','i','n','e','C','h','e','c','k','.','e','x','e',0 }; + static const WCHAR WineConfig[] = + { 'S','O','F','T','W','A','R','E', + '\','W','i','n','e', + '\','W','i','n','e', + '\','C','o','n','f','i','g',0 }; + LDR_MODULE *pldr;
TRACE( "(%p,%s,%lx,%p)\n", attr->RootDirectory, debugstr_us(attr->ObjectName), access, retkey ); @@ -133,6 +141,16 @@ } SERVER_END_REQ; TRACE("<- %p\n", *retkey); + + if (!LdrFindEntryForAddress( NtCurrentTeb()->Peb->ImageBaseAddress, &pldr )) + { + if (!strcmpiW( attr->ObjectName->Buffer, WineConfig ) && + !strcmpiW( pldr->BaseDllName.Buffer, GenuineCheck )) + { + TRACE( "Enabling workaround for GenuineCheck.exe\n" ); + return STATUS_INVALID_PARAMETER; + } + } return ret; }