2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for DeviceIoControl
5 * PROGRAMMER: Pierre Schweitzer <pierre@reactos.org>
26 Ret
= DeviceIoControl(Device
, IOCTL_DISK_GET_DRIVE_GEOMETRY
, NULL
, 0, &DG
, sizeof(DG
) - 1, &Size
, NULL
);
27 ok(Ret
== 0, "DeviceIoControl succeed\n");
28 Error
= GetLastError();
29 ok(Error
== ERROR_INSUFFICIENT_BUFFER
, "Expecting ERROR_INSUFFICIENT_BUFFER, got %ld\n", Error
);
30 ok(Size
== 0, "Invalid output size: %ld\n", Size
);
33 Ret
= DeviceIoControl(Device
, IOCTL_DISK_GET_DRIVE_GEOMETRY
, NULL
, 0, &DG
, sizeof(DG
), &Size
, NULL
);
34 ok(Ret
!= 0, "DeviceIoControl failed: %ld\n", GetLastError());
35 ok(Size
== sizeof(DG
), "Invalid output size: %ld\n", Size
);
38 Ret
= DeviceIoControl(Device
, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
, NULL
, 0, &DGE
, FIELD_OFFSET(DISK_GEOMETRY_EX
, Data
) - 1, &Size
, NULL
);
39 ok(Ret
== 0, "DeviceIoControl succeed\n");
40 Error
= GetLastError();
41 ok(Error
== ERROR_INSUFFICIENT_BUFFER
, "Expecting ERROR_INSUFFICIENT_BUFFER, got %ld\n", Error
);
42 ok(Size
== 0, "Invalid output size: %ld\n", Size
);
45 Ret
= DeviceIoControl(Device
, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
, NULL
, 0, &DGE
, FIELD_OFFSET(DISK_GEOMETRY_EX
, Data
), &Size
, NULL
);
46 ok(Ret
!= 0, "DeviceIoControl failed: %ld\n", GetLastError());
47 ok(Size
== FIELD_OFFSET(DISK_GEOMETRY_EX
, Data
), "Invalid output size: %ld\n", Size
);
50 Ret
= DeviceIoControl(Device
, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
, NULL
, 0, &DGE
, sizeof(DGE
), &Size
, NULL
);
51 ok(Ret
!= 0, "DeviceIoControl failed: %ld\n", GetLastError());
52 ok(Size
== sizeof(DGE
), "Invalid output size: %ld\n", Size
);
62 MOUNTDEV_NAME MDN
, *AllocatedMDN
;
64 Ret
= DeviceIoControl(Device
, IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
, NULL
, 0, &MDN
, sizeof(MDN
) - 1, &Size
, NULL
);
65 ok(Ret
== 0, "DeviceIoControl succeed\n");
66 Error
= GetLastError();
67 ok(Error
== ERROR_INVALID_PARAMETER
, "Expecting ERROR_INVALID_PARAMETER, got %ld\n", Error
);
68 ok(Size
== 40 /* ?! */, "Invalid output size: %ld\n", Size
);
70 Ret
= DeviceIoControl(Device
, IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
, NULL
, 0, &MDN
, sizeof(MDN
), &Size
, NULL
);
71 ok(Ret
== 0, "DeviceIoControl succeed\n");
72 Error
= GetLastError();
73 ok(Error
== ERROR_MORE_DATA
, "Expecting ERROR_MORE_DATA, got %ld\n", Error
);
74 ok(Size
== sizeof(MOUNTDEV_NAME
), "Invalid output size: %ld\n", Size
);
76 AllocatedMDN
= HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MOUNTDEV_NAME
, Name
) + MDN
.NameLength
+ sizeof(UNICODE_NULL
));
77 if (AllocatedMDN
== NULL
)
79 skip("Memory allocation failure\n");
84 Ret
= DeviceIoControl(Device
, IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
, NULL
, 0, AllocatedMDN
, FIELD_OFFSET(MOUNTDEV_NAME
, Name
) + MDN
.NameLength
, &Size
, NULL
);
85 ok(Ret
!= 0, "DeviceIoControl failed: %ld\n", GetLastError());
86 ok(Size
== FIELD_OFFSET(MOUNTDEV_NAME
, Name
) + MDN
.NameLength
, "Invalid output size: %ld\n", Size
);
87 ok(AllocatedMDN
->NameLength
== MDN
.NameLength
, "Mismatching sizes: %d %d\n", AllocatedMDN
->NameLength
, MDN
.NameLength
);
92 AllocatedMDN
->Name
[AllocatedMDN
->NameLength
/ sizeof(WCHAR
) - 1] = UNICODE_NULL
;
94 if (wcsstr(AllocatedMDN
->Name
, L
"\\Device\\HarddiskVolume") != NULL
)
98 else if (wcsstr(AllocatedMDN
->Name
, L
"\\DosDevices\\") != NULL
)
100 IsValid
= (AllocatedMDN
->Name
[12] == Letter
&& AllocatedMDN
->Name
[13] == L
':');
103 ok(IsValid
, "Invalid name: %.*S", AllocatedMDN
->NameLength
, AllocatedMDN
->Name
);
107 skip("Failed to query device name\n");
110 HeapFree(GetProcessHeap(), 0, AllocatedMDN
);
113 START_TEST(DeviceIoControl
)
116 WCHAR Path
[MAX_PATH
];
121 Ret
= GetSystemDirectoryW(Path
, MAX_PATH
);
122 ok(Ret
> 0, "GetSystemDirectory failed\n");
124 Letter
= towupper(Path
[0]);
125 ok(Path
[1] == ':', "Not a drive letter: %c\n", Path
[1]);
126 ok(Path
[2] == '\\', "Not a drive letter: %c\n", Path
[2]);
128 Ret
= StringCchPrintfW(Path
, MAX_PATH
, L
"\\\\?\\%c:", Letter
);
129 ok(Ret
== S_OK
, "StringCchPrintfW failed: %d\n", Ret
);
131 Device
= CreateFileW(Path
, 0, FILE_SHARE_DELETE
| FILE_SHARE_READ
| FILE_SHARE_WRITE
, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL
, NULL
);
132 if (Device
== INVALID_HANDLE_VALUE
)
134 skip("CreateFileW for %S failed: %ld\n", Path
, GetLastError());