From: Aric Stewart Subject: [PATCH v3] ntoskrnl.exe: Implement IoGetDeviceProperty for DevicePropertyPhysicalDeviceObjectName Message-Id: <56AA2AAC.6050902@codeweavers.com> Date: Thu, 28 Jan 2016 08:50:20 -0600 v3: fix result_length handling Signed-off-by: Aric Stewart --- dlls/ntoskrnl.exe/ntoskrnl.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 471b6e5..d6c7a9d 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -1061,9 +1061,31 @@ PDEVICE_OBJECT WINAPI IoGetAttachedDevice( PDEVICE_OBJECT device ) NTSTATUS WINAPI IoGetDeviceProperty( DEVICE_OBJECT *device, DEVICE_REGISTRY_PROPERTY device_property, ULONG buffer_length, PVOID property_buffer, PULONG result_length ) { - FIXME( "%p %d %u %p %p: stub\n", device, device_property, buffer_length, + NTSTATUS status = STATUS_NOT_IMPLEMENTED; + TRACE( "%p %d %u %p %p\n", device, device_property, buffer_length, property_buffer, result_length ); - return STATUS_NOT_IMPLEMENTED; + switch (device_property) + { + case DevicePropertyPhysicalDeviceObjectName: + { + ULONG used_len; + OBJECT_NAME_INFORMATION *name = HeapAlloc(GetProcessHeap(), 0, buffer_length + (sizeof(OBJECT_NAME_INFORMATION))); + + status = NtQueryObject(device->Reserved, ObjectNameInformation, name, buffer_length + sizeof(OBJECT_NAME_INFORMATION), &used_len); + if (status == STATUS_SUCCESS) + { + memcpy(property_buffer, name->Name.Buffer, name->Name.Length); + *result_length = name->Name.Length; + } + else + *result_length = 0; + HeapFree(GetProcessHeap(), 0, name); + break; + } + default: + FIXME("unhandled property %d\n", device_property); + } + return status; }