From cf0112a6e6ce8f2a576c840f04964aecbff04f23 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Tue, 11 Sep 2018 08:08:56 +0200 Subject: [PATCH] [MPR] Implement WNetClearConnections() This has been submitted upstream. CORE-15012 --- dll/win32/mpr/mpr.spec | 1 + dll/win32/mpr/wnet.c | 58 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/dll/win32/mpr/mpr.spec b/dll/win32/mpr/mpr.spec index ec17ebdb24c..b75900bafd8 100644 --- a/dll/win32/mpr/mpr.spec +++ b/dll/win32/mpr/mpr.spec @@ -55,6 +55,7 @@ @ stdcall WNetCancelConnection2W(wstr long long) @ stdcall WNetCancelConnectionA(str long) @ stdcall WNetCancelConnectionW(wstr long) +@ stdcall WNetClearConnections(long) @ stdcall WNetCloseEnum(long) @ stdcall WNetConnectionDialog1A(ptr) @ stdcall WNetConnectionDialog1W(ptr) diff --git a/dll/win32/mpr/wnet.c b/dll/win32/mpr/wnet.c index 82c9302849f..75d6aef987e 100644 --- a/dll/win32/mpr/wnet.c +++ b/dll/win32/mpr/wnet.c @@ -2646,6 +2646,64 @@ DWORD WINAPI WNetGetUniversalNameW ( LPCWSTR lpLocalPath, DWORD dwInfoLevel, return err; } +#ifdef __REACTOS__ +/***************************************************************** + * WNetClearConnections [MPR.@] + */ +DWORD WINAPI WNetClearConnections ( DWORD unknown ) +{ + HANDLE connected; + DWORD ret, size, count; + NETRESOURCEW * resources, * iter; + + ret = WNetOpenEnumW(RESOURCE_CONNECTED, RESOURCETYPE_ANY, 0, NULL, &connected); + if (ret != WN_SUCCESS) + { + if (ret != WN_NO_NETWORK) + { + return ret; + } + + /* Means no provider, then, clearing is OK */ + return WN_SUCCESS; + } + + size = 0x1000; + resources = HeapAlloc(GetProcessHeap(), 0, size); + if (!resources) + { + WNetCloseEnum(connected); + return WN_OUT_OF_MEMORY; + } + + do + { + size = 0x1000; + count = -1; + + memset(resources, 0, size); + ret = WNetEnumResourceW(connected, &count, resources, &size); + if (ret == WN_SUCCESS || ret == WN_MORE_DATA) + { + iter = resources; + for (; count; count--) + { + WNetCancelConnection2W(iter->lpLocalName, 0, TRUE); + + iter++; + } + } + else + break; + } while (ret != WN_NO_MORE_ENTRIES); + + HeapFree(GetProcessHeap(), 0, resources); + WNetCloseEnum(connected); + + return ret; +} +#endif + /* -- 2.17.1