From: David Koolhoven Subject: [PATCH v7 2/2] kernel32/tests: Add SeekPenalty Test to Volume.c Message-Id: <20210525001045.63130-2-david@koolhoven-home.net> Date: Mon, 24 May 2021 20:10:45 -0400 In-Reply-To: <20210525001045.63130-1-david@koolhoven-home.net> References: <20210525001045.63130-1-david@koolhoven-home.net> From: Ackurus <84048003+Ackurus@users.noreply.github.com> Helps test for compatibility with SeekPenaltyQueryProperty. Signed-off-by: David Koolhoven --- v2: Update module label. --- dlls/kernel32/tests/volume.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c index ed3897a6b94..019f764019c 100644 --- a/dlls/kernel32/tests/volume.c +++ b/dlls/kernel32/tests/volume.c @@ -654,6 +654,40 @@ 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 */ + ok((ret) || (ret == ERROR_NOT_SUPPORTED), "expect ret %#x, got %#x\n", TRUE, ret); + ok((error == 0xdeadbeef) || (error == ERROR_NOT_SUPPORTED), "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 +1679,7 @@ START_TEST(volume) test_enum_vols(); test_disk_extents(); test_disk_query_property(); + test_disk_query_seek_penalty_property(); test_GetVolumePathNamesForVolumeNameA(); test_GetVolumePathNamesForVolumeNameW(); test_cdrom_ioctl(); -- 2.31.1