1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Standard WINNET Header File for WIN32
7 use shared::basetsd::ULONG_PTR;
8 use shared::minwindef::{BOOL, DWORD, LPDWORD, LPHANDLE, LPVOID, WORD};
9 use shared::windef::HWND;
10 use shared::winerror::{
11     ERROR_ACCESS_DENIED, ERROR_ALREADY_ASSIGNED, ERROR_ALREADY_INITIALIZED, ERROR_BAD_DEVICE,
12     ERROR_BAD_DEV_TYPE, ERROR_BAD_NET_NAME, ERROR_BAD_PROFILE, ERROR_BAD_PROVIDER,
13     ERROR_BAD_USERNAME, ERROR_BUSY, ERROR_CANCELLED, ERROR_CANNOT_OPEN_PROFILE,
14     ERROR_CONNECTED_OTHER_PASSWORD, ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT,
15     ERROR_CONNECTION_UNAVAIL, ERROR_DEVICE_ALREADY_REMEMBERED, ERROR_DEVICE_IN_USE,
16     ERROR_EXTENDED_ERROR, ERROR_GEN_FAILURE, ERROR_INVALID_ADDRESS, ERROR_INVALID_HANDLE,
17     ERROR_INVALID_LEVEL, ERROR_INVALID_PARAMETER, ERROR_INVALID_PASSWORD, ERROR_MORE_DATA,
18     ERROR_NOT_AUTHENTICATED, ERROR_NOT_CONNECTED, ERROR_NOT_CONTAINER, ERROR_NOT_ENOUGH_MEMORY,
19     ERROR_NOT_LOGGED_ON, ERROR_NOT_SUPPORTED, ERROR_NO_LOGON_SERVERS, ERROR_NO_MORE_DEVICES,
20     ERROR_NO_MORE_ITEMS, ERROR_NO_NETWORK, ERROR_NO_NET_OR_BAD_PATH, ERROR_OPEN_FILES, ERROR_RETRY,
21     ERROR_UNEXP_NET_ERR, NO_ERROR
22 };
23 use um::winnt::{HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR};
24 pub const RESOURCE_CONNECTED: DWORD = 0x00000001;
25 pub const RESOURCE_GLOBALNET: DWORD = 0x00000002;
26 pub const RESOURCE_REMEMBERED: DWORD = 0x00000003;
27 pub const RESOURCE_RECENT: DWORD = 0x00000004;
28 pub const RESOURCE_CONTEXT: DWORD = 0x00000005;
29 pub const RESOURCETYPE_ANY: DWORD = 0x00000000;
30 pub const RESOURCETYPE_DISK: DWORD = 0x00000001;
31 pub const RESOURCETYPE_PRINT: DWORD = 0x00000002;
32 pub const RESOURCETYPE_RESERVED: DWORD = 0x00000008;
33 pub const RESOURCETYPE_UNKNOWN: DWORD = 0xFFFFFFFF;
34 pub const RESOURCEUSAGE_CONNECTABLE: DWORD = 0x00000001;
35 pub const RESOURCEUSAGE_CONTAINER: DWORD = 0x00000002;
36 pub const RESOURCEUSAGE_NOLOCALDEVICE: DWORD = 0x00000004;
37 pub const RESOURCEUSAGE_SIBLING: DWORD = 0x00000008;
38 pub const RESOURCEUSAGE_ATTACHED: DWORD = 0x00000010;
39 pub const RESOURCEUSAGE_ALL: DWORD = RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER
40     | RESOURCEUSAGE_ATTACHED;
41 pub const RESOURCEUSAGE_RESERVED: DWORD = 0x80000000;
42 pub const RESOURCEDISPLAYTYPE_GENERIC: DWORD = 0x00000000;
43 pub const RESOURCEDISPLAYTYPE_DOMAIN: DWORD = 0x00000001;
44 pub const RESOURCEDISPLAYTYPE_SERVER: DWORD = 0x00000002;
45 pub const RESOURCEDISPLAYTYPE_SHARE: DWORD = 0x00000003;
46 pub const RESOURCEDISPLAYTYPE_FILE: DWORD = 0x00000004;
47 pub const RESOURCEDISPLAYTYPE_GROUP: DWORD = 0x00000005;
48 pub const RESOURCEDISPLAYTYPE_NETWORK: DWORD = 0x00000006;
49 pub const RESOURCEDISPLAYTYPE_ROOT: DWORD = 0x00000007;
50 pub const RESOURCEDISPLAYTYPE_SHAREADMIN: DWORD = 0x00000008;
51 pub const RESOURCEDISPLAYTYPE_DIRECTORY: DWORD = 0x00000009;
52 pub const RESOURCEDISPLAYTYPE_TREE: DWORD = 0x0000000A;
53 pub const RESOURCEDISPLAYTYPE_NDSCONTAINER: DWORD = 0x0000000B;
54 STRUCT!{struct NETRESOURCEA {
55     dwScope: DWORD,
56     dwType: DWORD,
57     dwDisplayType: DWORD,
58     dwUsage: DWORD,
59     lpLocalName: LPSTR,
60     lpRemoteName: LPSTR,
61     lpComment: LPSTR,
62     lpProvider: LPSTR,
63 }}
64 pub type LPNETRESOURCEA = *mut NETRESOURCEA;
65 STRUCT!{struct NETRESOURCEW {
66     dwScope: DWORD,
67     dwType: DWORD,
68     dwDisplayType: DWORD,
69     dwUsage: DWORD,
70     lpLocalName: LPWSTR,
71     lpRemoteName: LPWSTR,
72     lpComment: LPWSTR,
73     lpProvider: LPWSTR,
74 }}
75 pub type LPNETRESOURCEW = *mut NETRESOURCEW;
76 pub const NETPROPERTY_PERSISTENT: DWORD = 1;
77 pub const CONNECT_UPDATE_PROFILE: DWORD = 0x00000001;
78 pub const CONNECT_UPDATE_RECENT: DWORD = 0x00000002;
79 pub const CONNECT_TEMPORARY: DWORD = 0x00000004;
80 pub const CONNECT_INTERACTIVE: DWORD = 0x00000008;
81 pub const CONNECT_PROMPT: DWORD = 0x00000010;
82 pub const CONNECT_NEED_DRIVE: DWORD = 0x00000020;
83 pub const CONNECT_REFCOUNT: DWORD = 0x00000040;
84 pub const CONNECT_REDIRECT: DWORD = 0x00000080;
85 pub const CONNECT_LOCALDRIVE: DWORD = 0x00000100;
86 pub const CONNECT_CURRENT_MEDIA: DWORD = 0x00000200;
87 pub const CONNECT_DEFERRED: DWORD = 0x00000400;
88 pub const CONNECT_RESERVED: DWORD = 0xFF000000;
89 pub const CONNECT_COMMANDLINE: DWORD = 0x00000800;
90 pub const CONNECT_CMD_SAVECRED: DWORD = 0x00001000;
91 pub const CONNECT_CRED_RESET: DWORD = 0x00002000;
92 extern "system" {
WNetAddConnection2A( lpNetResource: LPNETRESOURCEA, lpPassword: LPCSTR, lpUsername: LPCSTR, dwFlags: DWORD, ) -> DWORD93     pub fn WNetAddConnection2A(
94         lpNetResource: LPNETRESOURCEA,
95         lpPassword: LPCSTR,
96         lpUsername: LPCSTR,
97         dwFlags: DWORD,
98     ) -> DWORD;
WNetAddConnection2W( lpNetResource: LPNETRESOURCEW, lpPassword: LPCWSTR, lpUsername: LPCWSTR, dwFlags: DWORD, ) -> DWORD99     pub fn WNetAddConnection2W(
100         lpNetResource: LPNETRESOURCEW,
101         lpPassword: LPCWSTR,
102         lpUsername: LPCWSTR,
103         dwFlags: DWORD,
104     ) -> DWORD;
WNetAddConnection3A( hwndOwner: HWND, lpNetResource: LPNETRESOURCEA, lpPassword: LPCSTR, lpUsername: LPCSTR, dwFlags: DWORD, ) -> DWORD105     pub fn WNetAddConnection3A(
106         hwndOwner: HWND,
107         lpNetResource: LPNETRESOURCEA,
108         lpPassword: LPCSTR,
109         lpUsername: LPCSTR,
110         dwFlags: DWORD,
111     ) -> DWORD;
WNetAddConnection3W( hwndOwner: HWND, lpNetResource: LPNETRESOURCEW, lpPassword: LPCWSTR, lpUsername: LPCWSTR, dwFlags: DWORD, ) -> DWORD112     pub fn WNetAddConnection3W(
113         hwndOwner: HWND,
114         lpNetResource: LPNETRESOURCEW,
115         lpPassword: LPCWSTR,
116         lpUsername: LPCWSTR,
117         dwFlags: DWORD,
118     ) -> DWORD;
WNetCancelConnectionA( lpName: LPCSTR, fForce: BOOL, ) -> DWORD119     pub fn WNetCancelConnectionA(
120         lpName: LPCSTR,
121         fForce: BOOL,
122     ) -> DWORD;
WNetCancelConnectionW( lpName: LPCWSTR, fForce: BOOL, ) -> DWORD123     pub fn WNetCancelConnectionW(
124         lpName: LPCWSTR,
125         fForce: BOOL,
126     ) -> DWORD;
WNetCancelConnection2A( lpName: LPCSTR, dwFlags: DWORD, fForce: BOOL, ) -> DWORD127     pub fn WNetCancelConnection2A(
128         lpName: LPCSTR,
129         dwFlags: DWORD,
130         fForce: BOOL,
131     ) -> DWORD;
WNetCancelConnection2W( lpName: LPCWSTR, dwFlags: DWORD, fForce: BOOL, ) -> DWORD132     pub fn WNetCancelConnection2W(
133         lpName: LPCWSTR,
134         dwFlags: DWORD,
135         fForce: BOOL,
136     ) -> DWORD;
WNetGetConnectionA( lpLocalName: LPCSTR, lpRemoteName: LPSTR, lpnLength: LPDWORD, ) -> DWORD137     pub fn WNetGetConnectionA(
138         lpLocalName: LPCSTR,
139         lpRemoteName: LPSTR,
140         lpnLength: LPDWORD,
141     ) -> DWORD;
WNetGetConnectionW( lpLocalName: LPCWSTR, lpRemoteName: LPWSTR, lpnLength: LPDWORD, ) -> DWORD142     pub fn WNetGetConnectionW(
143         lpLocalName: LPCWSTR,
144         lpRemoteName: LPWSTR,
145         lpnLength: LPDWORD,
146     ) -> DWORD;
WNetUseConnectionA( hwndOwner: HWND, lpNetResource: LPNETRESOURCEA, lpPassword: LPCSTR, lpUserId: LPCSTR, dwFlags: DWORD, lpAccessName: LPSTR, lpBufferSize: LPDWORD, lpResult: LPDWORD, ) -> DWORD147     pub fn WNetUseConnectionA(
148         hwndOwner: HWND,
149         lpNetResource: LPNETRESOURCEA,
150         lpPassword: LPCSTR,
151         lpUserId: LPCSTR,
152         dwFlags: DWORD,
153         lpAccessName: LPSTR,
154         lpBufferSize: LPDWORD,
155         lpResult: LPDWORD,
156     ) -> DWORD;
WNetUseConnectionW( hwndOwner: HWND, lpNetResource: LPNETRESOURCEW, lpPassword: LPCWSTR, lpUserId: LPCWSTR, dwFlags: DWORD, lpAccessName: LPWSTR, lpBufferSize: LPDWORD, lpResult: LPDWORD, ) -> DWORD157     pub fn WNetUseConnectionW(
158         hwndOwner: HWND,
159         lpNetResource: LPNETRESOURCEW,
160         lpPassword: LPCWSTR,
161         lpUserId: LPCWSTR,
162         dwFlags: DWORD,
163         lpAccessName: LPWSTR,
164         lpBufferSize: LPDWORD,
165         lpResult: LPDWORD,
166     ) -> DWORD;
WNetConnectionDialog( hwnd: HWND, dwType: DWORD, ) -> DWORD167     pub fn WNetConnectionDialog(
168         hwnd: HWND,
169         dwType: DWORD,
170     ) -> DWORD;
WNetDisconnectDialog( hwnd: HWND, dwType: DWORD, ) -> DWORD171     pub fn WNetDisconnectDialog(
172         hwnd: HWND,
173         dwType: DWORD,
174     ) -> DWORD;
175 }
176 STRUCT!{struct CONNECTDLGSTRUCTA {
177     cbStructure: DWORD,
178     hwndOwner: HWND,
179     lpConnRes: LPNETRESOURCEA,
180     dwFlags: DWORD,
181     dwDevNum: DWORD,
182 }}
183 pub type LPCONNECTDLGSTRUCTA = *mut CONNECTDLGSTRUCTA;
184 STRUCT!{struct CONNECTDLGSTRUCTW {
185     cbStructure: DWORD,
186     hwndOwner: HWND,
187     lpConnRes: LPNETRESOURCEW,
188     dwFlags: DWORD,
189     dwDevNum: DWORD,
190 }}
191 pub type LPCONNECTDLGSTRUCTW = *mut CONNECTDLGSTRUCTW;
192 pub const CONNDLG_RO_PATH: DWORD = 0x00000001;
193 pub const CONNDLG_CONN_POINT: DWORD = 0x00000002;
194 pub const CONNDLG_USE_MRU: DWORD = 0x00000004;
195 pub const CONNDLG_HIDE_BOX: DWORD = 0x00000008;
196 pub const CONNDLG_PERSIST: DWORD = 0x00000010;
197 pub const CONNDLG_NOT_PERSIST: DWORD = 0x00000020;
198 extern "system" {
WNetConnectionDialog1A( lpConnDlgStruct: LPCONNECTDLGSTRUCTA, ) -> DWORD199     pub fn WNetConnectionDialog1A(
200         lpConnDlgStruct: LPCONNECTDLGSTRUCTA,
201     ) -> DWORD;
WNetConnectionDialog1W( lpConnDlgStruct: LPCONNECTDLGSTRUCTW, ) -> DWORD202     pub fn WNetConnectionDialog1W(
203         lpConnDlgStruct: LPCONNECTDLGSTRUCTW,
204     ) -> DWORD;
205 }
206 STRUCT!{struct DISCDLGSTRUCTA {
207     cbStructure: DWORD,
208     hwndOwner: HWND,
209     lpLocalName: LPSTR,
210     lpRemoteName: LPSTR,
211     dwFlags: DWORD,
212 }}
213 pub type LPDISCDLGSTRUCTA = *mut DISCDLGSTRUCTA;
214 STRUCT!{struct DISCDLGSTRUCTW {
215     cbStructure: DWORD,
216     hwndOwner: HWND,
217     lpLocalName: LPWSTR,
218     lpRemoteName: LPWSTR,
219     dwFlags: DWORD,
220 }}
221 pub type LPDISCDLGSTRUCTW = *mut DISCDLGSTRUCTW;
222 pub const DISC_UPDATE_PROFILE: DWORD = 0x00000001;
223 pub const DISC_NO_FORCE: DWORD = 0x00000040;
224 extern "system" {
WNetDisconnectDialog1A( lpConnDlgStruct: LPDISCDLGSTRUCTA, ) -> DWORD225     pub fn WNetDisconnectDialog1A(
226         lpConnDlgStruct: LPDISCDLGSTRUCTA,
227     ) -> DWORD;
WNetDisconnectDialog1W( lpConnDlgStruct: LPDISCDLGSTRUCTW, ) -> DWORD228     pub fn WNetDisconnectDialog1W(
229         lpConnDlgStruct: LPDISCDLGSTRUCTW,
230     ) -> DWORD;
WNetOpenEnumA( dwScope: DWORD, dwType: DWORD, dwUsage: DWORD, lpNetResource: LPNETRESOURCEA, lphEnum: LPHANDLE, ) -> DWORD231     pub fn WNetOpenEnumA(
232         dwScope: DWORD,
233         dwType: DWORD,
234         dwUsage: DWORD,
235         lpNetResource: LPNETRESOURCEA,
236         lphEnum: LPHANDLE,
237     ) -> DWORD;
WNetOpenEnumW( dwScope: DWORD, dwType: DWORD, dwUsage: DWORD, lpNetResource: LPNETRESOURCEW, lphEnum: LPHANDLE, ) -> DWORD238     pub fn WNetOpenEnumW(
239         dwScope: DWORD,
240         dwType: DWORD,
241         dwUsage: DWORD,
242         lpNetResource: LPNETRESOURCEW,
243         lphEnum: LPHANDLE,
244     ) -> DWORD;
WNetEnumResourceA( hEnum: HANDLE, lpcCount: LPDWORD, lpBuffer: LPVOID, lpBufferSize: LPDWORD, ) -> DWORD245     pub fn WNetEnumResourceA(
246         hEnum: HANDLE,
247         lpcCount: LPDWORD,
248         lpBuffer: LPVOID,
249         lpBufferSize: LPDWORD,
250     ) -> DWORD;
WNetEnumResourceW( hEnum: HANDLE, lpcCount: LPDWORD, lpBuffer: LPVOID, lpBufferSize: LPDWORD, ) -> DWORD251     pub fn WNetEnumResourceW(
252         hEnum: HANDLE,
253         lpcCount: LPDWORD,
254         lpBuffer: LPVOID,
255         lpBufferSize: LPDWORD,
256     ) -> DWORD;
WNetCloseEnum( hEnum: HANDLE, ) -> DWORD257     pub fn WNetCloseEnum(
258         hEnum: HANDLE,
259     ) -> DWORD;
WNetGetResourceParentA( lpNetResource: LPNETRESOURCEA, lpBuffer: LPVOID, lpcbBuffer: LPDWORD, ) -> DWORD260     pub fn WNetGetResourceParentA(
261         lpNetResource: LPNETRESOURCEA,
262         lpBuffer: LPVOID,
263         lpcbBuffer: LPDWORD,
264     ) -> DWORD;
WNetGetResourceParentW( lpNetResource: LPNETRESOURCEW, lpBuffer: LPVOID, lpcbBuffer: LPDWORD, ) -> DWORD265     pub fn WNetGetResourceParentW(
266         lpNetResource: LPNETRESOURCEW,
267         lpBuffer: LPVOID,
268         lpcbBuffer: LPDWORD,
269     ) -> DWORD;
WNetGetResourceInformationA( lpNetResource: LPNETRESOURCEA, lpBuffer: LPVOID, lpcbBuffer: LPDWORD, lplpSystem: *mut LPSTR, ) -> DWORD270     pub fn WNetGetResourceInformationA(
271         lpNetResource: LPNETRESOURCEA,
272         lpBuffer: LPVOID,
273         lpcbBuffer: LPDWORD,
274         lplpSystem: *mut LPSTR,
275     ) -> DWORD;
WNetGetResourceInformationW( lpNetResource: LPNETRESOURCEW, lpBuffer: LPVOID, lpcbBuffer: LPDWORD, lplpSystem: *mut LPWSTR, ) -> DWORD276     pub fn WNetGetResourceInformationW(
277         lpNetResource: LPNETRESOURCEW,
278         lpBuffer: LPVOID,
279         lpcbBuffer: LPDWORD,
280         lplpSystem: *mut LPWSTR,
281     ) -> DWORD;
282 }
283 pub const UNIVERSAL_NAME_INFO_LEVEL: DWORD = 0x00000001;
284 pub const REMOTE_NAME_INFO_LEVEL: DWORD = 0x00000002;
285 STRUCT!{struct UNIVERSAL_NAME_INFOA {
286     lpUniversalName: LPSTR,
287 }}
288 pub type LPUNIVERSAL_NAME_INFOA = *mut UNIVERSAL_NAME_INFOA;
289 STRUCT!{struct UNIVERSAL_NAME_INFOW {
290     lpUniversalName: LPWSTR,
291 }}
292 pub type LPUNIVERSAL_NAME_INFOW = *mut UNIVERSAL_NAME_INFOW;
293 STRUCT!{struct REMOTE_NAME_INFOA {
294     lpUniversalName: LPSTR,
295     lpConnectionName: LPSTR,
296     lpRemainingPath: LPSTR,
297 }}
298 pub type LPREMOTE_NAME_INFOA = *mut REMOTE_NAME_INFOA;
299 STRUCT!{struct REMOTE_NAME_INFOW {
300     lpUniversalName: LPWSTR,
301     lpConnectionName: LPWSTR,
302     lpRemainingPath: LPWSTR,
303 }}
304 pub type LPREMOTE_NAME_INFOW = *mut REMOTE_NAME_INFOW;
305 extern "system" {
WNetGetUniversalNameA( lpLocalPath: LPCSTR, dwInfoLevel: DWORD, lpBuffer: LPVOID, lpBufferSize: LPDWORD, ) -> DWORD306     pub fn WNetGetUniversalNameA(
307         lpLocalPath: LPCSTR,
308         dwInfoLevel: DWORD,
309         lpBuffer: LPVOID,
310         lpBufferSize: LPDWORD,
311     ) -> DWORD;
WNetGetUniversalNameW( lpLocalPath: LPCWSTR, dwInfoLevel: DWORD, lpBuffer: LPVOID, lpBufferSize: LPDWORD, ) -> DWORD312     pub fn WNetGetUniversalNameW(
313         lpLocalPath: LPCWSTR,
314         dwInfoLevel: DWORD,
315         lpBuffer: LPVOID,
316         lpBufferSize: LPDWORD,
317     ) -> DWORD;
WNetGetUserA( lpName: LPCSTR, lpUserName: LPSTR, lpnLength: LPDWORD, ) -> DWORD318     pub fn WNetGetUserA(
319         lpName: LPCSTR,
320         lpUserName: LPSTR,
321         lpnLength: LPDWORD,
322     ) -> DWORD;
WNetGetUserW( lpName: LPCWSTR, lpUserName: LPWSTR, lpnLength: LPDWORD, ) -> DWORD323     pub fn WNetGetUserW(
324         lpName: LPCWSTR,
325         lpUserName: LPWSTR,
326         lpnLength: LPDWORD,
327     ) -> DWORD;
328 }
329 pub const WNFMT_MULTILINE: DWORD = 0x01;
330 pub const WNFMT_ABBREVIATED: DWORD = 0x02;
331 pub const WNFMT_INENUM: DWORD = 0x10;
332 pub const WNFMT_CONNECTION: DWORD = 0x20;
333 extern "system" {
WNetGetProviderNameA( dwNetType: DWORD, lpProviderName: LPSTR, lpBufferSize: LPDWORD, ) -> DWORD334     pub fn WNetGetProviderNameA(
335         dwNetType: DWORD,
336         lpProviderName: LPSTR,
337         lpBufferSize: LPDWORD,
338     ) -> DWORD;
WNetGetProviderNameW( dwNetType: DWORD, lpProviderName: LPWSTR, lpBufferSize: LPDWORD, ) -> DWORD339     pub fn WNetGetProviderNameW(
340         dwNetType: DWORD,
341         lpProviderName: LPWSTR,
342         lpBufferSize: LPDWORD,
343     ) -> DWORD;
344 }
345 STRUCT!{struct NETINFOSTRUCT {
346     cbStructure: DWORD,
347     dwProviderVersion: DWORD,
348     dwStatus: DWORD,
349     dwCharacteristics: DWORD,
350     dwHandle: ULONG_PTR,
351     wNetType: WORD,
352     dwPrinters: DWORD,
353     dwDrives: DWORD,
354 }}
355 pub type LPNETINFOSTRUCT = *mut NETINFOSTRUCT;
356 pub const NETINFO_DLL16: DWORD = 0x00000001;
357 pub const NETINFO_DISKRED: DWORD = 0x00000004;
358 pub const NETINFO_PRINTERRED: DWORD = 0x00000008;
359 extern "system" {
WNetGetNetworkInformationA( lpProvider: LPCSTR, lpNetInfoStruct: LPNETINFOSTRUCT, ) -> DWORD360     pub fn WNetGetNetworkInformationA(
361         lpProvider: LPCSTR,
362         lpNetInfoStruct: LPNETINFOSTRUCT,
363     ) -> DWORD;
WNetGetNetworkInformationW( lpProvider: LPCWSTR, lpNetInfoStruct: LPNETINFOSTRUCT, ) -> DWORD364     pub fn WNetGetNetworkInformationW(
365         lpProvider: LPCWSTR,
366         lpNetInfoStruct: LPNETINFOSTRUCT,
367     ) -> DWORD;
WNetGetLastErrorA( lpError: LPDWORD, lpErrorBuf: LPSTR, nErrorBufSize: DWORD, lpNameBuf: LPSTR, nNameBufSize: DWORD, ) -> DWORD368     pub fn WNetGetLastErrorA(
369         lpError: LPDWORD,
370         lpErrorBuf: LPSTR,
371         nErrorBufSize: DWORD,
372         lpNameBuf: LPSTR,
373         nNameBufSize: DWORD,
374     ) -> DWORD;
WNetGetLastErrorW( lpError: LPDWORD, lpErrorBuf: LPWSTR, nErrorBufSize: DWORD, lpNameBuf: LPWSTR, nNameBufSize: DWORD, ) -> DWORD375     pub fn WNetGetLastErrorW(
376         lpError: LPDWORD,
377         lpErrorBuf: LPWSTR,
378         nErrorBufSize: DWORD,
379         lpNameBuf: LPWSTR,
380         nNameBufSize: DWORD,
381     ) -> DWORD;
382 }
383 pub const WN_SUCCESS: DWORD = NO_ERROR;
384 pub const WN_NO_ERROR: DWORD = NO_ERROR;
385 pub const WN_NOT_SUPPORTED: DWORD = ERROR_NOT_SUPPORTED;
386 pub const WN_CANCEL: DWORD = ERROR_CANCELLED;
387 pub const WN_RETRY: DWORD = ERROR_RETRY;
388 pub const WN_NET_ERROR: DWORD = ERROR_UNEXP_NET_ERR;
389 pub const WN_MORE_DATA: DWORD = ERROR_MORE_DATA;
390 pub const WN_BAD_POINTER: DWORD = ERROR_INVALID_ADDRESS;
391 pub const WN_BAD_VALUE: DWORD = ERROR_INVALID_PARAMETER;
392 pub const WN_BAD_USER: DWORD = ERROR_BAD_USERNAME;
393 pub const WN_BAD_PASSWORD: DWORD = ERROR_INVALID_PASSWORD;
394 pub const WN_ACCESS_DENIED: DWORD = ERROR_ACCESS_DENIED;
395 pub const WN_FUNCTION_BUSY: DWORD = ERROR_BUSY;
396 pub const WN_WINDOWS_ERROR: DWORD = ERROR_UNEXP_NET_ERR;
397 pub const WN_OUT_OF_MEMORY: DWORD = ERROR_NOT_ENOUGH_MEMORY;
398 pub const WN_NO_NETWORK: DWORD = ERROR_NO_NETWORK;
399 pub const WN_EXTENDED_ERROR: DWORD = ERROR_EXTENDED_ERROR;
400 pub const WN_BAD_LEVEL: DWORD = ERROR_INVALID_LEVEL;
401 pub const WN_BAD_HANDLE: DWORD = ERROR_INVALID_HANDLE;
402 pub const WN_NOT_INITIALIZING: DWORD = ERROR_ALREADY_INITIALIZED;
403 pub const WN_NO_MORE_DEVICES: DWORD = ERROR_NO_MORE_DEVICES;
404 pub const WN_NOT_CONNECTED: DWORD = ERROR_NOT_CONNECTED;
405 pub const WN_OPEN_FILES: DWORD = ERROR_OPEN_FILES;
406 pub const WN_DEVICE_IN_USE: DWORD = ERROR_DEVICE_IN_USE;
407 pub const WN_BAD_NETNAME: DWORD = ERROR_BAD_NET_NAME;
408 pub const WN_BAD_LOCALNAME: DWORD = ERROR_BAD_DEVICE;
409 pub const WN_ALREADY_CONNECTED: DWORD = ERROR_ALREADY_ASSIGNED;
410 pub const WN_DEVICE_ERROR: DWORD = ERROR_GEN_FAILURE;
411 pub const WN_CONNECTION_CLOSED: DWORD = ERROR_CONNECTION_UNAVAIL;
412 pub const WN_NO_NET_OR_BAD_PATH: DWORD = ERROR_NO_NET_OR_BAD_PATH;
413 pub const WN_BAD_PROVIDER: DWORD = ERROR_BAD_PROVIDER;
414 pub const WN_CANNOT_OPEN_PROFILE: DWORD = ERROR_CANNOT_OPEN_PROFILE;
415 pub const WN_BAD_PROFILE: DWORD = ERROR_BAD_PROFILE;
416 pub const WN_BAD_DEV_TYPE: DWORD = ERROR_BAD_DEV_TYPE;
417 pub const WN_DEVICE_ALREADY_REMEMBERED: DWORD = ERROR_DEVICE_ALREADY_REMEMBERED;
418 pub const WN_CONNECTED_OTHER_PASSWORD: DWORD = ERROR_CONNECTED_OTHER_PASSWORD;
419 pub const WN_CONNECTED_OTHER_PASSWORD_DEFAULT: DWORD = ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT;
420 pub const WN_NO_MORE_ENTRIES: DWORD = ERROR_NO_MORE_ITEMS;
421 pub const WN_NOT_CONTAINER: DWORD = ERROR_NOT_CONTAINER;
422 pub const WN_NOT_AUTHENTICATED: DWORD = ERROR_NOT_AUTHENTICATED;
423 pub const WN_NOT_LOGGED_ON: DWORD = ERROR_NOT_LOGGED_ON;
424 pub const WN_NOT_VALIDATED: DWORD = ERROR_NO_LOGON_SERVERS;
425 STRUCT!{struct NETCONNECTINFOSTRUCT {
426     cbStructure: DWORD,
427     dwFlags: DWORD,
428     dwSpeed: DWORD,
429     dwDelay: DWORD,
430     dwOptDataSize: DWORD,
431 }}
432 pub type LPNETCONNECTINFOSTRUCT = *mut NETCONNECTINFOSTRUCT;
433 pub const WNCON_FORNETCARD: DWORD = 0x00000001;
434 pub const WNCON_NOTROUTED: DWORD = 0x00000002;
435 pub const WNCON_SLOWLINK: DWORD = 0x00000004;
436 pub const WNCON_DYNAMIC: DWORD = 0x00000008;
437 extern "system" {
MultinetGetConnectionPerformanceA( lpNetResource: LPNETRESOURCEA, lpNetConnectInfoStruct: LPNETCONNECTINFOSTRUCT, ) -> DWORD438     pub fn MultinetGetConnectionPerformanceA(
439         lpNetResource: LPNETRESOURCEA,
440         lpNetConnectInfoStruct: LPNETCONNECTINFOSTRUCT,
441     ) -> DWORD;
MultinetGetConnectionPerformanceW( lpNetResource: LPNETRESOURCEW, lpNetConnectInfoStruct: LPNETCONNECTINFOSTRUCT, ) -> DWORD442     pub fn MultinetGetConnectionPerformanceW(
443         lpNetResource: LPNETRESOURCEW,
444         lpNetConnectInfoStruct: LPNETCONNECTINFOSTRUCT,
445     ) -> DWORD;
446 }
447