tst: winfsp-tests: ResilientRemoveDirectoryW

This commit is contained in:
Bill Zissimopoulos 2016-10-26 14:36:38 -07:00
parent 8f54152096
commit 205a59dbc6
3 changed files with 30 additions and 1 deletions

View File

@ -208,7 +208,8 @@ BOOL HookRemoveDirectoryW(
PrepareFileName(lpPathName, FileNameBuf); PrepareFileName(lpPathName, FileNameBuf);
MaybeAdjustTraversePrivilege(FALSE); MaybeAdjustTraversePrivilege(FALSE);
Success = RemoveDirectoryW(FileNameBuf); Success = (OptResilient ? ResilientRemoveDirectoryW : RemoveDirectoryW)(
FileNameBuf);
MaybeAdjustTraversePrivilege(TRUE); MaybeAdjustTraversePrivilege(TRUE);
return Success; return Success;
} }

View File

@ -116,6 +116,32 @@ BOOL ResilientDeleteFileW(
return Success; return Success;
} }
BOOL ResilientRemoveDirectoryW(
LPCWSTR lpPathName)
{
BOOL Success;
DWORD LastError;
Success = RemoveDirectoryW(lpPathName);
LastError = GetLastError();
if (Success)
WaitDeletePending(lpPathName);
else
{
for (ULONG MaxTries = DeleteMaxTries;
!Success && ERROR_SHARING_VIOLATION == GetLastError() && 0 != MaxTries;
MaxTries--)
{
Sleep(DeleteSleepTimeout);
Success = RemoveDirectoryW(lpPathName);
}
}
SetLastError(LastError);
return Success;
}
static VOID WaitDeletePending(PCWSTR FileName) static VOID WaitDeletePending(PCWSTR FileName)
{ {
for (ULONG MaxTries = DeleteMaxTries; 0 != MaxTries; MaxTries--) for (ULONG MaxTries = DeleteMaxTries; 0 != MaxTries; MaxTries--)

View File

@ -105,6 +105,8 @@ BOOL ResilientCloseHandle(
HANDLE hObject); HANDLE hObject);
BOOL ResilientDeleteFileW( BOOL ResilientDeleteFileW(
LPCWSTR lpFileName); LPCWSTR lpFileName);
BOOL ResilientRemoveDirectoryW(
LPCWSTR lpPathName);
typedef struct typedef struct
{ {