diff --git a/dll/win32/iphlpapi/iphlpapi_main.c b/dll/win32/iphlpapi/iphlpapi_main.c index 8bcde12b52..1aaabdcc6e 100644 --- a/dll/win32/iphlpapi/iphlpapi_main.c +++ b/dll/win32/iphlpapi/iphlpapi_main.c @@ -1728,6 +1728,8 @@ DWORD WINAPI GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder) DWORD WINAPI GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen) { DWORD ret; + static const WCHAR* dt = L"\\DEVICE\\TCPIP_"; // data to be prepended + size_t pflen = wcslen(dt); // prefix length TRACE("pIfTable %p, dwOutBufLen %p\n", pIfTable, dwOutBufLen); if (!dwOutBufLen) @@ -1770,6 +1772,15 @@ DWORD WINAPI GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG dwOutBufLen) walker++, assigner++) *assigner = *walker; *assigner = 0; + + /* check to see if we have enough room to add our prefix */ + if (sizeof(pIfTable->Adapter[ndx].Name) - wcslen(pIfTable->Adapter[ndx].Name) > pflen) + { + /* Now we need to prepend the '\DEVICE\TCPIP_' */ + memmove(pIfTable->Adapter[ndx].Name + pflen, pIfTable->Adapter[ndx].Name, + wcslen(pIfTable->Adapter[ndx].Name) * sizeof(WCHAR) + sizeof(UNICODE_NULL)); + memcpy(pIfTable->Adapter[ndx].Name, dt, pflen * sizeof(WCHAR)); + } consumeInterfaceName(name); pIfTable->NumAdapters++; }