From: Robert Lippmann robert.lippmann.development@gmail.com
--- dlls/powrprof/powersetting.c | 45 +++++++++++++++++++++++++++--- dlls/powrprof/tests/powersetting.c | 21 +++++++------- 2 files changed, 52 insertions(+), 14 deletions(-)
diff --git a/dlls/powrprof/powersetting.c b/dlls/powrprof/powersetting.c index 2558c74f71b..1ffe8c65e3c 100644 --- a/dlls/powrprof/powersetting.c +++ b/dlls/powrprof/powersetting.c @@ -54,6 +54,8 @@ static DWORD guid_to_registry(const GUID * const pguid, char *guid_str, int guid SetLastError(ERROR_BUFFER_OVERFLOW); return ERROR_BUFFER_OVERFLOW; } + CharLowerA(guid_str); + TRACE("GUID successfully converted to %s\n", debugstr_a(guid_str)); return ERROR_SUCCESS; } static DWORD get_or_create_active_power_scheme_key(HKEY *hkey) @@ -64,20 +66,29 @@ static DWORD get_or_create_active_power_scheme_key(HKEY *hkey) ret = RegCreateKeyExA(HKEY_LOCAL_MACHINE, active_power_scheme_key, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, NULL, hkey, &key_disposition); if (ret != ERROR_SUCCESS) { + ERR("RegCreateKeyExA failed: got error %ld\n", ret); return ret; } if (key_disposition != REG_CREATED_NEW_KEY) { + TRACE("Active power scheme key already exists\n"); return ERROR_SUCCESS; } /* Create the default power profile value */ ret = guid_to_registry(&GUID_TYPICAL_POWER_SAVINGS, default_scheme, sizeof(default_scheme)); if(ret != ERROR_SUCCESS) { + ERR("guid_to_registry failed: got error %ld\n", ret); return ret; } - TRACE("Creating default power profile value %s\n", debugstr_a(active_power_scheme_value)); - return(RegSetValueExA(*hkey, active_power_scheme_value, 0, REG_SZ, (const BYTE *)default_scheme, strlen(default_scheme) + 1)); + TRACE("Creating default power scheme value %s, and setting to %s\n", debugstr_a(active_power_scheme_value), + debugstr_a(default_scheme)); + ret = RegSetValueExA(*hkey, active_power_scheme_value, 0, REG_SZ, (const BYTE *)default_scheme, strlen(default_scheme) + 1); + if(ret != ERROR_SUCCESS) + { + ERR("RegSetValueExA for %s failed: got error %ld\n", debugstr_a(active_power_scheme_value), ret); + } + return ret; }
DWORD WINAPI PowerGetActiveScheme(HKEY UserRootPowerKey, GUID **polguid) @@ -88,6 +99,7 @@ DWORD WINAPI PowerGetActiveScheme(HKEY UserRootPowerKey, GUID **polguid) WCHAR scheme_guid_w[39]; DWORD scheme_guid_size = sizeof(scheme_guid);
+ TRACE("called\n"); ret = get_or_create_active_power_scheme_key(&hkey); if(ret != ERROR_SUCCESS) { @@ -102,19 +114,37 @@ DWORD WINAPI PowerGetActiveScheme(HKEY UserRootPowerKey, GUID **polguid) ret = RegQueryValueExA(hkey, active_power_scheme_value, NULL, NULL, (LPBYTE)scheme_guid, &scheme_guid_size); if(ret != ERROR_SUCCESS) { + ERR("RegQueryValueExA for %s failed: got error %ld\n", debugstr_a(active_power_scheme_value), ret); return ret; } - snprintf(scheme_guid, sizeof(scheme_guid),"{%s}", scheme_guid); + + TRACE("RegQueryValueExA for %s returned %s\n", debugstr_a(active_power_scheme_value), + debugstr_a(scheme_guid)); /* Windows SDK docs say this can be freed with LocalFree() */ *polguid = LocalAlloc(LPTR, sizeof(GUID)); if(*polguid == NULL) { return GetLastError(); } - mbstowcs(scheme_guid_w, scheme_guid, sizeof(scheme_guid_w)); + + ret = MultiByteToWideChar(CP_ACP, 0, scheme_guid, -1, scheme_guid_w + 1, scheme_guid_size); + if (ret == 0) + { + ERR("MultiByteToWideChar failed, got error %ld\n", GetLastError()); + LocalFree(*polguid); + return GetLastError(); + } + /* Add curly braces around string */ + scheme_guid_w[0] = L'{'; + scheme_guid_w[ret] = L'}'; + scheme_guid[ret + 1] = L'\0'; + TRACE("Converting GUID %s to CLSID\n", debugstr_w(scheme_guid_w)); ret = CLSIDFromString(scheme_guid_w, *polguid); if(ret != S_OK) { + ERR("Converting GUID %s to CLSID failed, got error %ld\n", + debugstr_a(scheme_guid), ret); + LocalFree(*polguid); return ERROR_INVALID_PARAMETER; } RegCloseKey(hkey); @@ -128,7 +158,12 @@ DWORD WINAPI PowerSetActiveScheme(HKEY UserRootPowerKey, GUID *polguid) char scheme_guid[39]; const DWORD guid_size = sizeof(scheme_guid);
+ TRACE("Called with %s\n", debugstr_guid(polguid)); FIXME("Should use EnumeratePowerSettings to validate passed in GUID\n"); + if(!polguid) + { + return(ERROR_INVALID_PARAMETER); + } if(!(IsEqualGUID(polguid, &GUID_MAX_POWER_SAVINGS)|| IsEqualGUID(polguid, &GUID_MIN_POWER_SAVINGS)|| IsEqualGUID(polguid, &GUID_TYPICAL_POWER_SAVINGS))) @@ -145,9 +180,11 @@ DWORD WINAPI PowerSetActiveScheme(HKEY UserRootPowerKey, GUID *polguid) { return ret; } + TRACE("Setting %s to %s\n", debugstr_a(active_power_scheme_value), debugstr_a(scheme_guid)); ret=RegSetValueExA(hkey, active_power_scheme_value, 0, REG_SZ, (const BYTE *)scheme_guid, strlen(scheme_guid) + 1); if(ret != ERROR_SUCCESS) { + ERR("RegSetValueExA for %s failed: got error %ld\n", debugstr_a(active_power_scheme_value), ret); return ret; } RegCloseKey(hkey); diff --git a/dlls/powrprof/tests/powersetting.c b/dlls/powrprof/tests/powersetting.c index ce55239b226..c3c1da6f292 100644 --- a/dlls/powrprof/tests/powersetting.c +++ b/dlls/powrprof/tests/powersetting.c @@ -30,7 +30,6 @@ START_TEST(powersetting) { GUID *initial_powerprof = NULL, *new_powerprof = NULL, *tmp_powerprof = NULL; - WCHAR guid_string[40], guid_string2[40]; HKEY tmp_key[] = { HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_DYN_DATA, HKEY_LOCAL_MACHINE, HKEY_PERFORMANCE_DATA, HKEY_PERFORMANCE_NLSTEXT, HKEY_USERS }; @@ -40,7 +39,6 @@ /* save initial power scheme to restore when test is finished */ ret = PowerGetActiveScheme(NULL, &initial_powerprof); ok(ret == ERROR_SUCCESS, "Retrieval of inital power scheme failed: %lu\n", ret); - StringFromGUID2(initial_powerprof,guid_string, sizeof(guid_string));
/* Windows can have additional power schemes, wine currently cannot */ if(winetest_platform_is_wine) @@ -48,7 +46,7 @@ ok((IsEqualGUID(initial_powerprof,&GUID_MAX_POWER_SAVINGS) || IsEqualGUID(initial_powerprof,&GUID_TYPICAL_POWER_SAVINGS) || IsEqualGUID(initial_powerprof,&GUID_MIN_POWER_SAVINGS)), - "Initial powerscheme GUID is invalid: %ls\n", guid_string); + "Initial powerscheme GUID is invalid: %s\n", debugstr_guid(initial_powerprof)); } /* not testing setting 2nd parameter to NULL since that's an access violation on windows */ @@ -68,7 +66,8 @@
/* Test PowerSetActiveScheme with null */ ret = PowerSetActiveScheme(NULL,NULL); - ok(ret == ERROR_INVALID_PARAMETER, "PowerSetActiveScheme incorrectly return error code %lu\n", ret); + ok(ret == ERROR_INVALID_PARAMETER, + "PowerSetActiveScheme incorrectly return error code %lu\n", ret);
/* Try to actually change the power profile */ if (IsEqualGUID(initial_powerprof, &GUID_MIN_POWER_SAVINGS)) @@ -79,16 +78,18 @@ { new_powerprof = (GUID *) & GUID_MIN_POWER_SAVINGS; } - StringFromGUID2(new_powerprof,guid_string,sizeof(guid_string)); ret = PowerSetActiveScheme(NULL, new_powerprof); - ok(ret == ERROR_SUCCESS, "PowerSetActiveScheme failed setting to valid power scheme %ls: %lu\n", guid_string, ret); + ok(ret == ERROR_SUCCESS, + "PowerSetActiveScheme failed setting to valid power scheme %s, code: %lu\n", + debugstr_guid(new_powerprof), ret);
/* now try to retrieve it */ ret = PowerGetActiveScheme(NULL, &tmp_powerprof); - ok(ret == ERROR_SUCCESS, "Could not retrieve power scheme after setting it to %ls, code %lu\n", guid_string, ret); - StringFromGUID2(tmp_powerprof, guid_string2, sizeof(guid_string2)); - ok(IsEqualGUID(tmp_powerprof, new_powerprof), "Retrieved incorrect power profile after set: expected %ls, got %ls\n", - guid_string,guid_string2); + ok(ret == ERROR_SUCCESS, + "Could not retrieve power scheme after setting it to %s, code %lu\n", + debugstr_guid(new_powerprof), ret); + ok(IsEqualGUID(tmp_powerprof, new_powerprof), "Retrieved incorrect power profile after set: expected %s, got %s\n", + debugstr_guid(new_powerprof), debugstr_guid(tmp_powerprof)); LocalFree(tmp_powerprof);
/* try to set with non-NULL first parameter */