mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 20:36:35 +00:00
[MPR] Drop a nasty ReactOS specific hack
That hack (cf. previous commit) was used to restore all the saved connections. But, because it was implemented in the wrong place, each time the MPR DLL was attached, it was trying to restore connections. With that commit and the previous one, now, ReactOS has a correct behavior (it tries to bring back connections only at session opening) and will reduce "workload" for applications attaching MPR dll. CORE-15310
This commit is contained in:
parent
4cf87fdb2c
commit
5e024bfeb6
1 changed files with 0 additions and 137 deletions
|
@ -296,85 +296,6 @@ static void _tryLoadProvider(PCWSTR provider)
|
|||
debugstr_w(provider));
|
||||
}
|
||||
|
||||
#ifdef __REACTOS__
|
||||
static void _restoreSavedConnection(HKEY connection, WCHAR * local)
|
||||
{
|
||||
NETRESOURCEW net;
|
||||
DWORD type, prov, index, size;
|
||||
|
||||
net.lpProvider = NULL;
|
||||
net.lpRemoteName = NULL;
|
||||
net.lpLocalName = NULL;
|
||||
|
||||
TRACE("Restoring: %S\n", local);
|
||||
|
||||
size = sizeof(DWORD);
|
||||
if (RegQueryValueExW(connection, L"ConnectionType", NULL, &type, (BYTE *)&net.dwType, &size) != ERROR_SUCCESS)
|
||||
return;
|
||||
|
||||
if (type != REG_DWORD || size != sizeof(DWORD))
|
||||
return;
|
||||
|
||||
if (RegQueryValueExW(connection, L"ProviderName", NULL, &type, NULL, &size) != ERROR_SUCCESS)
|
||||
return;
|
||||
|
||||
if (type != REG_SZ)
|
||||
return;
|
||||
|
||||
net.lpProvider = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
if (!net.lpProvider)
|
||||
return;
|
||||
|
||||
if (RegQueryValueExW(connection, L"ProviderName", NULL, NULL, (BYTE *)net.lpProvider, &size) != ERROR_SUCCESS)
|
||||
goto cleanup;
|
||||
|
||||
size = sizeof(DWORD);
|
||||
if (RegQueryValueExW(connection, L"ProviderType", NULL, &type, (BYTE *)&prov, &size) != ERROR_SUCCESS)
|
||||
goto cleanup;
|
||||
|
||||
if (type != REG_DWORD || size != sizeof(DWORD))
|
||||
goto cleanup;
|
||||
|
||||
index = _findProviderIndexW(net.lpProvider);
|
||||
if (index == BAD_PROVIDER_INDEX)
|
||||
goto cleanup;
|
||||
|
||||
if (providerTable->table[index].dwNetType != prov)
|
||||
goto cleanup;
|
||||
|
||||
if (RegQueryValueExW(connection, L"RemotePath", NULL, &type, NULL, &size) != ERROR_SUCCESS)
|
||||
goto cleanup;
|
||||
|
||||
if (type != REG_SZ)
|
||||
goto cleanup;
|
||||
|
||||
net.lpRemoteName = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
if (!net.lpRemoteName)
|
||||
goto cleanup;
|
||||
|
||||
if (RegQueryValueExW(connection, L"RemotePath", NULL, NULL, (BYTE *)net.lpRemoteName, &size) != ERROR_SUCCESS)
|
||||
goto cleanup;
|
||||
|
||||
size = strlenW(local);
|
||||
net.lpLocalName = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR) + 2 * sizeof(WCHAR));
|
||||
if (!net.lpLocalName)
|
||||
goto cleanup;
|
||||
|
||||
strcpyW(net.lpLocalName, local);
|
||||
net.lpLocalName[size] = ':';
|
||||
net.lpLocalName[size + 1] = 0;
|
||||
|
||||
TRACE("Attempting connection\n");
|
||||
|
||||
WNetAddConnection2W(&net, NULL, NULL, 0);
|
||||
|
||||
cleanup:
|
||||
HeapFree(GetProcessHeap(), 0, net.lpProvider);
|
||||
HeapFree(GetProcessHeap(), 0, net.lpRemoteName);
|
||||
HeapFree(GetProcessHeap(), 0, net.lpLocalName);
|
||||
}
|
||||
#endif
|
||||
|
||||
void wnetInit(HINSTANCE hInstDll)
|
||||
{
|
||||
static const WCHAR providerOrderKey[] = { 'S','y','s','t','e','m','\\',
|
||||
|
@ -453,64 +374,6 @@ void wnetInit(HINSTANCE hInstDll)
|
|||
}
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
#ifdef __REACTOS__
|
||||
if (providerTable)
|
||||
{
|
||||
HKEY user_profile;
|
||||
|
||||
if (RegOpenCurrentUser(KEY_ALL_ACCESS, &user_profile) == ERROR_SUCCESS)
|
||||
{
|
||||
HKEY network;
|
||||
WCHAR subkey[8] = {'N', 'e', 't', 'w', 'o', 'r', 'k', 0};
|
||||
|
||||
if (RegOpenKeyExW(user_profile, subkey, 0, KEY_READ, &network) == ERROR_SUCCESS)
|
||||
{
|
||||
DWORD size, max;
|
||||
|
||||
TRACE("Enumerating remembered connections\n");
|
||||
|
||||
if (RegQueryInfoKey(network, NULL, NULL, NULL, &max, &size, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
|
||||
{
|
||||
WCHAR *local;
|
||||
|
||||
TRACE("There are %lu connections\n", max);
|
||||
|
||||
local = HeapAlloc(GetProcessHeap(), 0, (size + 1) * sizeof(WCHAR));
|
||||
if (local)
|
||||
{
|
||||
DWORD index;
|
||||
|
||||
for (index = 0; index < max; ++index)
|
||||
{
|
||||
DWORD len = size + 1;
|
||||
HKEY connection;
|
||||
|
||||
TRACE("Trying connection %lu\n", index);
|
||||
|
||||
if (RegEnumKeyExW(network, index, local, &len, NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
|
||||
continue;
|
||||
|
||||
TRACE("It is %S\n", local);
|
||||
|
||||
if (RegOpenKeyExW(network, local, 0, KEY_READ, &connection) != ERROR_SUCCESS)
|
||||
continue;
|
||||
|
||||
_restoreSavedConnection(connection, local);
|
||||
RegCloseKey(connection);
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, local);
|
||||
}
|
||||
}
|
||||
|
||||
RegCloseKey(network);
|
||||
}
|
||||
|
||||
RegCloseKey(user_profile);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void wnetFree(void)
|
||||
|
|
Loading…
Reference in a new issue