[PATCH] Implement GetCurrentHwProfileA() fully
Vijay Kiran Kamuju
infyquest at gmail.com
Fri Feb 24 08:35:22 CST 2006
Could u plz send the patch to wine-patches
On 2/24/06, Ben Collins <bcollins at ubuntu.com> wrote:
> I setup Wine mainly to make use of some online poker clients that I use
> a lot. I experienced some known bugs related to advapi32.dll,
> specifically GetCurrentHwProfileA()'s semi-stub.
>
> The first issue was that the szHwProfileGuid was being set to a string
> that was one byte too long. This resulted in it actually being a
> concantenation of szHwProfileGuid and szHwProfileName. Fixing that,
> programs like FullTiltPoker.exe were able to work. The website suggested
> changing the return value to 0 (false), but that was just so things got
> ignored.
>
> The second issue with this function was more related to the hard coding
> of the GUID. Some sites, such as PacificPoker and ParadisePoker, can and
> will kill user access to the site. They do not do this by username, but
> but the Profile GUID (I didn't realize this till I started reading bug
> reports, and checking things). Presumably, this reduces the chance that
> someone simply changes their username. They pretty much block the user's
> system, unless they reinstall, or manually change the GUID.
>
> Because of this, all wine installs by default are not allowed to login
> to these sites (it only took one person to get kicked before the GUID
> was dead).
>
> So, to get things done to my liking, I just bit the bullet and
> implemented GetCurrentHwProfileA() correctly.
>
> The patch below has two parts
>
> 1. Implement GetCurrentHwProfileA() fully. It will read the current
> profile (0x0000 value), and obtain the values from this profile for
> docking state, profile name, and profile GUID.
>
> 2. Add default registry entries for the HWLK\*\IDConfigDB\* values.
>
> This still results in a default profile GUID. If anyone knows a way to
> generate a value for this during wineboot, that's probably the best
> solution.
>
> diff -urN wine-0.9.6/dlls/advapi32/advapi.c wine-0.9.6-ben/dlls/advapi32/advapi.c
> --- wine-0.9.6/dlls/advapi32/advapi.c 2006-01-19 14:13:51.000000000 +0000
> +++ wine-0.9.6-ben/dlls/advapi32/advapi.c 2006-02-24 02:18:26.000000000 +0000
> @@ -116,11 +116,57 @@
> */
> BOOL WINAPI GetCurrentHwProfileA(LPHW_PROFILE_INFOA pInfo)
> {
> - FIXME("(%p) semi-stub\n", pInfo);
> - pInfo->dwDockInfo = DOCKINFO_DOCKED;
> - strcpy(pInfo->szHwProfileGuid,"{12340001-1234-1234-1234-1233456789012}");
> - strcpy(pInfo->szHwProfileName,"Wine Profile");
> - return 1;
> + CHAR profile[32];
> + DWORD type;
> + DWORD size;
> + DWORD ret;
> + DWORD val;
> + HKEY hkey;
> + BOOL profile_result = 0;
> +
> + ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Control\\IDConfigDB",
> + &hkey);
> +
> + if (ret != ERROR_SUCCESS)
> + goto profile_error;
> +
> + ret = RegGetValueA(hkey, NULL, "CurrentConfig", RRF_RT_DWORD,
> + &type, &val, &size);
> + if (ret != ERROR_SUCCESS || size != 4 || type != REG_DWORD)
> + goto profile_error;
> +
> + /* At least, I think the profile names are hex */
> + sprintf(profile, "Hardware Profiles\\%04x", (WORD)(val & 0xffff));
> +
> + /* Set the profile name */
> + size = MAX_PROFILE_LEN;
> + ret = RegGetValueA(hkey, profile, "FriendlyName", RRF_RT_REG_SZ,
> + &type, pInfo->szHwProfileName, &size);
> +
> + if (ret != ERROR_SUCCESS || type != REG_SZ)
> + goto profile_error;
> +
> + /* Now get the GUID of this profile */
> + size = HW_PROFILE_GUIDLEN;
> + ret = RegGetValueA(hkey, profile, "HwProfileGuid", RRF_RT_REG_SZ,
> + &type, pInfo->szHwProfileGuid, &size);
> +
> + if (ret != ERROR_SUCCESS || type != REG_SZ)
> + goto profile_error;
> +
> + /* And finally the docking state */
> + ret = RegGetValueA(hkey, "CurrentDockInfo", "DockingState", RRF_RT_DWORD,
> + &type, &pInfo->dwDockInfo, &size);
> +
> + if (ret != ERROR_SUCCESS || size != 4 || type != REG_DWORD)
> + goto profile_error;
> +
> + /* Success */
> + profile_result = 1;
> +
> +profile_error:
> + RegCloseKey(hkey);
> + return profile_result;
> }
>
> /******************************************************************************
> diff -urN wine-0.9.6/tools/wine.inf wine-0.9.6-ben/tools/wine.inf
> --- wine-0.9.6/tools/wine.inf 2006-01-19 14:14:43.000000000 +0000
> +++ wine-0.9.6-ben/tools/wine.inf 2006-02-24 02:19:19.000000000 +0000
> @@ -211,6 +211,23 @@
> HKLM,System\CurrentControlSet\Control\Session Manager\Environment,"windir",,"%10%"
> HKLM,System\CurrentControlSet\Control\Session Manager\Environment,"winsysdir",,"%11%"
>
> +[IDConfigDB]
> +HKLM,System\CurrentControlSet\Control\IDConfigDB,"CurrentConfig",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB,"UserWaitInterval",,0x0000001e
> +HKLM,System\CurrentControlSet\Control\IDConfigDB,"IsPortable",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Alias\0000,"DockingState",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Alias\0000,"Capabilities",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Alias\0000,"DockID",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Alias\0000,"SerialNumber",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Alias\0000,"ProfileNumber",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Hardware Profiles,"Unknown",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0000,"PreferenceOrder",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0000,"FriendlyName",,"Wine Profile"
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0000,"Aliasable",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0000,"Cloned",,0x00000000
> +HKLM,System\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0000,"HwProfileGuid",,"{12340001-1234-1234-1234-123345678901}"
> +
> +
> [Fonts]
> HKLM,%FontSubStr%,"Arial CE,238",,"Arial,238"
> HKLM,%FontSubStr%,"Arial CYR,204",,"Arial,204"
>
>
> --
> Ubuntu - http://www.ubuntu.com/
> Debian - http://www.debian.org/
> Linux 1394 - http://www.linux1394.org/
> SwissDisk - http://www.swissdisk.com/
>
>
>
>
More information about the wine-devel
mailing list