/*********************************************************************** * SetupQuerySpaceRequiredOnDriveA (SETUPAPI.@) */ BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC DiskSpace, LPCSTR DriveSpec, LONGLONG *SpaceRequired, PVOID Reserved1, UINT Reserved2) { DWORD len; LPWSTR DriveSpecW; BOOL ret; /* The parameter validation checks are in a different order from the * Unicode variant of SetupQuerySpaceRequiredOnDrive. */ if (!DriveSpec) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } if (!DiskSpace) { SetLastError(ERROR_INVALID_HANDLE); return FALSE; } len = MultiByteToWideChar(CP_ACP, 0, DriveSpec, -1, NULL, 0); DriveSpecW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); if (!DriveSpecW) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } MultiByteToWideChar(CP_ACP, 0, DriveSpec, -1, DriveSpecW, len); ret = SetupQuerySpaceRequiredOnDriveW(DiskSpace, DriveSpecW, SpaceRequired, Reserved1, Reserved2); HeapFree(GetProcessHeap(), 0, DriveSpecW); return ret; }
static void test_SetupQuerySpaceRequiredOnDriveW(void) { static const WCHAR emptyW[] = {0}; BOOL ret; HDSKSPC handle; LONGLONG space; SetLastError(0xdeadbeef); ret = SetupQuerySpaceRequiredOnDriveW(NULL, NULL, NULL, NULL, 0); if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) { win_skip("SetupQuerySpaceRequiredOnDriveW is not available\n"); return; } ok(!ret, "Expected SetupQuerySpaceRequiredOnDriveW to return FALSE, got %d\n", ret); ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected GetLastError() to return ERROR_INVALID_HANDLE, got %u\n", GetLastError()); SetLastError(0xdeadbeef); space = 0xdeadbeef; ret = SetupQuerySpaceRequiredOnDriveW(NULL, NULL, &space, NULL, 0); ok(!ret, "Expected SetupQuerySpaceRequiredOnDriveW to return FALSE, got %d\n", ret); ok(space == 0xdeadbeef, "Expected output space parameter to be untouched\n"); ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected GetLastError() to return ERROR_INVALID_HANDLE, got %u\n", GetLastError()); SetLastError(0xdeadbeef); ret = SetupQuerySpaceRequiredOnDriveW(NULL, emptyW, NULL, NULL, 0); ok(!ret, "Expected SetupQuerySpaceRequiredOnDriveW to return FALSE, got %d\n", ret); ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected GetLastError() to return ERROR_INVALID_HANDLE, got %u\n", GetLastError()); SetLastError(0xdeadbeef); space = 0xdeadbeef; ret = SetupQuerySpaceRequiredOnDriveW(NULL, emptyW, &space, NULL, 0); ok(!ret, "Expected SetupQuerySpaceRequiredOnDriveW to return FALSE, got %d\n", ret); ok(space == 0xdeadbeef, "Expected output space parameter to be untouched\n"); ok(GetLastError() == ERROR_INVALID_HANDLE, "Expected GetLastError() to return ERROR_INVALID_HANDLE, got %u\n", GetLastError()); handle = SetupCreateDiskSpaceListA(NULL, 0, 0); ok(handle != NULL, "Expected SetupCreateDiskSpaceListA to return a valid handle, got NULL\n"); SetLastError(0xdeadbeef); ret = SetupQuerySpaceRequiredOnDriveW(handle, NULL, NULL, NULL, 0); ok(!ret, "Expected SetupQuerySpaceRequiredOnDriveW to return FALSE, got %d\n", ret); ok(GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_INVALID_DRIVE, /* NT4/Win2k/XP/Win2k3 */ "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); SetLastError(0xdeadbeef); space = 0xdeadbeef; ret = SetupQuerySpaceRequiredOnDriveW(handle, NULL, &space, NULL, 0); ok(!ret, "Expected SetupQuerySpaceRequiredOnDriveW to return FALSE, got %d\n", ret); ok(space == 0xdeadbeef, "Expected output space parameter to be untouched\n"); ok(GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_INVALID_DRIVE, /* NT4/Win2k/XP/Win2k3 */ "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); SetLastError(0xdeadbeef); ret = SetupQuerySpaceRequiredOnDriveW(handle, emptyW, NULL, NULL, 0); ok(!ret, "Expected SetupQuerySpaceRequiredOnDriveW to return FALSE, got %d\n", ret); ok(GetLastError() == ERROR_INVALID_DRIVE, "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); SetLastError(0xdeadbeef); space = 0xdeadbeef; ret = SetupQuerySpaceRequiredOnDriveW(handle, emptyW, &space, NULL, 0); ok(!ret, "Expected SetupQuerySpaceRequiredOnDriveW to return FALSE, got %d\n", ret); ok(space == 0xdeadbeef, "Expected output space parameter to be untouched\n"); ok(GetLastError() == ERROR_INVALID_DRIVE, "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n", GetLastError()); ok(SetupDestroyDiskSpaceList(handle), "Expected SetupDestroyDiskSpaceList to succeed\n"); }