[PATCH 0/3] MR9984: mountmgr.sys: Stub StorageDeviceTrimProperty query.
From: Jactry Zeng <jzeng@codeweavers.com> --- include/ntddstor.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/ntddstor.h b/include/ntddstor.h index 0cb6d01f9b9..a59028df83a 100644 --- a/include/ntddstor.h +++ b/include/ntddstor.h @@ -281,6 +281,19 @@ typedef enum _STORAGE_BUS_TYPE { BusTypeFibre, BusTypeUsb, BusTypeRAID, + BusTypeiScsi, + BusTypeSas, + BusTypeSata, + BusTypeSd, + BusTypeMmc, + BusTypeVirtual, + BusTypeFileBackedVirtual, + BusTypeSpaces, + BusTypeNvme, + BusTypeSCM, + BusTypeUfs, + BusTypeNvmeof, + BusTypeMax, BusTypeMaxReserved = 0x7F } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9984
From: Jactry Zeng <jzeng@codeweavers.com> --- dlls/mountmgr.sys/device.c | 24 ++++++++++++++++++++++++ include/ntddstor.h | 6 ++++++ 2 files changed, 30 insertions(+) diff --git a/dlls/mountmgr.sys/device.c b/dlls/mountmgr.sys/device.c index f73476cdcd4..5ae4220931d 100644 --- a/dlls/mountmgr.sys/device.c +++ b/dlls/mountmgr.sys/device.c @@ -1619,6 +1619,30 @@ static NTSTATUS query_property( struct disk_device *device, IRP *irp ) } break; } + case StorageDeviceTrimProperty: + { + DEVICE_TRIM_DESCRIPTOR *d = irp->AssociatedIrp.SystemBuffer; + + if (irpsp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(STORAGE_DESCRIPTOR_HEADER)) + status = STATUS_INVALID_PARAMETER; + else + { + if (irpsp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(*d)) + { + d->Version = d->Size = sizeof(*d); + irp->IoStatus.Information = sizeof(STORAGE_DESCRIPTOR_HEADER); + } + else + { + FIXME( "Returning TRUE for StorageDeviceTrimProperty.\n" ); + d->Version = d->Size = sizeof(*d); + d->TrimEnabled = TRUE; + irp->IoStatus.Information = sizeof(*d); + } + status = STATUS_SUCCESS; + } + break; + } default: FIXME( "Unsupported property %#x\n", query->PropertyId ); diff --git a/include/ntddstor.h b/include/ntddstor.h index a59028df83a..7f5a0fd2bc7 100644 --- a/include/ntddstor.h +++ b/include/ntddstor.h @@ -266,6 +266,12 @@ typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR { BOOLEAN IncursSeekPenalty; } DEVICE_SEEK_PENALTY_DESCRIPTOR, *PDEVICE_SEEK_PENALTY_DESCRIPTOR; +typedef struct _DEVICE_TRIM_DESCRIPTOR { + DWORD Version; + DWORD Size; + BOOLEAN TrimEnabled; +} DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR; + typedef struct _STORAGE_DESCRIPTOR_HEADER { ULONG Version; ULONG Size; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9984
From: Jactry Zeng <jzeng@codeweavers.com> --- dlls/kernel32/tests/volume.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/dlls/kernel32/tests/volume.c b/dlls/kernel32/tests/volume.c index 6560fb8ac27..a0f249857e3 100644 --- a/dlls/kernel32/tests/volume.c +++ b/dlls/kernel32/tests/volume.c @@ -661,6 +661,7 @@ static void test_disk_query_property(void) STORAGE_PROPERTY_QUERY query = {0}; STORAGE_DESCRIPTOR_HEADER header = {0}; STORAGE_DEVICE_DESCRIPTOR descriptor = {0}; + DEVICE_TRIM_DESCRIPTOR trim_descriptor = {0}; DEVICE_SEEK_PENALTY_DESCRIPTOR seek_pen = {0}; HANDLE handle; DWORD error; @@ -732,6 +733,34 @@ static void test_disk_query_property(void) } } + /* Tests of StorageDeviceTrimProperty. */ + query.PropertyId = StorageDeviceTrimProperty; + query.QueryType = PropertyStandardQuery; + SetLastError(0xdeadbeef); + ret = DeviceIoControl(handle, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &header, + sizeof(header), &size, NULL); + error = GetLastError(); + ok(!!ret, "expect ret %#x, got %#x\n", TRUE, ret); + ok(error == 0xdeadbeef, "expect err %#x, got err %#lx\n", 0xdeadbeef, error); + ok(size == sizeof(header), "got size %ld\n", size); + ok(header.Version == sizeof(trim_descriptor), "got header.Version %ld\n", header.Version); + ok(header.Size == sizeof(trim_descriptor), "got header.Size %ld\n", header.Size); + + SetLastError(0xdeadbeef); + memset(&trim_descriptor, 0xcc, sizeof(trim_descriptor)); + ret = DeviceIoControl(handle, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &trim_descriptor, + sizeof(trim_descriptor), &size, NULL); + error = GetLastError(); + ok(!!ret || broken(!ret && error == ERROR_INVALID_FUNCTION) /* Win8 */, + "expect ret %#x, got err %#lx\n", ret, error); + if (ret) + { + ok(error == 0xdeadbeef, "expect err %#x, got err %#lx\n", 0xdeadbeef, error); + ok(size == sizeof(trim_descriptor), "got size %ld\n", size); + ok(trim_descriptor.Version == sizeof(trim_descriptor), "got descriptor.Version %ld\n", trim_descriptor.Version); + ok(trim_descriptor.Size == sizeof(trim_descriptor), "got descriptor.Size %ld\n", trim_descriptor.Size); + } + CloseHandle(handle); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9984
participants (2)
-
Jactry Zeng -
Jactry Zeng (@jactry)