From 8f54152096a9659f7a1a8a6b4c1a4ded00d51b7b Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Wed, 26 Oct 2016 13:59:21 -0700 Subject: [PATCH] tst: winfsp-tests: WIP --- tst/winfsp-tests/hooks.c | 69 +++++++++++++++++++++++++++++++++ tst/winfsp-tests/winfsp-tests.h | 21 ++++++++++ 2 files changed, 90 insertions(+) diff --git a/tst/winfsp-tests/hooks.c b/tst/winfsp-tests/hooks.c index 094f0378..5cdee439 100644 --- a/tst/winfsp-tests/hooks.c +++ b/tst/winfsp-tests/hooks.c @@ -262,3 +262,72 @@ HANDLE HookFindFirstStreamW( MaybeAdjustTraversePrivilege(TRUE); return Handle; } + +BOOL HookGetDiskFreeSpaceW( + LPCWSTR lpRootPathName, + LPDWORD lpSectorsPerCluster, + LPDWORD lpBytesPerSector, + LPDWORD lpNumberOfFreeClusters, + LPDWORD lpTotalNumberOfClusters) +{ + WCHAR FileNameBuf[FILENAMEBUF_SIZE]; + BOOL Success; + + PrepareFileName(lpRootPathName, FileNameBuf); + + MaybeAdjustTraversePrivilege(FALSE); + Success = GetDiskFreeSpaceW( + FileNameBuf, + lpSectorsPerCluster, + lpBytesPerSector, + lpNumberOfFreeClusters, + lpTotalNumberOfClusters); + MaybeAdjustTraversePrivilege(TRUE); + return Success; +} + +BOOL HookGetVolumeInformationW( + LPCWSTR lpRootPathName, + LPWSTR lpVolumeNameBuffer, + DWORD nVolumeNameSize, + LPDWORD lpVolumeSerialNumber, + LPDWORD lpMaximumComponentLength, + LPDWORD lpFileSystemFlags, + LPWSTR lpFileSystemNameBuffer, + DWORD nFileSystemNameSize) +{ + WCHAR FileNameBuf[FILENAMEBUF_SIZE]; + BOOL Success; + + PrepareFileName(lpRootPathName, FileNameBuf); + + MaybeAdjustTraversePrivilege(FALSE); + Success = GetVolumeInformationW( + FileNameBuf, + lpVolumeNameBuffer, + nVolumeNameSize, + lpVolumeSerialNumber, + lpMaximumComponentLength, + lpFileSystemFlags, + lpFileSystemNameBuffer, + nFileSystemNameSize); + MaybeAdjustTraversePrivilege(TRUE); + return Success; +} + +BOOL HookSetVolumeLabelW( + LPCWSTR lpRootPathName, + LPCWSTR lpVolumeName) +{ + WCHAR FileNameBuf[FILENAMEBUF_SIZE]; + BOOL Success; + + PrepareFileName(lpRootPathName, FileNameBuf); + + MaybeAdjustTraversePrivilege(FALSE); + Success = SetVolumeLabelW( + FileNameBuf, + lpVolumeName); + MaybeAdjustTraversePrivilege(TRUE); + return Success; +} diff --git a/tst/winfsp-tests/winfsp-tests.h b/tst/winfsp-tests/winfsp-tests.h index cda2cebb..e8e89905 100644 --- a/tst/winfsp-tests/winfsp-tests.h +++ b/tst/winfsp-tests/winfsp-tests.h @@ -38,6 +38,9 @@ #define MoveFileExW HookMoveFileExW #define FindFirstFileW HookFindFirstFileW #define FindFirstStreamW HookFindFirstStreamW +#define GetDiskFreeSpaceW HookGetDiskFreeSpaceW +#define GetVolumeInformationW HookGetVolumeInformationW +#define SetVolumeLabelW HookSetVolumeLabelW #endif HANDLE HookCreateFileW( LPCWSTR lpFileName, @@ -71,6 +74,24 @@ HANDLE HookFindFirstStreamW( STREAM_INFO_LEVELS InfoLevel, LPVOID lpFindStreamData, DWORD dwFlags); +BOOL HookGetDiskFreeSpaceW( + LPCWSTR lpRootPathName, + LPDWORD lpSectorsPerCluster, + LPDWORD lpBytesPerSector, + LPDWORD lpNumberOfFreeClusters, + LPDWORD lpTotalNumberOfClusters); +BOOL HookGetVolumeInformationW( + LPCWSTR lpRootPathName, + LPWSTR lpVolumeNameBuffer, + DWORD nVolumeNameSize, + LPDWORD lpVolumeSerialNumber, + LPDWORD lpMaximumComponentLength, + LPDWORD lpFileSystemFlags, + LPWSTR lpFileSystemNameBuffer, + DWORD nFileSystemNameSize); +BOOL HookSetVolumeLabelW( + LPCWSTR lpRootPathName, + LPCWSTR lpVolumeName); HANDLE ResilientCreateFileW( LPCWSTR lpFileName,