diff --git a/base/applications/network/netsh/netsh.c b/base/applications/network/netsh/netsh.c index f2f45c51beb..1c723f734c4 100644 --- a/base/applications/network/netsh/netsh.c +++ b/base/applications/network/netsh/netsh.c @@ -380,20 +380,38 @@ MatchTagsInCmdLine( _In_ DWORD dwTagCount, _Out_ DWORD *pdwTagType) { - DWORD i; + PWSTR pszEqual; + DWORD i, j, dwTagLength; - DPRINT1("MatchTagsInCmdLine(%p %p %lu %lu %p %lu %p) stub!\n", + DPRINT1("MatchTagsInCmdLine(%p %p %lu %lu %p %lu %p)\n", hModule, ppwcArguments, dwCurrentIndex, dwArgCount, pttTags, dwTagCount, pdwTagType); for (i = dwCurrentIndex; i < dwArgCount; i++) { - DPRINT1("Argument %lu: %S\n", i, ppwcArguments[i]); - } + DPRINT("Argument %lu: %S\n", i, ppwcArguments[i]); - for (i = 0; i < dwTagCount; i++) - { - DPRINT1("Tag %lu: %S\n", i, pttTags[i].pwszTag); + /* Skip arguments that do not have a tag */ + pszEqual = wcschr(ppwcArguments[i], L'='); + if (pszEqual == NULL) + continue; + + dwTagLength = pszEqual - ppwcArguments[i]; + DPRINT("Tag length %lu\n", dwTagLength); + DPRINT("Value length %lu\n", wcslen(pszEqual + 1)); + + pdwTagType[i - dwCurrentIndex] = (DWORD)-1; + for (j = 0; j < dwTagCount; j++) + { + DPRINT("Test tag %S\n", pttTags[j].pwszTag); + if ((wcslen(pttTags[i].pwszTag) == dwTagLength) && + (_wcsnicmp(ppwcArguments[i], pttTags[j].pwszTag, dwTagLength) == 0)) + { + DPRINT("Found tag %S\n", pttTags[j].pwszTag); + pttTags[j].bPresent = TRUE; + pdwTagType[i - dwCurrentIndex] = j; + } + } } return 0; @@ -450,6 +468,19 @@ NsGetFriendlyNameFromIfName( return ret; } +DWORD +WINAPI +NsGetIfNameFromFriendlyName( + _In_ DWORD dwUnknown1, + _In_ PWSTR pszFriendlyName, + _Inout_ PWSTR pszIfName, + _Inout_ PDWORD pdwIfName) +{ + DPRINT1("NsGetIfNameFromFriendlyName(%lx %S %p %p)\n", + dwUnknown1, pszFriendlyName, pszIfName, pdwIfName); + return 0; +} + DWORD WINAPI PreprocessCommand( diff --git a/base/applications/network/netsh/netsh.spec b/base/applications/network/netsh/netsh.spec index fa152c09e0e..643c739acbb 100644 --- a/base/applications/network/netsh/netsh.spec +++ b/base/applications/network/netsh/netsh.spec @@ -15,7 +15,7 @@ @ stdcall MatchTagsInCmdLine(ptr ptr long long ptr long ptr) @ stdcall MatchToken(wstr wstr) @ stdcall NsGetFriendlyNameFromIfName(long wstr ptr ptr) -@ stub NsGetIfNameFromFriendlyName +@ stdcall NsGetIfNameFromFriendlyName(long wstr ptr ptr) @ stdcall PreprocessCommand(ptr ptr long long ptr long long long ptr) @ varargs PrintError(ptr long) @ stub PrintErrorLog diff --git a/sdk/include/reactos/netsh_undoc.h b/sdk/include/reactos/netsh_undoc.h index ec780e3d3b7..05b5105e822 100644 --- a/sdk/include/reactos/netsh_undoc.h +++ b/sdk/include/reactos/netsh_undoc.h @@ -42,4 +42,12 @@ NsGetFriendlyNameFromIfName( _Inout_ PWSTR pszFriendlyName, _Inout_ PDWORD pdwFriendlyName); +DWORD +WINAPI +NsGetIfNameFromFriendlyName( + _In_ DWORD dwUnknown1, + _In_ PWSTR pszFriendlyName, + _Inout_ PWSTR pszIfName, + _Inout_ PDWORD pdwIfName); + #endif /* __NETSH_UNDOC_H__ */