Author: tfaber
Date: Thu Jul  5 20:47:18 2012
New Revision: 56835

URL: http://svn.reactos.org/svn/reactos?rev=56835&view=rev
Log:
[REGEDIT]
- Improve permission acquirement for loading/unloading hives. Patch by Hermes 
Belusca
See issue #7159 for more details.

Modified:
    trunk/reactos/base/applications/regedit/framewnd.c

Modified: trunk/reactos/base/applications/regedit/framewnd.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/regedit/framewnd.c?rev=56835&r1=56834&r2=56835&view=diff
==============================================================================
--- trunk/reactos/base/applications/regedit/framewnd.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/regedit/framewnd.c [iso-8859-1] Thu Jul  5 
20:47:18 2012
@@ -330,12 +330,10 @@
                                  lpszPrivilegeName,
                                  &tp.Privileges[0].Luid))
         {
-            bRet = AdjustTokenPrivileges(hToken,
-                                         FALSE,
-                                         &tp,
-                                         sizeof(tp),
-                                         NULL,
-                                         NULL);
+            bRet = AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);
+
+            if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
+                bRet = FALSE;
         }
 
         CloseHandle(hToken);
@@ -374,16 +372,10 @@
         {
             LONG regLoadResult;
 
-            /* Enable the required privileges */
-            EnablePrivilege(SE_BACKUP_NAME, NULL, TRUE);
+            /* Enable the 'restore' privilege, load the hive, disable the 
privilege */
             EnablePrivilege(SE_RESTORE_NAME, NULL, TRUE);
-
-            /* Load the hive */
             regLoadResult = RegLoadKey(hRootKey, xPath, ofn.lpstrFile);
-
-            /* Disable the privileges */
             EnablePrivilege(SE_RESTORE_NAME, NULL, FALSE);
-            EnablePrivilege(SE_BACKUP_NAME, NULL, FALSE);
 
             if(regLoadResult == ERROR_SUCCESS)
             {
@@ -418,16 +410,10 @@
     /* load and set the caption and flags for dialog */
     LoadString(hInst, IDS_UNLOAD_HIVE, Caption, COUNT_OF(Caption));
 
-    /* Enable the required privileges */
-    EnablePrivilege(SE_BACKUP_NAME, NULL, TRUE);
+    /* Enable the 'restore' privilege, unload the hive, disable the privilege 
*/
     EnablePrivilege(SE_RESTORE_NAME, NULL, TRUE);
-
-    /* Unload the hive */
     regUnloadResult = RegUnLoadKey(hRootKey, pszKeyPath);
-
-    /* Disable the privileges */
     EnablePrivilege(SE_RESTORE_NAME, NULL, FALSE);
-    EnablePrivilege(SE_BACKUP_NAME, NULL, FALSE);
 
     if(regUnloadResult == ERROR_SUCCESS)
     {


Reply via email to