From 762e2a1af41eb83319a4a0936714696cf4f315d2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Thu, 7 Jan 2016 19:03:35 +0000 Subject: [PATCH] [SMSS] - Reenable RTL_QUERY_REGISTRY_DELETE: the "PendingFileRenameOperations(2)" and "AllowProtectedRenames" registry values are deleted after being parsed: we don't retry at every reboot to remove/rename files that were already deleted/renamed. - Remove superfluous parentheses. - Warn a FIXME if SFC-protected file renames are allowed and we are processing file renames (the "protected file renames" stuff is unimplemented atm.) svn path=/trunk/; revision=70530 --- reactos/base/system/smss/sminit.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/reactos/base/system/smss/sminit.c b/reactos/base/system/smss/sminit.c index b0c64901436..4c923ed0867 100644 --- a/reactos/base/system/smss/sminit.c +++ b/reactos/base/system/smss/sminit.c @@ -608,7 +608,7 @@ SmpRegistryConfigurationTable[] = { SmpConfigureAllowProtectedRenames, - 0, //RTL_QUERY_REGISTRY_DELETE, + RTL_QUERY_REGISTRY_DELETE, L"AllowProtectedRenames", NULL, REG_DWORD, @@ -648,7 +648,7 @@ SmpRegistryConfigurationTable[] = { SmpConfigureFileRenames, - 0, //RTL_QUERY_REGISTRY_DELETE, + RTL_QUERY_REGISTRY_DELETE, L"PendingFileRenameOperations", &SmpFileRenameList, REG_NONE, @@ -658,7 +658,7 @@ SmpRegistryConfigurationTable[] = { SmpConfigureFileRenames, - 0, //RTL_QUERY_REGISTRY_DELETE, + RTL_QUERY_REGISTRY_DELETE, L"PendingFileRenameOperations2", &SmpFileRenameList, REG_NONE, @@ -1989,6 +1989,10 @@ SmpProcessFileRenames(VOID) Status = RtlAdjustPrivilege(SE_RESTORE_PRIVILEGE, TRUE, FALSE, &OldState); if (NT_SUCCESS(Status)) HavePrivilege = TRUE; + // FIXME: Handle SFC-protected file renames! + if (SmpAllowProtectedRenames) + DPRINT1("SMSS: FIXME: Handle SFC-protected file renames!\n"); + /* Process pending files to rename */ Head = &SmpFileRenameList; while (!IsListEmpty(Head)) @@ -2073,10 +2077,10 @@ SmpProcessFileRenames(VOID) InformationClass); /* Check if we seem to have failed because the file was readonly */ - if ((!NT_SUCCESS(Status) && + if (!NT_SUCCESS(Status) && (InformationClass == FileRenameInformation) && (Status == STATUS_OBJECT_NAME_COLLISION) && - (Buffer->ReplaceIfExists))) + Buffer->ReplaceIfExists) { /* Open the file for write attribute access this time... */ DPRINT1("\nSMSS: '%wZ' => '%wZ' failed - Status == %x, Possible readonly target\n", -- 2.17.1