- 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
This commit is contained in:
Hermès Bélusca-Maïto 2016-01-07 19:03:35 +00:00
parent ae0b31a24a
commit 762e2a1af4

View file

@ -608,7 +608,7 @@ SmpRegistryConfigurationTable[] =
{ {
SmpConfigureAllowProtectedRenames, SmpConfigureAllowProtectedRenames,
0, //RTL_QUERY_REGISTRY_DELETE, RTL_QUERY_REGISTRY_DELETE,
L"AllowProtectedRenames", L"AllowProtectedRenames",
NULL, NULL,
REG_DWORD, REG_DWORD,
@ -648,7 +648,7 @@ SmpRegistryConfigurationTable[] =
{ {
SmpConfigureFileRenames, SmpConfigureFileRenames,
0, //RTL_QUERY_REGISTRY_DELETE, RTL_QUERY_REGISTRY_DELETE,
L"PendingFileRenameOperations", L"PendingFileRenameOperations",
&SmpFileRenameList, &SmpFileRenameList,
REG_NONE, REG_NONE,
@ -658,7 +658,7 @@ SmpRegistryConfigurationTable[] =
{ {
SmpConfigureFileRenames, SmpConfigureFileRenames,
0, //RTL_QUERY_REGISTRY_DELETE, RTL_QUERY_REGISTRY_DELETE,
L"PendingFileRenameOperations2", L"PendingFileRenameOperations2",
&SmpFileRenameList, &SmpFileRenameList,
REG_NONE, REG_NONE,
@ -1989,6 +1989,10 @@ SmpProcessFileRenames(VOID)
Status = RtlAdjustPrivilege(SE_RESTORE_PRIVILEGE, TRUE, FALSE, &OldState); Status = RtlAdjustPrivilege(SE_RESTORE_PRIVILEGE, TRUE, FALSE, &OldState);
if (NT_SUCCESS(Status)) HavePrivilege = TRUE; 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 */ /* Process pending files to rename */
Head = &SmpFileRenameList; Head = &SmpFileRenameList;
while (!IsListEmpty(Head)) while (!IsListEmpty(Head))
@ -2073,10 +2077,10 @@ SmpProcessFileRenames(VOID)
InformationClass); InformationClass);
/* Check if we seem to have failed because the file was readonly */ /* Check if we seem to have failed because the file was readonly */
if ((!NT_SUCCESS(Status) && if (!NT_SUCCESS(Status) &&
(InformationClass == FileRenameInformation) && (InformationClass == FileRenameInformation) &&
(Status == STATUS_OBJECT_NAME_COLLISION) && (Status == STATUS_OBJECT_NAME_COLLISION) &&
(Buffer->ReplaceIfExists))) Buffer->ReplaceIfExists)
{ {
/* Open the file for write attribute access this time... */ /* Open the file for write attribute access this time... */
DPRINT1("\nSMSS: '%wZ' => '%wZ' failed - Status == %x, Possible readonly target\n", DPRINT1("\nSMSS: '%wZ' => '%wZ' failed - Status == %x, Possible readonly target\n",