From 2abe5573526b8a05daea1136981cea844fc78c76 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Mon, 19 Sep 2016 15:13:58 +0200 Subject: [PATCH] ntoskrnl.exe: Implement DevicePropertyEnumeratorName for IoGetDeviceProperty. Signed-off-by: Aric Stewart Signed-off-by: Sebastian Lackner Signed-off-by: Alexandre Julliard --- dlls/ntoskrnl.exe/ntoskrnl.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index bc7ac8651a8..93029a43ef4 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -94,6 +94,8 @@ struct wine_driver DRIVER_EXTENSION driver_extension; }; +static NTSTATUS get_device_id( DEVICE_OBJECT *device, BUS_QUERY_ID_TYPE type, WCHAR **id ); + static int wine_drivers_rb_compare( const void *key, const struct wine_rb_entry *entry ) { const struct wine_driver *driver = WINE_RB_ENTRY_VALUE( entry, const struct wine_driver, entry ); @@ -1132,6 +1134,30 @@ NTSTATUS WINAPI IoGetDeviceProperty( DEVICE_OBJECT *device, DEVICE_REGISTRY_PROP property_buffer, result_length ); switch (device_property) { + case DevicePropertyEnumeratorName: + { + WCHAR *id, *ptr; + + status = get_device_id( device, BusQueryInstanceID, &id ); + if (status != STATUS_SUCCESS) + { + ERR( "Failed to get device id\n" ); + break; + } + + struprW( id ); + ptr = strchrW( id, '\\' ); + if (ptr) *ptr = 0; + + *result_length = sizeof(WCHAR) * (strlenW(id) + 1); + if (buffer_length >= *result_length) + memcpy( property_buffer, id, *result_length ); + else + status = STATUS_BUFFER_TOO_SMALL; + + HeapFree( GetProcessHeap(), 0, id ); + break; + } case DevicePropertyPhysicalDeviceObjectName: { ULONG used_len, len = buffer_length + sizeof(OBJECT_NAME_INFORMATION); -- 2.11.4.GIT