diff --git a/tst/winfsp-tests/create-test.c b/tst/winfsp-tests/create-test.c index 407374a5..eb835cb9 100644 --- a/tst/winfsp-tests/create-test.c +++ b/tst/winfsp-tests/create-test.c @@ -843,7 +843,7 @@ void create_curdir_dotest(ULONG Flags, PWSTR Prefix) Success = SetCurrentDirectoryW(FilePath); ASSERT(Success); - Success = SetCurrentDirectoryW(CurrentDirectory); + Success = RealSetCurrentDirectoryW(CurrentDirectory); ASSERT(Success); memfs_stop(memfs); diff --git a/tst/winfsp-tests/hooks.c b/tst/winfsp-tests/hooks.c index 29c213d1..9e29238d 100644 --- a/tst/winfsp-tests/hooks.c +++ b/tst/winfsp-tests/hooks.c @@ -332,3 +332,17 @@ BOOL WINAPI HookSetVolumeLabelW( MaybeAdjustTraversePrivilege(TRUE); return Success; } + +BOOL WINAPI HookSetCurrentDirectoryW( + LPCWSTR lpPathName) +{ + WCHAR FileNameBuf[FILENAMEBUF_SIZE]; + BOOL Success; + + PrepareFileName(lpPathName, FileNameBuf); + + MaybeAdjustTraversePrivilege(FALSE); + Success = SetCurrentDirectoryW(FileNameBuf); + MaybeAdjustTraversePrivilege(TRUE); + return Success; +} diff --git a/tst/winfsp-tests/winfsp-tests.c b/tst/winfsp-tests/winfsp-tests.c index 25852105..0052d428 100644 --- a/tst/winfsp-tests/winfsp-tests.c +++ b/tst/winfsp-tests/winfsp-tests.c @@ -38,6 +38,9 @@ WCHAR OptShareNameBuf[MAX_PATH], *OptShareName, *OptShareTarget; HANDLE OptNoTraverseToken = 0; LUID OptNoTraverseLuid; +static WCHAR CurrentDirectory[MAX_PATH]; +static PWSTR TestDirectory = L"winfsp-tests"; + static void exiting(void); int mywcscmp(PWSTR a, int alen, PWSTR b, int blen) @@ -252,6 +255,20 @@ int main(int argc, char *argv[]) myrandseed = (unsigned)time(0); + if (NtfsTests) + { + if (!GetCurrentDirectoryW(MAX_PATH, CurrentDirectory)) + ABORT("cannot get test directory"); + + /* create a directory for testing */ + if (!CreateDirectoryW(TestDirectory, 0)) + ABORT("cannot create test directory"); + + /* change into the directory */ + if (!SetCurrentDirectoryW(TestDirectory)) + ABORT("cannot change to test directory"); + } + tlib_run_tests(argc, argv); return 0; } @@ -259,5 +276,12 @@ int main(int argc, char *argv[]) static void exiting(void) { OutputDebugStringA("winfsp-tests: exiting\n"); + + if (NtfsTests) + { + if (SetCurrentDirectoryW(CurrentDirectory)) + RemoveDirectoryW(TestDirectory); + } + RemoveNetShareIfNeeded(); } diff --git a/tst/winfsp-tests/winfsp-tests.h b/tst/winfsp-tests/winfsp-tests.h index 04b3619f..2b5cd9b4 100644 --- a/tst/winfsp-tests/winfsp-tests.h +++ b/tst/winfsp-tests/winfsp-tests.h @@ -28,20 +28,6 @@ #define testalpha(c) ('a' <= ((c) | 0x20) && ((c) | 0x20) <= 'z') #define togglealpha(c) ((c) ^ 0x20) -#if !defined(WINFSP_TESTS_NO_HOOKS) -#define CreateFileW HookCreateFileW -#define CloseHandle HookCloseHandle -#define SetFileAttributesW HookSetFileAttributesW -#define CreateDirectoryW HookCreateDirectoryW -#define DeleteFileW HookDeleteFileW -#define RemoveDirectoryW HookRemoveDirectoryW -#define MoveFileExW HookMoveFileExW -#define FindFirstFileW HookFindFirstFileW -#define FindFirstStreamW HookFindFirstStreamW -#define GetDiskFreeSpaceW HookGetDiskFreeSpaceW -#define GetVolumeInformationW HookGetVolumeInformationW -#define SetVolumeLabelW HookSetVolumeLabelW -#endif HANDLE WINAPI HookCreateFileW( LPCWSTR lpFileName, DWORD dwDesiredAccess, @@ -92,6 +78,28 @@ BOOL WINAPI HookGetVolumeInformationW( BOOL WINAPI HookSetVolumeLabelW( LPCWSTR lpRootPathName, LPCWSTR lpVolumeName); +BOOL WINAPI HookSetCurrentDirectoryW( + LPCWSTR lpPathName); +static inline BOOL RealSetCurrentDirectoryW( + LPCWSTR lpPathName) +{ + return SetCurrentDirectoryW(lpPathName); +} +#if !defined(WINFSP_TESTS_NO_HOOKS) +#define CreateFileW HookCreateFileW +#define CloseHandle HookCloseHandle +#define SetFileAttributesW HookSetFileAttributesW +#define CreateDirectoryW HookCreateDirectoryW +#define DeleteFileW HookDeleteFileW +#define RemoveDirectoryW HookRemoveDirectoryW +#define MoveFileExW HookMoveFileExW +#define FindFirstFileW HookFindFirstFileW +#define FindFirstStreamW HookFindFirstStreamW +#define GetDiskFreeSpaceW HookGetDiskFreeSpaceW +#define GetVolumeInformationW HookGetVolumeInformationW +#define SetVolumeLabelW HookSetVolumeLabelW +#define SetCurrentDirectoryW HookSetCurrentDirectoryW +#endif HANDLE WINAPI ResilientCreateFileW( LPCWSTR lpFileName,