From: Timo Kreuzer Date: Tue, 18 Feb 2014 19:53:48 +0000 (+0000) Subject: [NTOSKRNL] X-Git-Tag: ReactOS-0.3.16-CLT2014~89 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=7792a6513bdcf688adb91dc87ed1ee9c47cae55d [NTOSKRNL] Fix returned symbolic links in IoGetDeviceInterfaces. svn path=/trunk/; revision=62249 --- diff --git a/reactos/ntoskrnl/io/iomgr/deviface.c b/reactos/ntoskrnl/io/iomgr/deviface.c index 980ef17c6a9..4c4f6188e7b 100644 --- a/reactos/ntoskrnl/io/iomgr/deviface.c +++ b/reactos/ntoskrnl/io/iomgr/deviface.c @@ -466,7 +466,7 @@ IoGetDeviceInterfaces(IN CONST GUID *InterfaceClassGuid, goto cleanup; } - /* Enumerate subkeys (ie the different device objets) */ + /* Enumerate subkeys (i.e. the different device objects) */ while (TRUE) { Status = ZwEnumerateKey( @@ -729,14 +729,17 @@ IoGetDeviceInterfaces(IN CONST GUID *InterfaceClassGuid, Status = STATUS_UNSUCCESSFUL; goto cleanup; } - KeyName.Length = KeyName.MaximumLength = (USHORT)bip->DataLength - 4 * sizeof(WCHAR); - KeyName.Buffer = &((PWSTR)bip->Data)[4]; + KeyName.Length = KeyName.MaximumLength = (USHORT)bip->DataLength; + KeyName.Buffer = (PWSTR)bip->Data; + + /* Fixup the prefix (from "\\?\") */ + RtlCopyMemory(KeyName.Buffer, L"\\??\\", 4 * sizeof(WCHAR)); /* Add new symbolic link to symbolic link list */ if (ReturnBuffer.Length + KeyName.Length + sizeof(WCHAR) > ReturnBuffer.MaximumLength) { PWSTR NewBuffer; - ReturnBuffer.MaximumLength = (USHORT)max(ReturnBuffer.MaximumLength * 2, + ReturnBuffer.MaximumLength = (USHORT)max(ReturnBuffer.MaximumLength * sizeof(WCHAR), (USHORT)(ReturnBuffer.Length + KeyName.Length + 2 * sizeof(WCHAR)));