From 68bcda65e202453287f8f861534c69c2d168ffc7 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 30 Dec 2016 20:30:28 +0000 Subject: [PATCH] [MPR] Enumerate connections capability before looking for functions entry points. This is a major fix, because it allows VBoxSF to work without a hack, and without necessarily make a connection from the NP to the VBoxSF driver. Already sent upstream. ROSAPPS-303 CORE-11757 svn path=/trunk/; revision=73489 --- reactos/dll/win32/mpr/mpr_ros.diff | 3 ++- reactos/dll/win32/mpr/wnet.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/mpr/mpr_ros.diff b/reactos/dll/win32/mpr/mpr_ros.diff index 349f7acd803..cea15b7205c 100644 --- a/reactos/dll/win32/mpr/mpr_ros.diff +++ b/reactos/dll/win32/mpr/mpr_ros.diff @@ -64,7 +64,8 @@ Index: wnet.c provider->addConnection3 = MPR_GETPROC(NPAddConnection3); provider->cancelConnection = MPR_GETPROC(NPCancelConnection); +#ifdef __REACTOS__ -+ provider->getConnection = MPR_GETPROC(NPGetConnection); ++ if (connectCap & WNNC_CON_GETCONNECTIONS) ++ provider->getConnection = MPR_GETPROC(NPGetConnection); +#endif TRACE("NPAddConnection %p\n", provider->addConnection); TRACE("NPAddConnection3 %p\n", provider->addConnection3); diff --git a/reactos/dll/win32/mpr/wnet.c b/reactos/dll/win32/mpr/wnet.c index 4c47ec10184..1cdddeb8949 100644 --- a/reactos/dll/win32/mpr/wnet.c +++ b/reactos/dll/win32/mpr/wnet.c @@ -171,6 +171,7 @@ static void _tryLoadProvider(PCWSTR provider) TRACE("loaded lib %p\n", hLib); if (getCaps) { + DWORD connectCap; PWNetProvider provider = &providerTable->table[providerTable->numProviders]; @@ -204,11 +205,16 @@ static void _tryLoadProvider(PCWSTR provider) WARN("Couldn't load enumeration functions\n"); } } - provider->addConnection = MPR_GETPROC(NPAddConnection); + connectCap = getCaps(WNNC_CONNECTION); + if (connectCap & WNNC_CON_ADDCONNECTION) + provider->addConnection = MPR_GETPROC(NPAddConnection); + if (connectCap & WNNC_CON_ADDCONNECTION3) provider->addConnection3 = MPR_GETPROC(NPAddConnection3); - provider->cancelConnection = MPR_GETPROC(NPCancelConnection); + if (connectCap & WNNC_CON_CANCELCONNECTION) + provider->cancelConnection = MPR_GETPROC(NPCancelConnection); #ifdef __REACTOS__ - provider->getConnection = MPR_GETPROC(NPGetConnection); + if (connectCap & WNNC_CON_GETCONNECTIONS) + provider->getConnection = MPR_GETPROC(NPGetConnection); #endif TRACE("NPAddConnection %p\n", provider->addConnection); TRACE("NPAddConnection3 %p\n", provider->addConnection3); -- 2.17.1