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/…
==============================================================================
--- 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)
{