[PATCH v10 2/2] kernel32/tests: Add SeekPenalty Test to Volume.c
David Koolhoven
david at koolhoven-home.net
Tue May 25 12:53:17 CDT 2021
Helps test for compatibility with SeekPenaltyQueryProperty.
Signed-off-by: David Koolhoven <david at koolhoven-home.net>
---
v10: Fix patch, narrow success scope on supported hosts.
---
dlls/kernel32/tests/volume.c | 45 ++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c
index ed3897a6b94..37ce5ea74c7 100644
--- a/dlls/kernel32/tests/volume.c
+++ b/dlls/kernel32/tests/volume.c
@@ -654,6 +654,50 @@ static void test_disk_query_property(void)
CloseHandle(handle);
}
+static void test_disk_query_seek_penalty_property(void)
+{
+ STORAGE_PROPERTY_QUERY query = {0};
+ DEVICE_SEEK_PENALTY_DESCRIPTOR descriptor = {0};
+ HANDLE handle;
+ DWORD error;
+ DWORD size;
+ BOOL ret;
+
+ handle = CreateFileA("\\\\.\\PhysicalDrive0", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
+ 0, 0);
+ if (handle == INVALID_HANDLE_VALUE)
+ {
+ win_skip("can't open \\\\.\\PhysicalDrive0 %#x\n", GetLastError());
+ return;
+ }
+
+ query.PropertyId = (STORAGE_PROPERTY_ID)StorageDeviceSeekPenaltyProperty;
+ query.QueryType = PropertyStandardQuery;
+
+ SetLastError(0xdeadbeef);
+ ret = DeviceIoControl(handle, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &descriptor, sizeof(descriptor),
+ &size, NULL);
+ error = GetLastError();
+ /* Only should complete on Win7 and Win10 */
+ if (!ret && error == ERROR_INVALID_FUNCTION)
+ {
+ win_skip("This function is not implemented before Win7, got error %#x\n", error);
+ return;
+ }
+ if (!ret && error == ERROR_GEN_FAILURE)
+ {
+ win_skip("Host system does not support this call, likely a VM, must complete on a reporting drive Error: %#x\n", error);
+ return;
+ }
+ ok(ret, "expect ret %#x, got %#x\n", TRUE, ret);
+ ok(error == 0xdeadbeef, "expect err %#x, got err %#x\n", 0xdeadbeef, error);
+ ok(size == sizeof(descriptor), "got size %d\n", size);
+ ok(descriptor.Version == sizeof(descriptor), "got descriptor.Version %d\n", descriptor.Version);
+ ok(descriptor.Size == sizeof(descriptor), "got descriptor.Size %d\n", descriptor.Size);
+
+ CloseHandle(handle);
+}
+
static void test_GetVolumePathNameA(void)
{
char volume_path[MAX_PATH], cwd[MAX_PATH], expect_path[MAX_PATH];
@@ -1645,6 +1689,7 @@ START_TEST(volume)
test_enum_vols();
test_disk_extents();
test_disk_query_property();
+ test_disk_query_seek_penalty_property(void)
test_GetVolumePathNamesForVolumeNameA();
test_GetVolumePathNamesForVolumeNameW();
test_cdrom_ioctl();
--
2.19.1
More information about the wine-devel
mailing list