Author: pschweitzer
Date: Mon Feb 15 20:32:25 2016
New Revision: 70755

URL: http://svn.reactos.org/svn/reactos?rev=70755&view=rev
Log:
[MPR]
Import Wine commit:
- d070c263adf840cc14dde84eb8e73b04490d1900, Partially implement 
WNetUseConnectionW().

This reduces diff to Wine, by providing a cleaner implementation of 
WNetUseConnectionW().

CORE-10032

Modified:
    trunk/reactos/dll/win32/mpr/mpr_ros.diff
    trunk/reactos/dll/win32/mpr/wnet.c

Modified: trunk/reactos/dll/win32/mpr/mpr_ros.diff
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mpr/mpr_ros.diff?rev=70755&r1=70754&r2=70755&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mpr/mpr_ros.diff    [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mpr/mpr_ros.diff    [iso-8859-1] Mon Feb 15 
20:32:25 2016
@@ -156,84 +156,3 @@
  }
  
  /*****************************************************************
-@@ -1577,12 +1659,75 @@
-                                  LPWSTR lpAccessName, LPDWORD lpBufferSize,
-                                  LPDWORD lpResult )
- {
--    FIXME( "(%p, %p, %p, %s, 0x%08X, %s, %p, %p), stub\n",
--           hwndOwner, lpNetResource, lpPassword, debugstr_w(lpUserID), 
dwFlags,
--           debugstr_w(lpAccessName), lpBufferSize, lpResult );
-+    DWORD provider;
-+    DWORD cap;
-+    char id;
-+    DWORD drives;
-+    DWORD ret;
-+    PF_NPAddConnection3 addConn3;
-+    PF_NPAddConnection addConn;
- 
--    SetLastError(WN_NO_NETWORK);
--    return WN_NO_NETWORK;
-+    if (!providerTable || providerTable->numProviders == 0) {
-+        SetLastError(WN_NO_NETWORK);
-+        return WN_NO_NETWORK;
-+    }
-+
-+    if (!lpNetResource) {
-+        SetLastError(ERROR_INVALID_PARAMETER);
-+        return ERROR_INVALID_PARAMETER;
-+    }
-+
-+    if (!lpNetResource->lpProvider || !*lpNetResource->lpProvider) {
-+        SetLastError(ERROR_BAD_PROVIDER);
-+        return ERROR_BAD_PROVIDER;
-+    }
-+
-+    if (!lpNetResource->lpLocalName || !*lpNetResource->lpLocalName) {
-+        SetLastError(ERROR_BAD_DEVICE);
-+        return ERROR_BAD_DEVICE;
-+    }
-+
-+    if ((!(lpNetResource->lpLocalName[0] >= 'a' && 
lpNetResource->lpLocalName[0] <= 'z') &&
-+        !(lpNetResource->lpLocalName[0] >= 'A' && 
lpNetResource->lpLocalName[0] <= 'Z')) ||
-+        lpNetResource->lpLocalName[1] != ':' || 
lpNetResource->lpLocalName[2]) {
-+        SetLastError(ERROR_BAD_DEVICE);
-+        return ERROR_BAD_DEVICE;
-+    }
-+
-+    id = (lpNetResource->lpLocalName[0] >= 'a') ? 
lpNetResource->lpLocalName[0] - 'a' : lpNetResource->lpLocalName[0] - 'A';
-+    drives = GetLogicalDrives();
-+    if (drives & (1 << id)) {
-+        SetLastError(ERROR_ALREADY_ASSIGNED);
-+        return ERROR_ALREADY_ASSIGNED;
-+    }
-+
-+    provider = _findProviderIndexW(lpNetResource->lpProvider);
-+    if (provider == BAD_PROVIDER_INDEX) {
-+        SetLastError(ERROR_BAD_PROVIDER);
-+        return ERROR_BAD_PROVIDER;
-+    }
-+
-+    cap = providerTable->table[provider].getCaps(WNNC_CONNECTION);
-+    if (!(cap & WNNC_CON_ADDCONNECTION) && !(cap & WNNC_CON_ADDCONNECTION3)) {
-+        SetLastError(ERROR_BAD_PROVIDER);
-+        return ERROR_BAD_PROVIDER;
-+    }
-+
-+    ret = WN_ACCESS_DENIED;
-+    if (cap & WNNC_CON_ADDCONNECTION3) {
-+        addConn3 = 
(PF_NPAddConnection3)GetProcAddress(providerTable->table[provider].hLib, 
"NPAddConnection3");
-+        if (addConn3) {
-+            ret = addConn3(hwndOwner, lpNetResource, (LPWSTR)lpPassword, 
(LPWSTR)lpUserID, dwFlags);
-+        }
-+    }
-+    else if (cap & WNNC_CON_ADDCONNECTION) {
-+        addConn = 
(PF_NPAddConnection)GetProcAddress(providerTable->table[provider].hLib, 
"NPAddConnection");
-+        if (addConn) {
-+            ret = addConn(lpNetResource, (LPWSTR)lpPassword, 
(LPWSTR)lpUserID);
-+        }
-+    }
-+
-+    return ret;
- }
- 
- /*********************************************************************

Modified: trunk/reactos/dll/win32/mpr/wnet.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mpr/wnet.c?rev=70755&r1=70754&r2=70755&view=diff
==============================================================================
--- trunk/reactos/dll/win32/mpr/wnet.c  [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/mpr/wnet.c  [iso-8859-1] Mon Feb 15 20:32:25 2016
@@ -1654,77 +1654,76 @@
 /*****************************************************************
  *  WNetUseConnectionW [MPR.@]
  */
