2 ===================================================================
3 --- mpr.spec (revision 49877)
4 +++ mpr.spec (working copy)
45 22 stdcall @(long) MPR_Alloc
46 23 stdcall @(ptr long) MPR_ReAlloc
47 24 stdcall @(ptr) MPR_Free
49 ===================================================================
50 --- wnet.c (révision 70645)
51 +++ wnet.c (copie de travail)
52 @@ -1553,6 +1553,33 @@
53 dwFlags, NULL, 0, NULL);
56 +/* Convert an ANSI string to wide */
57 +static LPWSTR strdupAtoW( LPCSTR str )
62 + if (!str) return NULL;
63 + len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
64 + ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
65 + if (ret) MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );
69 +/* Convert ANSI NETRESOURCE struct to wide structure */
70 +static VOID convert_netresourcea_to_w( LPNETRESOURCEA lpNetResourceA,
71 + LPNETRESOURCEW lpNetResourceW )
73 + lpNetResourceW->dwScope = lpNetResourceA->dwScope;
74 + lpNetResourceW->dwType = lpNetResourceA->dwType;
75 + lpNetResourceW->dwDisplayType = lpNetResourceA->dwDisplayType;
76 + lpNetResourceW->dwUsage = lpNetResourceA->dwUsage;
77 + lpNetResourceW->lpLocalName = strdupAtoW(lpNetResourceA->lpLocalName);
78 + lpNetResourceW->lpRemoteName = strdupAtoW(lpNetResourceA->lpRemoteName);
79 + lpNetResourceW->lpComment = strdupAtoW(lpNetResourceA->lpComment);
80 + lpNetResourceW->lpProvider = strdupAtoW(lpNetResourceA->lpProvider);
83 /*****************************************************************
84 * WNetUseConnectionA [MPR.@]
86 @@ -1561,12 +1588,67 @@
87 LPSTR lpAccessName, LPDWORD lpBufferSize,
90 - FIXME( "(%p, %p, %p, %s, 0x%08X, %s, %p, %p), stub\n",
91 - hwndOwner, lpNetResource, lpPassword, debugstr_a(lpUserID), dwFlags,
92 - debugstr_a(lpAccessName), lpBufferSize, lpResult );
93 + NETRESOURCEW resourcesW, *pRes = NULL;
94 + PWSTR passW, userIDW, accessNameW = NULL;
95 + DWORD ret = WN_MORE_DATA;
96 + DWORD bufferSize = 1;
99 - SetLastError(WN_NO_NETWORK);
100 - return WN_NO_NETWORK;
103 + convert_netresourcea_to_w(lpNetResource, &resourcesW);
104 + pRes = &resourcesW;
107 + passW = strdupAtoW(lpPassword);
108 + userIDW = strdupAtoW(lpUserID);
110 + if (lpAccessName && lpBufferSize && *lpBufferSize)
114 + ret = WNetUseConnectionW(hwndOwner, pRes, passW, userIDW, dwFlags,
115 + &probe, &bufferSize, lpResult);
116 + if (ret == WN_MORE_DATA)
117 + accessNameW = HeapAlloc(GetProcessHeap(), 0, bufferSize * sizeof(WCHAR));
120 + if (ret == WN_MORE_DATA)
122 + ret = WNetUseConnectionW(hwndOwner, pRes, passW, userIDW, dwFlags,
123 + accessNameW, &bufferSize, lpResult);
124 + if (ret == WN_SUCCESS)
126 + if (lpAccessName && lpBufferSize && *lpBufferSize && accessNameW)
128 + len = WideCharToMultiByte(CP_ACP, 0, accessNameW, -1, NULL, 0, NULL, NULL);
131 + if (len <= *lpBufferSize)
132 + WideCharToMultiByte(CP_ACP, 0, accessNameW, -1, lpAccessName, len, NULL, NULL);
135 + WNetCancelConnectionW(accessNameW, TRUE);
136 + *lpBufferSize = len;
137 + ret = WN_MORE_DATA;
146 + HeapFree(GetProcessHeap(), 0, resourcesW.lpLocalName);
147 + HeapFree(GetProcessHeap(), 0, resourcesW.lpRemoteName);
148 + HeapFree(GetProcessHeap(), 0, resourcesW.lpComment);
149 + HeapFree(GetProcessHeap(), 0, resourcesW.lpProvider);
151 + HeapFree(GetProcessHeap(), 0, passW);
152 + HeapFree(GetProcessHeap(), 0, userIDW);
153 + HeapFree(GetProcessHeap(), 0, accessNameW);
158 /*****************************************************************