Index: apitests/kernel32/CMakeLists.txt =================================================================== --- apitests/kernel32/CMakeLists.txt (revision 62724) +++ apitests/kernel32/CMakeLists.txt (working copy) @@ -3,13 +3,18 @@ dosdev.c FindFiles.c GetCurrentDirectory.c + GetDiskFreeSpaceExW.c + GetDiskFreeSpaceW.c GetDriveType.c + GetFileAttributesW.c GetModuleFileName.c + GetVolumeInformationW.c interlck.c lstrcpynW.c MultiByteToWideChar.c SetCurrentDirectory.c SetUnhandledExceptionFilter.c + SetVolumeLabelW.c testlist.c) add_executable(kernel32_apitest ${SOURCE}) Index: apitests/kernel32/GetDiskFreeSpaceExW.c =================================================================== --- apitests/kernel32/GetDiskFreeSpaceExW.c (revision 0) +++ apitests/kernel32/GetDiskFreeSpaceExW.c (working copy) @@ -0,0 +1,148 @@ + /* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Tests for the GetDiskFreeSpaceW API + * PROGRAMMER: Víctor Martínez Calvo (vicmarcal@gmail.com) + */ +#include + +#define WIN32_NO_STATUS +#include +#include + + /*Notes: + * Tests expects the following: + * - "C:\" drive. + * - "C:\Program Files" folder. + * - A "M:\" missing. + * + * Otherwise these tests won't work as expected. + */ + +START_TEST(GetDiskFreeSpaceExW) +{ + PWCHAR lpEmpty = L""; + PWCHAR lpExistant = L"C:\\"; + PWCHAR lpBrokenExistant = L"C:"; + PWCHAR lpRoot = L"\\\\?\\C:\\"; + PWCHAR lpRoot2 = L"\\\\.\\C:\\"; + PWCHAR lpNExistant = L"M:\\"; + PWCHAR lpBrokenNExistant = L"M:"; + + PWCHAR lpRootPathName = L"C:\\Program Files\\"; + PWCHAR lpDirNExistant = L"C:\\foobar\\"; + PWCHAR lpRootPathNameNot = L"C:\\Program Files"; + PWCHAR lpDirNExistantNot = L"C:\\foobar"; + + + ULARGE_INTEGER FreeBytesAvailable; + ULARGE_INTEGER TotalNumberOfBytes; + ULARGE_INTEGER TotalNumberOfFreeBytes; + + BOOL status; + + //Test L"". + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpEmpty, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status == 0, "GetDiskFreeSpaceW failed when %S \n", lpEmpty); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\". + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpExistant, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpBrokenExistant, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW failed when %S \n",lpBrokenExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"\\\\?\\C:\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpRoot, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpRoot); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"\\\\.\\C:\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpRoot2, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpRoot2); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"M:\\" + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpNExistant, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status == 0, "GetDiskFreeSpaceW should fail when %S \n",lpNExistant); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test L"M:" + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpBrokenNExistant, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status == 0, "GetDiskFreeSpaceW should fail when %S \n",lpBrokenNExistant); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test Current Drive"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(NULL, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW has failed of retrieving info from current Drive"); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test Current Drive "; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(NULL, NULL, NULL, NULL); + ok(status, "GetDiskFreeSpaceW has of retrieving info from current Drive"); + ok(GetLastError() == 0xdeadbeef, "Expected o failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\Program Files\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpRootPathName, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpRootPathName); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\foobar\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpDirNExistant, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status == 0, "GetDiskFreeSpaceW should fail when %S \n", lpDirNExistant); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\Program Files"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpRootPathNameNot, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpRootPathNameNot); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\foobar"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpDirNExistantNot, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status == 0, "GetDiskFreeSpaceW should fail when %S \n", lpDirNExistantNot); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + + //Test NULL; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpExistant, NULL, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW has failed of retrieving info from current Drive \n"); + ok(GetLastError() == 0xdeadbeef, "Expected no error set, Error returned: 0x%x \n", GetLastError()); + + //Test NULL"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpExistant, &FreeBytesAvailable, NULL, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW has failed when %S \n",lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no error set, Error returned: 0x%x \n", GetLastError()); + + //Test NULL"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpExistant, &FreeBytesAvailable, &TotalNumberOfBytes, NULL); + ok(status, "GetDiskFreeSpaceW has failed when %S \n",lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no error set, Error returned: 0x%x \n", GetLastError()); + + //Test NULL"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceExW(lpExistant, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes); + ok(status, "GetDiskFreeSpaceW has failed when %S \n",lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no error set, Error returned: 0x%x \n", GetLastError()); + + +} Index: apitests/kernel32/GetDiskFreeSpaceW.c =================================================================== --- apitests/kernel32/GetDiskFreeSpaceW.c (revision 0) +++ apitests/kernel32/GetDiskFreeSpaceW.c (working copy) @@ -0,0 +1,148 @@ + /* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Tests for the GetDiskFreeSpaceW API + * PROGRAMMER: Víctor Martínez Calvo (vicmarcal@gmail.com) + */ +#include + +#define WIN32_NO_STATUS +#include +#include + + /*Notes: + * Tests expects the following: + * - "C:\" drive. + * - "C:\Program Files" folder. + * - A "M:\" missing. + * + * Otherwise these tests won't work as expected. + */ + +START_TEST(GetDiskFreeSpaceW) +{ + PWCHAR lpEmpty = L""; + PWCHAR lpExistant = L"C:\\"; + PWCHAR lpBrokenExistant = L"C:"; + PWCHAR lpRoot = L"\\\\?\\C:\\"; + PWCHAR lpRoot2 = L"\\\\.\\C:\\"; + PWCHAR lpNExistant = L"M:\\"; + PWCHAR lpBrokenNExistant = L"M:"; + + PWCHAR lpRootPathName = L"C:\\Program Files\\"; + PWCHAR lpDirNExistant = L"C:\\foobar\\"; + PWCHAR lpRootPathNameNot = L"C:\\Program Files"; + PWCHAR lpDirNExistantNot = L"C:\\foobar"; + + DWORD SectorsPerCluster; + DWORD BytesPerSector; + DWORD NumberOfFreeClusters; + DWORD TotalNumberOfClusters; + BOOL status; + + //Test L"". + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpEmpty, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status == 0, "GetDiskFreeSpaceW failed when %S \n", lpEmpty); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\". + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpExistant, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpBrokenExistant, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW failed when %S \n",lpBrokenExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"\\\\?\\C:\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpRoot, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpRoot); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"\\\\.\\C:\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpRoot2, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpRoot2); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + + //Test L"M:\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpNExistant, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status == 0, "GetDiskFreeSpaceW should fail when %S \n",lpBrokenNExistant); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test L"M:"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpBrokenNExistant, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status == 0, "GetDiskFreeSpaceW should fail when %S \n",lpBrokenNExistant); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test current drive"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(NULL, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW has failed of retrieving info from current Drive"); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test current drive "; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(NULL, NULL, NULL, NULL, NULL); + ok(status, "GetDiskFreeSpaceW has of retrieving info from current Drive"); + ok(GetLastError() == 0xdeadbeef, "Expected o failure, Error returned: 0x%x \n", GetLastError()); + + + //Test L"C:\\Program Files\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpRootPathName, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpRootPathName); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\foobar\\"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpDirNExistant, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status == 0, "GetDiskFreeSpaceW should fail when %S \n", lpDirNExistant); + ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\Program Files"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpRootPathNameNot, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW failed when %S \n", lpRootPathNameNot); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned: 0x%x \n", GetLastError()); + + //Test L"C:\\foobar"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpDirNExistantNot, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status == 0, "GetDiskFreeSpaceW should fail when %S \n", lpDirNExistantNot); + ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, Error returned: 0x%x \n", GetLastError()); + + //Test NULL; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpExistant, NULL, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW has failed when %S \n",lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no error set, Error returned: 0x%x \n", GetLastError()); + + //Test NULL"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpExistant, &SectorsPerCluster, NULL, &NumberOfFreeClusters, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW has failed when %S \n",lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no error set, Error returned: 0x%x \n", GetLastError()); + + //Test NULL"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpExistant, &SectorsPerCluster, &BytesPerSector, NULL, &TotalNumberOfClusters); + ok(status, "GetDiskFreeSpaceW has failed when %S \n",lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no error set, Error returned: 0x%x \n", GetLastError()); + + //Test NULL"; + SetLastError(0xdeadbeef); + status = GetDiskFreeSpaceW(lpExistant, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, NULL); + ok(status, "GetDiskFreeSpaceW has failed when %S \n",lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no error set, Error returned: 0x%x \n", GetLastError()); + + +} Index: apitests/kernel32/GetFileAttributesW.c =================================================================== --- apitests/kernel32/GetFileAttributesW.c (revision 0) +++ apitests/kernel32/GetFileAttributesW.c (working copy) @@ -0,0 +1,118 @@ +/* + * PROJECT: ReactOS API Tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: GetFileAttributesW tests + * PROGRAMMER: Víctor Martínez Calvo + */ + +#define WIN32_NO_STATUS +#include +#include +#include + +START_TEST(GetFileAttributesW) +{ + PWCHAR lpEmpty = L""; + PWCHAR lpRoot = L"C:\\"; + PWCHAR lpRootNot = L"C:"; + PWCHAR lpExtRoot = L"\\\\?\\C:\\"; + PWCHAR lpExtRoot2 = L"\\\\.\\C:\\"; + PWCHAR lpFile53 = L"files.txt"; + PWCHAR lpFileT53 = L"\files.txt"; + PWCHAR lpFile54 = L"files.xxxx"; + PWCHAR lpFileT54 = L"\files.xxxx"; + PWCHAR lpBadDrive = L"M:\\"; + PWCHAR lpBadDriveNot= L"M:"; + + PWCHAR lpRootPathName = L"C:\\Program Files\\"; + PWCHAR lpRootPathNamesS = L"'C:\\Program Files\\'"; + PWCHAR lpDirNExistant = L"C:\\foobar\\"; + PWCHAR lpDirNExistantNot = L"C:\\foobar"; + PWCHAR lpRootPathNameNot = L"C:\\Program Files"; + PWCHAR lpRootPathNameNotS = L"'C:\\Program Files'"; + + + DWORD attr; + + SetLastError (0xdeadbeef); + attr = GetFileAttributesW(lpEmpty); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected -1 when called %S returned %d \n", lpEmpty, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpRoot); + ok(GetLastError() == 0xdeadbeef, "Expected no error, Error returned 0x%x \n", GetLastError()); + ok(attr == 22, "Expected 22 when called %S returned %d \n", lpRoot, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpRootNot); + ok(GetLastError() == 0xdeadbeef, "Expected no error, Error returned 0x%x \n", GetLastError()); + ok(attr == 16, "Expected 16 when called %S returned %d \n", lpRootNot, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpExtRoot); + ok(GetLastError() == 0xdeadbeef, "Expected no errors, Error returned 0x%x \n", GetLastError()); + ok(attr == 22, "Expected 22 when called %S returned %d \n", lpExtRoot, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpExtRoot2); + ok(GetLastError() == 0xdeadbeef, "Expected no errors, Error returned 0x%x \n", GetLastError()); + ok(attr == 22, "Expected 22 when called %S returned %d \n", lpExtRoot2, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpFile53); + ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpFile53, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpFileT53); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpFileT53, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpFile54); + ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpFile54, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpFileT54); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpFileT54, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpBadDrive); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpBadDrive, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpBadDriveNot); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpBadDriveNot, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpRootPathName); + ok(GetLastError() == 0xdeadbeef, "Expected no errors, Error returned 0x%x \n", GetLastError()); + ok(attr == 17, "Expected 12 when called %S returned %d \n", lpRootPathName, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpRootPathNamesS); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpRootPathNamesS, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpDirNExistant); + ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpDirNExistant, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpRootPathNameNot); + ok(GetLastError() == 0xdeadbeef, "Expected no error, Error returned 0x%x \n", GetLastError()); + ok(attr == 17, "Expected 17 when called %S returned %d \n", lpRootPathNameNot, attr); + + SetLastError(0xdeadbeef); + attr = GetFileAttributesW(lpRootPathNameNotS); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, Error returned 0x%x \n", GetLastError()); + ok(attr == -1, "Expected 12 when called %S returned %d \n", lpRootPathNameNotS, attr); + + +} \ No newline at end of file Index: apitests/kernel32/GetVolumeInformationW.c =================================================================== --- apitests/kernel32/GetVolumeInformationW.c (revision 0) +++ apitests/kernel32/GetVolumeInformationW.c (working copy) @@ -0,0 +1,184 @@ + /* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Tests for the GetDiskFreeSpaceW API + * PROGRAMMER: Víctor Martínez Calvo (vicmarcal@gmail.com) + */ +#include + +#define WIN32_NO_STATUS +#include +#include + + /*Notes: + * Tests expects the following: + * - "C:\" drive. + * - "C:\Program Files" folder. + * - A "M:\" missing. + * - A non-existant "C:\foobar" folder + * Otherwise these tests won't work as expected. + */ + +START_TEST(GetVolumeInformationW) +{ + PWCHAR lpEmpty = L""; + PWCHAR lpExistant = L"C:\\"; + PWCHAR lpBrokenExistant = L"C:"; + PWCHAR lpRoot = L"\\\\?\\C:\\"; + PWCHAR lpRoot2 = L"\\\\.\\C:\\"; + PWCHAR lpNExistant = L"M:\\"; + PWCHAR lpBrokenNExistant = L"M:"; + + + PWCHAR lpRootPathName = L"C:\\Program Files\\"; + PWCHAR lpDirNExistant = L"C:\\foobar\\"; + PWCHAR lpRootPathNameNot = L"C:\\Program Files"; + PWCHAR lpDirNExistantNot = L"C:\\foobar"; + + + WCHAR VolumeNameBuffer[MAX_PATH]; + DWORD VolumeSerialNumber; + DWORD MaximumComponentLength; + DWORD FileSystemFlags; + WCHAR FileSystemNameBuffer[MAX_PATH]; + + BOOL status; + + //Test "" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpEmpty, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0,"GetVolumeInformationW failed when %S \n", lpEmpty); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + + //Test "C:\" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status,"GetVolumeInformationW failed when %S \n", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + + //Test insufficient size VolumeNameBuffer + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpExistant, VolumeNameBuffer, 0, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0, "GetVolumeInformationW should fail when provided insufficient VolumeNameBuffer size buffer \n"); + ok(GetLastError() == ERROR_BAD_LENGTH, "Expected ERROR_BAD_LENGTH, Error returned 0x%x \n", GetLastError()); + + //Test insufficient size FileSystemNameBuffer" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, 0); + ok(status == 0, "GetVolumeInformationW should fail when provided insufficient FileSystemNameBuffer size buffer \n"); + ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, Error returned 0x%x \n", GetLastError()); + + //Test L"C:" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpBrokenExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0, "GetVolumeInformationW should fail when %S \n", lpBrokenExistant); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, Error returned 0x%x \n", GetLastError()); + + //Test L"\\\\?\\C:\\" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpRoot, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status,"GetVolumeInformationW failed when %S \n", lpRoot); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + + //Test L"\\\\.\\C:\\" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpRoot2, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status,"GetVolumeInformationW failed when %S \n", lpRoot2); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + + //Test "M:\" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpNExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0, "GetVolumeInformationW should fail when %S \n", lpNExistant); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + + //Test L"M:" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW( lpBrokenNExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0,"GetVolumeInformationW should fail when %S \n", lpBrokenNExistant); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + + + //Test "NULL". Gets CurrentDirectory volume information. + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(NULL, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status, "GetVolumeInformationW failed when %S \n", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + + //Test L"C:\\Program Files\\" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpRootPathName, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0, "GetVolumeInformationW should fail when %S \n", lpRootPathName); + ok(GetLastError() == ERROR_DIR_NOT_ROOT, "Expected ERROR_DIR_NOT_ROOT, Error returned 0x%x \n", GetLastError()); + + //Test L"C:\\foobar\\" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpDirNExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0, "GetVolumeInformationW should fail when %S \n", lpDirNExistant); + ok(GetLastError() == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, Error returned 0x%x \n", GetLastError()); + + //Test L"C:\\Program Files" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpRootPathNameNot, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0, "GetVolumeInformationW should fail when %S \n", lpRootPathNameNot); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, Error returned 0x%x \n", GetLastError()); + + //Test L"C:\\foobar" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpDirNExistantNot, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status == 0, "GetVolumeInformationW should fail when %S \n", lpDirNExistantNot); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, Error returned 0x%x \n", GetLastError()); + + + //Test NULL VolumeNameBuffer + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpExistant, NULL, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status, "GetVolumeInformationW failed when %S \n", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + + + //Test NULL VolumeSerialNumber" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpExistant, VolumeNameBuffer, MAX_PATH, + NULL, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status, "GetVolumeInformationW failed when %S \n", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + + + //Test NULL MaximumComponentLength" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, NULL, &FileSystemFlags, FileSystemNameBuffer, MAX_PATH); + ok(status, "GetVolumeInformationW failed when %S", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + + //Test NULL FileSystemFlags" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, NULL, FileSystemNameBuffer, MAX_PATH); + ok(status, "GetVolumeInformationW failed when %S \n", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + + //Test NULL FileSystemNameBuffer" + SetLastError(0xdeadbeef); + status = GetVolumeInformationW(lpExistant, VolumeNameBuffer, MAX_PATH, + &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, NULL, MAX_PATH); + ok(status, "GetVolumeInformationW failed when %S", lpExistant); + ok(GetLastError() == 0xdeadbeef, "Expected no failure, Error returned 0x%x \n", GetLastError()); + +} Index: apitests/kernel32/SetVolumeLabelW.c =================================================================== --- apitests/kernel32/SetVolumeLabelW.c (revision 0) +++ apitests/kernel32/SetVolumeLabelW.c (working copy) @@ -0,0 +1,164 @@ + /* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Tests for the SetVolumeLabelW api + * PROGRAMMER: Víctor Martínez Calvo (vicmarcal@gmail.com) + */ +#include + +#define WIN32_NO_STATUS +#include +#include + + /*Notes: + * Tests expects the following: + * - "C:\" drive + * - "M:\" drive doesn't exist + * + * Otherwise the tests won't work as expected. + */ + +START_TEST(SetVolumeLabelW) +{ + + PWCHAR lpEmpty = L""; + PWCHAR lpRootPathName = L"C:\\"; + PWCHAR lpRootBadName = L"C:"; + PWCHAR lpRoot = L"\\\\?\\C:\\"; + PWCHAR lpRoot2 = L"\\\\.\\C:\\"; + PWCHAR lpVolumeName = L"NewLabel"; + PWCHAR lpVolumeName2 = L"NewLabel2"; + PWCHAR lpInexistentDrive = L"M:\\"; + PWCHAR lpBadPathName = L"M:"; + + BOOL status; + + WCHAR wszLabelName[MAX_PATH]; + + // Try to set "NewLabel" to "" Volume... + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpEmpty, lpVolumeName); + ok(status == 0, "SetVolumeLabelW expected failure when %S\n", lpEmpty); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, obtained 0x%lx \n", GetLastError()); + + //Try to reset the label of current Volume. + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpEmpty, NULL); + ok(status == 0, "SetVolumeLabelW should have failed to reset label when %S \n", lpEmpty); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, obtained 0x%lx \n", GetLastError()); + + //Set "NewLabel" to C:\ Volume... + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpRootPathName, lpVolumeName); + ok(status != 0, "SetVolumeLabelW failed to set a label to %S\n", lpRootPathName); + ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, obtained 0x%lx \n", GetLastError()); + + GetVolumeInformationW(NULL, wszLabelName, MAX_PATH, NULL, NULL, NULL, NULL, 0); + ok(wcscmp(lpVolumeName, wszLabelName) == 0, "Label name incorrectly set. Expected: %S , Returned: %S \n", lpVolumeName, wszLabelName); + + //...and then reset the label of current Volume. + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpRootPathName, NULL); + ok(status != 0, "SetVolumeLabelW failed to reset label to %S\n", lpRootPathName); + ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, obtained 0x%lx \n", GetLastError()); + + GetVolumeInformationW(NULL, wszLabelName, MAX_PATH, NULL, NULL, NULL, NULL, 0); + ok( wcslen(wszLabelName)== 0, "Label name incorrectly reset. Returned: %S \n", wszLabelName); + + //Set "NewLabel2" to \\\\?\\C:\\ Volume... + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpRoot, lpVolumeName2); + ok(status != 0, "SetVolumeLabelW failed to set a label to %S\n", lpRoot); + ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, obtained 0x%lx \n", GetLastError()); + + GetVolumeInformationW(NULL, wszLabelName, MAX_PATH, NULL, NULL, NULL, NULL, 0); + ok(wcscmp(lpVolumeName2, wszLabelName) == 0, "Label name incorrectly set. Expected: %S , Returned: %S \n", lpVolumeName2, wszLabelName); + + //...and then reset the label of current Volume. + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpRoot, NULL); + ok(status != 0, "SetVolumeLabelW failed to reset label to %S\n", lpRoot); + ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, obtained 0x%lx \n", GetLastError()); + + GetVolumeInformationW(NULL, wszLabelName, MAX_PATH, NULL, NULL, NULL, NULL, 0); + ok( wcslen(wszLabelName)== 0, "Label name incorrectly reset. Returned: %S \n", wszLabelName); + + //Set "NewLabel" to \\\\.\\C:\\ Volume... + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpRoot2, lpVolumeName); + ok(status != 0, "SetVolumeLabelW failed to set a label to %S\n", lpRoot2); + ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, obtained 0x%lx \n", GetLastError()); + + GetVolumeInformationW(NULL, wszLabelName, MAX_PATH, NULL, NULL, NULL, NULL, 0); + ok(wcscmp(lpVolumeName, wszLabelName) == 0, "Label name incorrectly set. Expected: %S , Returned: %S \n", lpVolumeName, wszLabelName); + + //...and then reset the label of current Volume. + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpRoot2, NULL); + ok(status != 0, "SetVolumeLabelW failed to reset label to CurrentDirectory drive\n"); + ok(GetLastError() == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, obtained 0x%lx \n", GetLastError()); + + GetVolumeInformationW(NULL, wszLabelName, MAX_PATH, NULL, NULL, NULL, NULL, 0); + ok( wcslen(wszLabelName)== 0, "Label name incorrectly reset. Returned: %S \n", wszLabelName); + + //Set "NewLabel" to current Volume... + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(NULL, lpVolumeName); + ok(status != 0, "SetVolumeLabelW failed to set a label when NULL\n"); + ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, obtained 0x%lx \n", GetLastError()); + + GetVolumeInformationW(NULL, wszLabelName, MAX_PATH, NULL, NULL, NULL, NULL, 0); + ok(wcscmp(lpVolumeName, wszLabelName) == 0, "Label name incorrectly set. Expected:%S , Returned: %S \n", lpVolumeName, wszLabelName); + + //...and then reset the label of current Volume + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(NULL, NULL); + ok(status != 0, "SetVolumeLabelW failed to reset label \n"); + ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, obtained 0x%lx \n", GetLastError()); + + GetVolumeInformationW(NULL, wszLabelName, MAX_PATH, NULL, NULL, NULL, NULL, 0); + ok( wcslen(wszLabelName)== 0, "Label name incorrectly reset. Returned: %S \n", wszLabelName); + + + //Try to set "NewLabel" to "C:" + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpRootBadName, lpVolumeName); + ok(status == 0, "SetVolumeLabelW should have failed to set a label when %S \n", lpRootBadName); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, obtained 0x%lx \n", GetLastError()); + + + //Try to reset the label of "C:" + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpRootBadName, NULL); + ok(status == 0, "SetVolumeLabelW should have failed to reset label when %S \n", lpRootBadName); + ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, obtained 0x%lx \n", GetLastError()); + + + //Try to set "NewLabel" to inexistant "M:\". + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpInexistentDrive, lpVolumeName); + ok(status == 0, "SetVolumeLabelW should have have failed to set a label when %S \n", lpInexistentDrive); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, obtained 0x%lx \n", GetLastError()); + + //Try to reset label to inexistant "M:\". + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpInexistentDrive, NULL); + ok(status == 0, "SetVolumeLabelW should have failed to reset label when %S \n", lpInexistentDrive); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, obtained 0x%lx \n", GetLastError()); + + + //Try to set "NewLabel" to inexistant "M:". + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpBadPathName, lpVolumeName); + ok(status == 0, "SetVolumeLabelW should have failed to set a label when %S \n", lpBadPathName); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, obtained 0x%lx \n", GetLastError()); + + //Try to reset label to inexistant "M:". + SetLastError(0xdeadbeef); + status = SetVolumeLabelW(lpBadPathName, NULL); + ok(status == 0, "SetVolumeLabelW should have failed to reset label when %S \n", lpBadPathName); + ok(GetLastError() == ERROR_PATH_NOT_FOUND, "Expected ERROR_PATH_NOT_FOUND, obtained 0x%lx \n", GetLastError()); + + + +} Index: apitests/kernel32/testlist.c =================================================================== --- apitests/kernel32/testlist.c (revision 62724) +++ apitests/kernel32/testlist.c (working copy) @@ -6,26 +6,36 @@ extern void func_dosdev(void); extern void func_FindFiles(void); extern void func_GetCurrentDirectory(void); +extern void func_GetDiskFreeSpaceExW(void); +extern void func_GetDiskFreeSpaceW(void); extern void func_GetDriveType(void); +extern void func_GetFileAttributesW(void); extern void func_GetModuleFileName(void); +extern void func_GetVolumeInformationW(void); extern void func_interlck(void); extern void func_lstrcpynW(void); extern void func_MultiByteToWideChar(void); extern void func_SetCurrentDirectory(void); extern void func_SetUnhandledExceptionFilter(void); +extern void func_SetVolumeLabelW(void); const struct test winetest_testlist[] = { { "dosdev", func_dosdev }, { "FindFiles", func_FindFiles }, { "GetCurrentDirectory", func_GetCurrentDirectory }, + { "GetDiskFreeSpaceExW", func_GetDiskFreeSpaceExW }, + { "GetDiskFreeSpaceW", func_GetDiskFreeSpaceW }, { "GetDriveType", func_GetDriveType }, + { "GetFileAttributesW", func_GetFileAttributesW }, { "GetModuleFileName", func_GetModuleFileName }, + { "GetVolumeInformationW", func_GetVolumeInformationW }, { "interlck", func_interlck }, { "lstrcpynW", func_lstrcpynW }, { "MultiByteToWideChar", func_MultiByteToWideChar }, { "SetCurrentDirectory", func_SetCurrentDirectory }, { "SetUnhandledExceptionFilter", func_SetUnhandledExceptionFilter}, + { "SetVolumeLabelW", func_SetVolumeLabelW}, { 0, 0 } };