From 895f8006f25244a2a09bb338d10856559ffd1b70 Mon Sep 17 00:00:00 2001 From: Robert Wilhelm Date: Tue, 6 Dec 2022 13:50:08 +0100 Subject: [PATCH] wshom.ocx: Implement IWshNetwork2_get_UserName(). Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53971 --- dlls/wshom.ocx/network.c | 20 ++++++++++++++++++-- dlls/wshom.ocx/tests/wshom.c | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/dlls/wshom.ocx/network.c b/dlls/wshom.ocx/network.c index c33f4347762..42ed61ffe01 100644 --- a/dlls/wshom.ocx/network.c +++ b/dlls/wshom.ocx/network.c @@ -120,9 +120,25 @@ static HRESULT WINAPI WshNetwork2_get_UserDomain(IWshNetwork2 *iface, BSTR *user static HRESULT WINAPI WshNetwork2_get_UserName(IWshNetwork2 *iface, BSTR *user_name) { - FIXME("%p stub\n", user_name); + BOOL ret; + DWORD len = 0; - return E_NOTIMPL; + TRACE("%p\n", user_name); + + GetUserNameW(NULL, &len); + *user_name = SysAllocStringLen(NULL, len-1); + if (!*user_name) + return E_OUTOFMEMORY; + + ret = GetUserNameW(*user_name, &len); + if (!ret) { + HRESULT hr = HRESULT_FROM_WIN32(GetLastError()); + SysFreeString(*user_name); + *user_name = NULL; + return hr; + } + + return S_OK; } static HRESULT WINAPI WshNetwork2_get_UserProfile(IWshNetwork2 *iface, BSTR *user_profile) diff --git a/dlls/wshom.ocx/tests/wshom.c b/dlls/wshom.ocx/tests/wshom.c index 5b3b7f81720..5212dd83b5c 100644 --- a/dlls/wshom.ocx/tests/wshom.c +++ b/dlls/wshom.ocx/tests/wshom.c @@ -692,7 +692,11 @@ static void test_popup(void) static void test_wshnetwork(void) { IDispatch *disp; + IWshNetwork2 *nw2; + BSTR str,username; HRESULT hr; + DWORD len = 0; + BOOL ret; hr = CoCreateInstance(&CLSID_WshNetwork, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, &IID_IDispatch, (void**)&disp); @@ -703,6 +707,23 @@ static void test_wshnetwork(void) check_interface(disp, &IID_IDispatchEx, FALSE); check_interface(disp, &IID_IObjectWithSite, FALSE); + hr = IDispatch_QueryInterface(disp, &IID_IWshNetwork2, (void**)&nw2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + str = NULL; + hr = IWshNetwork2_get_UserName(nw2, &str); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(str && str[0] != 0, "got empty string\n"); + CHECK_BSTR_LENGTH(str); + GetUserNameW(NULL, &len); + ok(len > 0, "Unexpected len %ld.\n", len); + username = SysAllocStringLen(NULL, len-1); + ret = GetUserNameW(username, &len); + ok(ret == TRUE, "GetUserNameW returned %d.\n", ret); + ok(!wcscmp(str,username), "user names do not match %s %s.\n", debugstr_w(str), debugstr_w(username)); + SysFreeString(username); + SysFreeString(str); + IDispatch_Release(disp); }