[ros-diffs] [dchapyshev] 33988: - Small fix DeletePwrScheme - Implement ReadGlobalPwrPolicy - Implement ReadPwrScheme - Implement ValidatePowerPolicies (not fully implemented)

dchapyshev at svn.reactos.org dchapyshev at svn.reactos.org
Mon Jun 16 10:20:22 CEST 2008


Author: dchapyshev
Date: Mon Jun 16 03:20:21 2008
New Revision: 33988

URL: http://svn.reactos.org/svn/reactos?rev=33988&view=rev
Log:
- Small fix DeletePwrScheme
- Implement ReadGlobalPwrPolicy
- Implement ReadPwrScheme
- Implement ValidatePowerPolicies (not fully implemented)

Modified:
    trunk/reactos/dll/win32/powrprof/powrprof.c

Modified: trunk/reactos/dll/win32/powrprof/powrprof.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/powrprof/powrprof.c?rev=33988&r1=33987&r2=33988&view=diff
==============================================================================
--- trunk/reactos/dll/win32/powrprof/powrprof.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/powrprof/powrprof.c [iso-8859-1] Mon Jun 16 03:20:21 2008
@@ -87,7 +87,7 @@
     UINT Current;
     LONG Err;
 
-    swprintf(Buf, L"Control Panel\\PowerCfg\\PowerPolicies\\%u", uiIndex);
+    swprintf(Buf, L"Control Panel\\PowerCfg\\PowerPolicies\\%d", uiIndex);
 
     if (GetActivePwrScheme(&Current))
     {
@@ -118,16 +118,19 @@
 
 
 static BOOLEAN
-POWRPROF_GetUserPowerPolicy(HKEY hKey, LPWSTR szNum,
+POWRPROF_GetUserPowerPolicy(LPWSTR szNum,
                             USER_POWER_POLICY userPwrPolicy,
-                            DWORD *dwName, LPWSTR szName,
-                            DWORD *dwDesc, LPWSTR szDesc)
+                            DWORD dwName, LPWSTR szName,
+                            DWORD dwDesc, LPWSTR szDesc)
 {
     HKEY hSubKey;
     DWORD dwSize;
     LONG Err;
-
-    Err = RegOpenKeyW(hKey, szNum, &hSubKey);
+    WCHAR szPath[MAX_PATH];
+
+    swprintf(szPath, L"Control Panel\\PowerCfg\\PowerPolicies\\%s", szNum);
+
+    Err = RegOpenKeyW(HKEY_CURRENT_USER, szPath, &hSubKey);
     if (Err != ERROR_SUCCESS)
     {
         ERR("RegOpenKeyW failed: %d\n", Err);
@@ -135,8 +138,8 @@
         return FALSE;
     }
 
-    *dwName = MAX_PATH * sizeof(WCHAR);
-    Err = RegQueryValueExW(hSubKey, L"Name", NULL, NULL, (LPBYTE)szName, dwName);
+    dwName = MAX_PATH * sizeof(WCHAR);
+    Err = RegQueryValueExW(hSubKey, L"Name", NULL, NULL, (LPBYTE)szName, &dwName);
     if (Err != ERROR_SUCCESS)
     {
         ERR("RegQueryValueExW failed: %d\n", Err);
@@ -144,8 +147,8 @@
         return FALSE;
     }
 
-    *dwDesc = MAX_PATH * sizeof(WCHAR);
-    Err = RegQueryValueExW(hSubKey, L"Description", NULL, NULL, (LPBYTE)szDesc, dwDesc);
+    dwDesc = MAX_PATH * sizeof(WCHAR);
+    Err = RegQueryValueExW(hSubKey, L"Description", NULL, NULL, (LPBYTE)szDesc, &dwDesc);
     if (Err != ERROR_SUCCESS)
     {
         ERR("RegQueryValueExW failed: %d\n", Err);
@@ -153,7 +156,7 @@
         return FALSE;
     }
 
-    dwSize = sizeof(USER_POWER_POLICY);
+    dwSize = sizeof(userPwrPolicy);
     Err = RegQueryValueExW(hSubKey, L"Policies", NULL, NULL, (LPBYTE)&userPwrPolicy, &dwSize);
     if (Err != ERROR_SUCCESS)
     {
@@ -183,7 +186,7 @@
         return FALSE;
     }
 
-    dwSize = sizeof(MACHINE_POWER_POLICY);
+    dwSize = sizeof(machinePwrPolicy);
     Err = RegQueryValueExW(hKey, L"Policies", NULL, NULL, (LPBYTE)&machinePwrPolicy, &dwSize);
     if (Err != ERROR_SUCCESS)
     {
@@ -201,9 +204,9 @@
 {
     HKEY hKey;
     LONG Err;
-    DWORD dwSize, dwNameSize, dwDescSize, dwIndex = 0;
+    DWORD dwSize, dwNameSize = 0, dwDescSize = 0, dwIndex = 0;
     WCHAR szNum[3 + 1], szName[MAX_PATH], szDesc[MAX_PATH];
-    PPOWER_POLICY pPwrPolicy;
+    PPOWER_POLICY pPwrPolicy = NULL;
     USER_POWER_POLICY userPwrPolicy;
     MACHINE_POWER_POLICY machinePwrPolicy;
 
@@ -227,9 +230,9 @@
 
     while (RegEnumKeyExW(hKey, dwIndex, szNum, &dwSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
     {
-        if (!POWRPROF_GetUserPowerPolicy(hKey, szNum, userPwrPolicy,
-                                         &dwNameSize, szName,
-                                         &dwDescSize, szDesc))
+        if (!POWRPROF_GetUserPowerPolicy(szNum, userPwrPolicy,
+                                         dwNameSize, szName,
+                                         dwDescSize, szDesc))
         {
             RegCloseKey(hKey);
             ReleaseSemaphore(PPRegSemaphore, 1, NULL);
@@ -243,9 +246,8 @@
             return FALSE;
         }
 
-        ZeroMemory(&pPwrPolicy, sizeof(PPOWER_POLICY));
-        pPwrPolicy->user = userPwrPolicy;
-        pPwrPolicy->mach = machinePwrPolicy;
+        memcpy(&pPwrPolicy->user, &userPwrPolicy, sizeof(USER_POWER_POLICY));
+        memcpy(&pPwrPolicy->mach, &machinePwrPolicy, sizeof(MACHINE_POWER_POLICY));
 
         if (!lpfnPwrSchemesEnumProc(_wtoi(szNum), dwNameSize, szName, dwDescSize, szDesc, pPwrPolicy, lParam))
             break;
@@ -446,9 +448,65 @@
 BOOLEAN WINAPI
 ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY pGlobalPowerPolicy)
 {
-    FIXME("(%p) stub!\n", pGlobalPowerPolicy);
-    SetLastError(ERROR_FILE_NOT_FOUND);
-    return FALSE;
+    GLOBAL_MACHINE_POWER_POLICY glMachPwrPolicy;
+    GLOBAL_USER_POWER_POLICY glUserPwrPolicy;
+    HKEY hKey;
+    DWORD dwSize;
+    LONG Err;
+
+    ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+
+    // Getting user global power policy
+    Err = RegOpenKeyW(HKEY_CURRENT_USER, L"Control Panel\\PowerCfg\\GlobalPowerPolicy", &hKey);
+    if (Err != ERROR_SUCCESS)
+    {
+        ERR("RegOpenKeyW failed: %d\n", Err);
+        ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+        SetLastError(Err);
+        return FALSE;
+    }
+
+    dwSize = sizeof(glUserPwrPolicy);
+    Err = RegQueryValueExW(hKey, L"Policies", NULL, NULL, (LPBYTE)&glUserPwrPolicy, &dwSize);
+    if (Err != ERROR_SUCCESS)
+    {
+        ERR("RegQueryValueExW failed: %d\n", Err);
+        ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+        SetLastError(Err);
+        return FALSE;
+    }
+
+    RegCloseKey(hKey);
+
+    // Getting machine global power policy
+    Err = RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Controls Folder\\PowerCfg\\GlobalPowerPolicy", &hKey);
+    if (Err != ERROR_SUCCESS)
+    {
+        ERR("RegOpenKeyW failed: %d\n", Err);
+        ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+        SetLastError(Err);
+        return FALSE;
+    }
+
+    dwSize = sizeof(glMachPwrPolicy);
+    Err = RegQueryValueExW(hKey, L"Policies", NULL, NULL, (LPBYTE)&glMachPwrPolicy, &dwSize);
+    if (Err != ERROR_SUCCESS)
+    {
+        ERR("RegQueryValueExW failed: %d\n", Err);
+        ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+        SetLastError(Err);
+        return FALSE;
+    }
+
+    RegCloseKey(hKey);
+
+    memcpy(&pGlobalPowerPolicy->user, &glUserPwrPolicy, sizeof(GLOBAL_USER_POWER_POLICY));
+    memcpy(&pGlobalPowerPolicy->mach, &glMachPwrPolicy, sizeof(GLOBAL_MACHINE_POWER_POLICY));
+
+    ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+    SetLastError(ERROR_SUCCESS);
+
+    return TRUE;
 }
 
 
@@ -466,9 +524,33 @@
 ReadPwrScheme(UINT uiID,
     PPOWER_POLICY pPowerPolicy)
 {
-    FIXME("(%d, %p) stub!\n", uiID, pPowerPolicy);
-    SetLastError(ERROR_FILE_NOT_FOUND);
-    return FALSE;
+    USER_POWER_POLICY userPwrPolicy;
+    MACHINE_POWER_POLICY machinePwrPolicy;
+    WCHAR szNum[3 + 1]; // max number - 999
+
+    ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+
+    swprintf(szNum, L"%d", uiID);
+
+    if (!POWRPROF_GetUserPowerPolicy(szNum, userPwrPolicy, 0, NULL, 0, NULL))
+    {
+        ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+        return FALSE;
+    }
+
+    if (!POWRPROF_GetMachinePowerPolicy(szNum, machinePwrPolicy))
+    {
+        ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+        return FALSE;
+    }
+
+    memcpy(&pPowerPolicy->user, &userPwrPolicy, sizeof(USER_POWER_POLICY));
+    memcpy(&pPowerPolicy->mach, &machinePwrPolicy, sizeof(MACHINE_POWER_POLICY));
+
+    ReleaseSemaphore(PPRegSemaphore, 1, NULL);
+    SetLastError(ERROR_SUCCESS);
+
+    return TRUE;
 }
 
 
@@ -527,8 +609,28 @@
 BOOLEAN WINAPI
 ValidatePowerPolicies(PGLOBAL_POWER_POLICY pGPP, PPOWER_POLICY pPP)
 {
-    FIXME("(%p, %p) stub!\n", pGPP, pPP);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    GLOBAL_POWER_POLICY pGlobalPowerPolicy;
+    POWER_POLICY pPowerPolicy;
+
+    FIXME("(%p, %p) not fully implemented\n", pGPP, pPP);
+
+    if (!GetCurrentPowerPolicies(&pGlobalPowerPolicy, &pPowerPolicy))
+    {
+        ERR("GetCurrentPowerPolicies(%p, %p) failed\n", pGPP, pPP);
+        return FALSE;
+    }
+
+    if (!pGPP)
+    {
+        memcpy(&pGPP, &pGlobalPowerPolicy, sizeof(GLOBAL_POWER_POLICY));
+    }
+
+    if (!pPP)
+    {
+        memcpy(&pPP, &pPowerPolicy, sizeof(POWER_POLICY));
+    }
+
+    SetLastError(ERROR_SUCCESS);
     return TRUE;
 }
 



More information about the Ros-diffs mailing list