Zebediah Figura : kernel32/tests: Add more tests for DefineDosDevice().
Alexandre Julliard
julliard at winehq.org
Thu Feb 27 17:15:11 CST 2020
Module: wine
Branch: master
Commit: 4ab43e28d01dd4b36e53784d209169518a8b74b8
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4ab43e28d01dd4b36e53784d209169518a8b74b8
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Tue Feb 25 10:10:45 2020 -0600
kernel32/tests: Add more tests for DefineDosDevice().
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/tests/volume.c | 79 +++++++++++++++++++++++++++++++++++---------
1 file changed, 63 insertions(+), 16 deletions(-)
diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c
index 348ce1a76c..5fa8a9f05d 100644
--- a/dlls/kernel32/tests/volume.c
+++ b/dlls/kernel32/tests/volume.c
@@ -24,6 +24,7 @@
#include "ntddstor.h"
#include <stdio.h>
#include "ddk/ntddcdvd.h"
+#include "ddk/mountmgr.h"
#include <pshpack1.h>
struct COMPLETE_DVD_LAYER_DESCRIPTOR
@@ -105,11 +106,12 @@ static void test_query_dos_deviceA(void)
HeapFree( GetProcessHeap(), 0, buffer );
}
-static void test_define_dos_deviceA(void)
+static void test_dos_devices(void)
{
+ char buf[MAX_PATH], buf2[400];
char drivestr[3];
- char buf[MAX_PATH];
- DWORD ret;
+ HANDLE file;
+ BOOL ret;
/* Find an unused drive letter */
drivestr[1] = ':';
@@ -123,20 +125,65 @@ static void test_define_dos_deviceA(void)
return;
}
- /* Map it to point to the current directory */
- ret = GetCurrentDirectoryA(sizeof(buf), buf);
- ok(ret, "GetCurrentDir\n");
+ ret = DefineDosDeviceA( 0, drivestr, "C:/windows/" );
+ todo_wine ok(ret, "failed to define drive %s, error %u\n", drivestr, GetLastError());
- ret = DefineDosDeviceA(0, drivestr, buf);
- todo_wine
- ok(ret, "Could not make drive %s point to %s!\n", drivestr, buf);
+ ret = QueryDosDeviceA( drivestr, buf, sizeof(buf) );
+ todo_wine ok(ret, "failed to query drive %s, error %u\n", drivestr, GetLastError());
+ todo_wine ok(!strcmp(buf, "\\??\\C:\\windows\\"), "got path %s\n", debugstr_a(buf));
- if (!ret) {
- skip("can't test removing fake drive\n");
- } else {
- ret = DefineDosDeviceA(DDD_REMOVE_DEFINITION, drivestr, NULL);
- ok(ret, "Could not remove fake drive %s!\n", drivestr);
- }
+ sprintf(buf, "%s/system32", drivestr);
+ file = CreateFileA( buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL );
+ todo_wine ok(file != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError());
+ CloseHandle( file );
+
+ /* but it's not a volume mount point */
+
+ sprintf(buf, "%s\\", drivestr);
+ ret = GetVolumeNameForVolumeMountPointA( buf, buf2, sizeof(buf2) );
+ ok(!ret, "expected failure\n");
+ todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER, "got error %u\n", GetLastError());
+
+ ret = DefineDosDeviceA(DDD_REMOVE_DEFINITION, drivestr, NULL);
+ todo_wine ok(ret, "failed to remove drive %s, error %u\n", drivestr, GetLastError());
+
+ ret = QueryDosDeviceA( drivestr, buf, sizeof(buf) );
+ ok(!ret, "expected failure\n");
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND, "got error %u\n", GetLastError());
+
+ sprintf(buf, "%s/system32", drivestr);
+ file = CreateFileA( buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL );
+ ok(file == INVALID_HANDLE_VALUE, "expected failure\n");
+ todo_wine ok(GetLastError() == ERROR_PATH_NOT_FOUND, "got error %u\n", GetLastError());
+
+ /* try with DDD_RAW_TARGET_PATH */
+
+ ret = DefineDosDeviceA( DDD_RAW_TARGET_PATH, drivestr, "\\??\\C:\\windows\\" );
+ ok(ret, "failed to define drive %s, error %u\n", drivestr, GetLastError());
+
+ ret = QueryDosDeviceA( drivestr, buf, sizeof(buf) );
+ todo_wine ok(ret, "failed to query drive %s, error %u\n", drivestr, GetLastError());
+ todo_wine ok(!strcmp(buf, "\\??\\C:\\windows\\"), "got path %s\n", debugstr_a(buf));
+
+ sprintf(buf, "%s/system32", drivestr);
+ file = CreateFileA( buf, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
+ OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL );
+ todo_wine ok(file != INVALID_HANDLE_VALUE, "got error %u\n", GetLastError());
+ CloseHandle( file );
+
+ sprintf(buf, "%s\\", drivestr);
+ ret = GetVolumeNameForVolumeMountPointA( buf, buf2, sizeof(buf2) );
+ ok(!ret, "expected failure\n");
+ todo_wine ok(GetLastError() == ERROR_INVALID_PARAMETER, "got error %u\n", GetLastError());
+
+ ret = DefineDosDeviceA(DDD_REMOVE_DEFINITION, drivestr, NULL);
+ ok(ret, "failed to remove drive %s, error %u\n", drivestr, GetLastError());
+
+ ret = QueryDosDeviceA( drivestr, buf, sizeof(buf) );
+ ok(!ret, "expected failure\n");
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND, "got error %u\n", GetLastError());
}
static void test_FindFirstVolume(void)
@@ -1272,7 +1319,7 @@ START_TEST(volume)
pGetVolumePathNamesForVolumeNameW = (void *) GetProcAddress(hdll, "GetVolumePathNamesForVolumeNameW");
test_query_dos_deviceA();
- test_define_dos_deviceA();
+ test_dos_devices();
test_FindFirstVolume();
test_GetVolumePathNameA();
test_GetVolumePathNameW();
More information about the wine-cvs
mailing list