-DWORD WINAPI WNetUseConnectionW( HWND hwndOwner, LPNETRESOURCEW lpNetResource,
-                                 LPCWSTR lpPassword, LPCWSTR lpUserID, DWORD 
dwFlags,
-                                 LPWSTR lpAccessName, LPDWORD lpBufferSize,
-                                 LPDWORD lpResult )
-{
-    DWORD provider;
-    DWORD cap;
-    char id;
-    DWORD drives;
-    DWORD ret;
-    PF_NPAddConnection3 addConn3;
-    PF_NPAddConnection addConn;
-
-    if (!providerTable || providerTable->numProviders == 0) {
-        SetLastError(WN_NO_NETWORK);
+DWORD WINAPI WNetUseConnectionW( HWND hwndOwner, NETRESOURCEW *resource, 
LPCWSTR password,
+    LPCWSTR userid, DWORD flags, LPWSTR accessname, DWORD *buffer_size, DWORD 
*result )
+{
+    WNetProvider *provider;
+    DWORD index, ret, caps;
+
+    TRACE( "(%p, %p, %p, %s, 0x%08X, %p, %p, %p)\n",
+           hwndOwner, resource, password, debugstr_w(userid), flags,
+           accessname, buffer_size, result );
+
+    if (!providerTable || providerTable->numProviders == 0)
         return WN_NO_NETWORK;
-    }
-
-    if (!lpNetResource) {
-        SetLastError(ERROR_INVALID_PARAMETER);
+
+    if (!resource)
         return ERROR_INVALID_PARAMETER;
-    }
-
-    if (!lpNetResource->lpProvider || !*lpNetResource->lpProvider) {
-        SetLastError(ERROR_BAD_PROVIDER);
+
+    if (!resource->lpProvider)
+    {
+        FIXME("Networking provider selection is not implemented.\n");
+        return WN_NO_NETWORK;
+    }
+
+    if (!resource->lpLocalName && (flags & CONNECT_REDIRECT))
+    {
+        FIXME("Locale device selection is not implemented.\n");
+        return WN_NO_NETWORK;
+    }
+
+    if (flags & CONNECT_INTERACTIVE)
+        return ERROR_BAD_NET_NAME;
+
+    index = _findProviderIndexW(resource->lpProvider);
+    if (index == BAD_PROVIDER_INDEX)
         return ERROR_BAD_PROVIDER;
-    }
-
-    if (!lpNetResource->lpLocalName || !*lpNetResource->lpLocalName) {
-        SetLastError(ERROR_BAD_DEVICE);
-        return ERROR_BAD_DEVICE;
-    }
-
-    if ((!(lpNetResource->lpLocalName[0] >= 'a' && 
lpNetResource->lpLocalName[0] <= 'z') &&
-        !(lpNetResource->lpLocalName[0] >= 'A' && 
lpNetResource->lpLocalName[0] <= 'Z')) ||
-        lpNetResource->lpLocalName[1] != ':' || lpNetResource->lpLocalName[2]) 
{
-        SetLastError(ERROR_BAD_DEVICE);
-        return ERROR_BAD_DEVICE;
-    }
-
-    id = (lpNetResource->lpLocalName[0] >= 'a') ? 
lpNetResource->lpLocalName[0] - 'a' : lpNetResource->lpLocalName[0] - 'A';
-    drives = GetLogicalDrives();
-    if (drives & (1 << id)) {
-        SetLastError(ERROR_ALREADY_ASSIGNED);
-        return ERROR_ALREADY_ASSIGNED;
-    }
-
-    provider = _findProviderIndexW(lpNetResource->lpProvider);
-    if (provider == BAD_PROVIDER_INDEX) {
-        SetLastError(ERROR_BAD_PROVIDER);
+
+    provider = &providerTable->table[index];
+    caps = provider->getCaps(WNNC_CONNECTION);
+    if (!(caps & (WNNC_CON_ADDCONNECTION | WNNC_CON_ADDCONNECTION3)))
         return ERROR_BAD_PROVIDER;
-    }
-
-    cap = providerTable->table[provider].getCaps(WNNC_CONNECTION);
-    if (!(cap & WNNC_CON_ADDCONNECTION) && !(cap & WNNC_CON_ADDCONNECTION3)) {
-        SetLastError(ERROR_BAD_PROVIDER);
-        return ERROR_BAD_PROVIDER;
-    }
+
+    if (accessname && buffer_size && *buffer_size)
+    {
+        DWORD len;
+
+        if (resource->lpLocalName)
+            len = strlenW(resource->lpLocalName);
+        else
+            len = strlenW(resource->lpRemoteName);
+
+        if (++len > *buffer_size)
+        {
+            *buffer_size = len;
+            return ERROR_MORE_DATA;
+        }
+    }
+    else
+        accessname = NULL;
 
     ret = WN_ACCESS_DENIED;
-    if (cap & WNNC_CON_ADDCONNECTION3) {
-        addConn3 = 
(PF_NPAddConnection3)GetProcAddress(providerTable->table[provider].hLib, 
"NPAddConnection3");
-        if (addConn3) {
-            ret = addConn3(hwndOwner, lpNetResource, (LPWSTR)lpPassword, 
(LPWSTR)lpUserID, dwFlags);
-        }
-    }
-    else if (cap & WNNC_CON_ADDCONNECTION) {
-        addConn = 
(PF_NPAddConnection)GetProcAddress(providerTable->table[provider].hLib, 
"NPAddConnection");
-        if (addConn) {
-            ret = addConn(lpNetResource, (LPWSTR)lpPassword, (LPWSTR)lpUserID);
-        }
+    if ((caps & WNNC_CON_ADDCONNECTION3) && provider->addConnection3)
+        ret = provider->addConnection3(hwndOwner, resource, (LPWSTR)password, 
(LPWSTR)userid, flags);
+    else if ((caps & WNNC_CON_ADDCONNECTION) && provider->addConnection)
+        ret = provider->addConnection(resource, (LPWSTR)password, 
(LPWSTR)userid);
+
+    if (ret == WN_SUCCESS && accessname)
+    {
+        if (resource->lpLocalName)
+            strcpyW(accessname, resource->lpLocalName);
+        else
+            strcpyW(accessname, resource->lpRemoteName);
     }
 
     return ret;


Reply via email to