1use shared::basetsd::ULONG_PTR;
8use shared::minwindef::{BOOL, DWORD, LPDWORD, LPHANDLE, LPVOID, WORD};
9use shared::windef::HWND;
10use 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};
23use um::winnt::{HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR};
24pub const RESOURCE_CONNECTED: DWORD = 0x00000001;
25pub const RESOURCE_GLOBALNET: DWORD = 0x00000002;
26pub const RESOURCE_REMEMBERED: DWORD = 0x00000003;
27pub const RESOURCE_RECENT: DWORD = 0x00000004;
28pub const RESOURCE_CONTEXT: DWORD = 0x00000005;
29pub const RESOURCETYPE_ANY: DWORD = 0x00000000;
30pub const RESOURCETYPE_DISK: DWORD = 0x00000001;
31pub const RESOURCETYPE_PRINT: DWORD = 0x00000002;
32pub const RESOURCETYPE_RESERVED: DWORD = 0x00000008;
33pub const RESOURCETYPE_UNKNOWN: DWORD = 0xFFFFFFFF;
34pub const RESOURCEUSAGE_CONNECTABLE: DWORD = 0x00000001;
35pub const RESOURCEUSAGE_CONTAINER: DWORD = 0x00000002;
36pub const RESOURCEUSAGE_NOLOCALDEVICE: DWORD = 0x00000004;
37pub const RESOURCEUSAGE_SIBLING: DWORD = 0x00000008;
38pub const RESOURCEUSAGE_ATTACHED: DWORD = 0x00000010;
39pub const RESOURCEUSAGE_ALL: DWORD = RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER
40 | RESOURCEUSAGE_ATTACHED;
41pub const RESOURCEUSAGE_RESERVED: DWORD = 0x80000000;
42pub const RESOURCEDISPLAYTYPE_GENERIC: DWORD = 0x00000000;
43pub const RESOURCEDISPLAYTYPE_DOMAIN: DWORD = 0x00000001;
44pub const RESOURCEDISPLAYTYPE_SERVER: DWORD = 0x00000002;
45pub const RESOURCEDISPLAYTYPE_SHARE: DWORD = 0x00000003;
46pub const RESOURCEDISPLAYTYPE_FILE: DWORD = 0x00000004;
47pub const RESOURCEDISPLAYTYPE_GROUP: DWORD = 0x00000005;
48pub const RESOURCEDISPLAYTYPE_NETWORK: DWORD = 0x00000006;
49pub const RESOURCEDISPLAYTYPE_ROOT: DWORD = 0x00000007;
50pub const RESOURCEDISPLAYTYPE_SHAREADMIN: DWORD = 0x00000008;
51pub const RESOURCEDISPLAYTYPE_DIRECTORY: DWORD = 0x00000009;
52pub const RESOURCEDISPLAYTYPE_TREE: DWORD = 0x0000000A;
53pub const RESOURCEDISPLAYTYPE_NDSCONTAINER: DWORD = 0x0000000B;
54STRUCT!{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}}
64pub type LPNETRESOURCEA = *mut NETRESOURCEA;
65STRUCT!{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}}
75pub type LPNETRESOURCEW = *mut NETRESOURCEW;
76pub const NETPROPERTY_PERSISTENT: DWORD = 1;
77pub const CONNECT_UPDATE_PROFILE: DWORD = 0x00000001;
78pub const CONNECT_UPDATE_RECENT: DWORD = 0x00000002;
79pub const CONNECT_TEMPORARY: DWORD = 0x00000004;
80pub const CONNECT_INTERACTIVE: DWORD = 0x00000008;
81pub const CONNECT_PROMPT: DWORD = 0x00000010;
82pub const CONNECT_NEED_DRIVE: DWORD = 0x00000020;
83pub const CONNECT_REFCOUNT: DWORD = 0x00000040;
84pub const CONNECT_REDIRECT: DWORD = 0x00000080;
85pub const CONNECT_LOCALDRIVE: DWORD = 0x00000100;
86pub const CONNECT_CURRENT_MEDIA: DWORD = 0x00000200;
87pub const CONNECT_DEFERRED: DWORD = 0x00000400;
88pub const CONNECT_RESERVED: DWORD = 0xFF000000;
89pub const CONNECT_COMMANDLINE: DWORD = 0x00000800;
90pub const CONNECT_CMD_SAVECRED: DWORD = 0x00001000;
91pub const CONNECT_CRED_RESET: DWORD = 0x00002000;
92extern "system" {
93 pub fn WNetAddConnection2A(
94 lpNetResource: LPNETRESOURCEA,
95 lpPassword: LPCSTR,
96 lpUsername: LPCSTR,
97 dwFlags: DWORD,
98 ) -> DWORD;
99 pub fn WNetAddConnection2W(
100 lpNetResource: LPNETRESOURCEW,
101 lpPassword: LPCWSTR,
102 lpUsername: LPCWSTR,
103 dwFlags: DWORD,
104 ) -> DWORD;
105 pub fn WNetAddConnection3A(
106 hwndOwner: HWND,
107 lpNetResource: LPNETRESOURCEA,
108 lpPassword: LPCSTR,
109 lpUsername: LPCSTR,
110 dwFlags: DWORD,
111 ) -> DWORD;
112 pub fn WNetAddConnection3W(
113 hwndOwner: HWND,
114 lpNetResource: LPNETRESOURCEW,
115 lpPassword: LPCWSTR,
116 lpUsername: LPCWSTR,
117 dwFlags: DWORD,
118 ) -> DWORD;
119 pub fn WNetCancelConnectionA(
120 lpName: LPCSTR,
121 fForce: BOOL,
122 ) -> DWORD;
123 pub fn WNetCancelConnectionW(
124 lpName: LPCWSTR,
125 fForce: BOOL,
126 ) -> DWORD;
127 pub fn WNetCancelConnection2A(
128 lpName: LPCSTR,
129 dwFlags: DWORD,
130 fForce: BOOL,
131 ) -> DWORD;
132 pub fn WNetCancelConnection2W(
133 lpName: LPCWSTR,
134 dwFlags: DWORD,
135 fForce: BOOL,
136 ) -> DWORD;
137 pub fn WNetGetConnectionA(
138 lpLocalName: LPCSTR,
139 lpRemoteName: LPSTR,
140 lpnLength: LPDWORD,
141 ) -> DWORD;
142 pub fn WNetGetConnectionW(
143 lpLocalName: LPCWSTR,
144 lpRemoteName: LPWSTR,
145 lpnLength: LPDWORD,
146 ) -> DWORD;
147 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;
157 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;
167 pub fn WNetConnectionDialog(
168 hwnd: HWND,
169 dwType: DWORD,
170 ) -> DWORD;
171 pub fn WNetDisconnectDialog(
172 hwnd: HWND,
173 dwType: DWORD,
174 ) -> DWORD;
175}
176STRUCT!{struct CONNECTDLGSTRUCTA {
177 cbStructure: DWORD,
178 hwndOwner: HWND,
179 lpConnRes: LPNETRESOURCEA,
180 dwFlags: DWORD,
181 dwDevNum: DWORD,
182}}
183pub type LPCONNECTDLGSTRUCTA = *mut CONNECTDLGSTRUCTA;
184STRUCT!{struct CONNECTDLGSTRUCTW {
185 cbStructure: DWORD,
186 hwndOwner: HWND,
187 lpConnRes: LPNETRESOURCEW,
188 dwFlags: DWORD,
189 dwDevNum: DWORD,
190}}
191pub type LPCONNECTDLGSTRUCTW = *mut CONNECTDLGSTRUCTW;
192pub const CONNDLG_RO_PATH: DWORD = 0x00000001;
193pub const CONNDLG_CONN_POINT: DWORD = 0x00000002;
194pub const CONNDLG_USE_MRU: DWORD = 0x00000004;
195pub const CONNDLG_HIDE_BOX: DWORD = 0x00000008;
196pub const CONNDLG_PERSIST: DWORD = 0x00000010;
197pub const CONNDLG_NOT_PERSIST: DWORD = 0x00000020;
198extern "system" {
199 pub fn WNetConnectionDialog1A(
200 lpConnDlgStruct: LPCONNECTDLGSTRUCTA,
201 ) -> DWORD;
202 pub fn WNetConnectionDialog1W(
203 lpConnDlgStruct: LPCONNECTDLGSTRUCTW,
204 ) -> DWORD;
205}
206STRUCT!{struct DISCDLGSTRUCTA {
207 cbStructure: DWORD,
208 hwndOwner: HWND,
209 lpLocalName: LPSTR,
210 lpRemoteName: LPSTR,
211 dwFlags: DWORD,
212}}
213pub type LPDISCDLGSTRUCTA = *mut DISCDLGSTRUCTA;
214STRUCT!{struct DISCDLGSTRUCTW {
215 cbStructure: DWORD,
216 hwndOwner: HWND,
217 lpLocalName: LPWSTR,
218 lpRemoteName: LPWSTR,
219 dwFlags: DWORD,
220}}
221pub type LPDISCDLGSTRUCTW = *mut DISCDLGSTRUCTW;
222pub const DISC_UPDATE_PROFILE: DWORD = 0x00000001;
223pub const DISC_NO_FORCE: DWORD = 0x00000040;
224extern "system" {
225 pub fn WNetDisconnectDialog1A(
226 lpConnDlgStruct: LPDISCDLGSTRUCTA,
227 ) -> DWORD;
228 pub fn WNetDisconnectDialog1W(
229 lpConnDlgStruct: LPDISCDLGSTRUCTW,
230 ) -> DWORD;
231 pub fn WNetOpenEnumA(
232 dwScope: DWORD,
233 dwType: DWORD,
234 dwUsage: DWORD,
235 lpNetResource: LPNETRESOURCEA,
236 lphEnum: LPHANDLE,
237 ) -> DWORD;
238 pub fn WNetOpenEnumW(
239 dwScope: DWORD,
240 dwType: DWORD,
241 dwUsage: DWORD,
242 lpNetResource: LPNETRESOURCEW,
243 lphEnum: LPHANDLE,
244 ) -> DWORD;
245 pub fn WNetEnumResourceA(
246 hEnum: HANDLE,
247 lpcCount: LPDWORD,
248 lpBuffer: LPVOID,
249 lpBufferSize: LPDWORD,
250 ) -> DWORD;
251 pub fn WNetEnumResourceW(
252 hEnum: HANDLE,
253 lpcCount: LPDWORD,
254 lpBuffer: LPVOID,
255 lpBufferSize: LPDWORD,
256 ) -> DWORD;
257 pub fn WNetCloseEnum(
258 hEnum: HANDLE,
259 ) -> DWORD;
260 pub fn WNetGetResourceParentA(
261 lpNetResource: LPNETRESOURCEA,
262 lpBuffer: LPVOID,
263 lpcbBuffer: LPDWORD,
264 ) -> DWORD;
265 pub fn WNetGetResourceParentW(
266 lpNetResource: LPNETRESOURCEW,
267 lpBuffer: LPVOID,
268 lpcbBuffer: LPDWORD,
269 ) -> DWORD;
270 pub fn WNetGetResourceInformationA(
271 lpNetResource: LPNETRESOURCEA,
272 lpBuffer: LPVOID,
273 lpcbBuffer: LPDWORD,
274 lplpSystem: *mut LPSTR,
275 ) -> DWORD;
276 pub fn WNetGetResourceInformationW(
277 lpNetResource: LPNETRESOURCEW,
278 lpBuffer: LPVOID,
279 lpcbBuffer: LPDWORD,
280 lplpSystem: *mut LPWSTR,
281 ) -> DWORD;
282}
283pub const UNIVERSAL_NAME_INFO_LEVEL: DWORD = 0x00000001;
284pub const REMOTE_NAME_INFO_LEVEL: DWORD = 0x00000002;
285STRUCT!{struct UNIVERSAL_NAME_INFOA {
286 lpUniversalName: LPSTR,
287}}
288pub type LPUNIVERSAL_NAME_INFOA = *mut UNIVERSAL_NAME_INFOA;
289STRUCT!{struct UNIVERSAL_NAME_INFOW {
290 lpUniversalName: LPWSTR,
291}}
292pub type LPUNIVERSAL_NAME_INFOW = *mut UNIVERSAL_NAME_INFOW;
293STRUCT!{struct REMOTE_NAME_INFOA {
294 lpUniversalName: LPSTR,
295 lpConnectionName: LPSTR,
296 lpRemainingPath: LPSTR,
297}}
298pub type LPREMOTE_NAME_INFOA = *mut REMOTE_NAME_INFOA;
299STRUCT!{struct REMOTE_NAME_INFOW {
300 lpUniversalName: LPWSTR,
301 lpConnectionName: LPWSTR,
302 lpRemainingPath: LPWSTR,
303}}
304pub type LPREMOTE_NAME_INFOW = *mut REMOTE_NAME_INFOW;
305extern "system" {
306 pub fn WNetGetUniversalNameA(
307 lpLocalPath: LPCSTR,
308 dwInfoLevel: DWORD,
309 lpBuffer: LPVOID,
310 lpBufferSize: LPDWORD,
311 ) -> DWORD;
312 pub fn WNetGetUniversalNameW(
313 lpLocalPath: LPCWSTR,
314 dwInfoLevel: DWORD,
315 lpBuffer: LPVOID,
316 lpBufferSize: LPDWORD,
317 ) -> DWORD;
318 pub fn WNetGetUserA(
319 lpName: LPCSTR,
320 lpUserName: LPSTR,
321 lpnLength: LPDWORD,
322 ) -> DWORD;
323 pub fn WNetGetUserW(
324 lpName: LPCWSTR,
325 lpUserName: LPWSTR,
326 lpnLength: LPDWORD,
327 ) -> DWORD;
328}
329pub const WNFMT_MULTILINE: DWORD = 0x01;
330pub const WNFMT_ABBREVIATED: DWORD = 0x02;
331pub const WNFMT_INENUM: DWORD = 0x10;
332pub const WNFMT_CONNECTION: DWORD = 0x20;
333extern "system" {
334 pub fn WNetGetProviderNameA(
335 dwNetType: DWORD,
336 lpProviderName: LPSTR,
337 lpBufferSize: LPDWORD,
338 ) -> DWORD;
339 pub fn WNetGetProviderNameW(
340 dwNetType: DWORD,
341 lpProviderName: LPWSTR,
342 lpBufferSize: LPDWORD,
343 ) -> DWORD;
344}
345STRUCT!{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}}
355pub type LPNETINFOSTRUCT = *mut NETINFOSTRUCT;
356pub const NETINFO_DLL16: DWORD = 0x00000001;
357pub const NETINFO_DISKRED: DWORD = 0x00000004;
358pub const NETINFO_PRINTERRED: DWORD = 0x00000008;
359extern "system" {
360 pub fn WNetGetNetworkInformationA(
361 lpProvider: LPCSTR,
362 lpNetInfoStruct: LPNETINFOSTRUCT,
363 ) -> DWORD;
364 pub fn WNetGetNetworkInformationW(
365 lpProvider: LPCWSTR,
366 lpNetInfoStruct: LPNETINFOSTRUCT,
367 ) -> DWORD;
368 pub fn WNetGetLastErrorA(
369 lpError: LPDWORD,
370 lpErrorBuf: LPSTR,
371 nErrorBufSize: DWORD,
372 lpNameBuf: LPSTR,
373 nNameBufSize: DWORD,
374 ) -> DWORD;
375 pub fn WNetGetLastErrorW(
376 lpError: LPDWORD,
377 lpErrorBuf: LPWSTR,
378 nErrorBufSize: DWORD,
379 lpNameBuf: LPWSTR,
380 nNameBufSize: DWORD,
381 ) -> DWORD;
382}
383pub const WN_SUCCESS: DWORD = NO_ERROR;
384pub const WN_NO_ERROR: DWORD = NO_ERROR;
385pub const WN_NOT_SUPPORTED: DWORD = ERROR_NOT_SUPPORTED;
386pub const WN_CANCEL: DWORD = ERROR_CANCELLED;
387pub const WN_RETRY: DWORD = ERROR_RETRY;
388pub const WN_NET_ERROR: DWORD = ERROR_UNEXP_NET_ERR;
389pub const WN_MORE_DATA: DWORD = ERROR_MORE_DATA;
390pub const WN_BAD_POINTER: DWORD = ERROR_INVALID_ADDRESS;
391pub const WN_BAD_VALUE: DWORD = ERROR_INVALID_PARAMETER;
392pub const WN_BAD_USER: DWORD = ERROR_BAD_USERNAME;
393pub const WN_BAD_PASSWORD: DWORD = ERROR_INVALID_PASSWORD;
394pub const WN_ACCESS_DENIED: DWORD = ERROR_ACCESS_DENIED;
395pub const WN_FUNCTION_BUSY: DWORD = ERROR_BUSY;
396pub const WN_WINDOWS_ERROR: DWORD = ERROR_UNEXP_NET_ERR;
397pub const WN_OUT_OF_MEMORY: DWORD = ERROR_NOT_ENOUGH_MEMORY;
398pub const WN_NO_NETWORK: DWORD = ERROR_NO_NETWORK;
399pub const WN_EXTENDED_ERROR: DWORD = ERROR_EXTENDED_ERROR;
400pub const WN_BAD_LEVEL: DWORD = ERROR_INVALID_LEVEL;
401pub const WN_BAD_HANDLE: DWORD = ERROR_INVALID_HANDLE;
402pub const WN_NOT_INITIALIZING: DWORD = ERROR_ALREADY_INITIALIZED;
403pub const WN_NO_MORE_DEVICES: DWORD = ERROR_NO_MORE_DEVICES;
404pub const WN_NOT_CONNECTED: DWORD = ERROR_NOT_CONNECTED;
405pub const WN_OPEN_FILES: DWORD = ERROR_OPEN_FILES;
406pub const WN_DEVICE_IN_USE: DWORD = ERROR_DEVICE_IN_USE;
407pub const WN_BAD_NETNAME: DWORD = ERROR_BAD_NET_NAME;
408pub const WN_BAD_LOCALNAME: DWORD = ERROR_BAD_DEVICE;
409pub const WN_ALREADY_CONNECTED: DWORD = ERROR_ALREADY_ASSIGNED;
410pub const WN_DEVICE_ERROR: DWORD = ERROR_GEN_FAILURE;
411pub const WN_CONNECTION_CLOSED: DWORD = ERROR_CONNECTION_UNAVAIL;
412pub const WN_NO_NET_OR_BAD_PATH: DWORD = ERROR_NO_NET_OR_BAD_PATH;
413pub const WN_BAD_PROVIDER: DWORD = ERROR_BAD_PROVIDER;
414pub const WN_CANNOT_OPEN_PROFILE: DWORD = ERROR_CANNOT_OPEN_PROFILE;
415pub const WN_BAD_PROFILE: DWORD = ERROR_BAD_PROFILE;
416pub const WN_BAD_DEV_TYPE: DWORD = ERROR_BAD_DEV_TYPE;
417pub const WN_DEVICE_ALREADY_REMEMBERED: DWORD = ERROR_DEVICE_ALREADY_REMEMBERED;
418pub const WN_CONNECTED_OTHER_PASSWORD: DWORD = ERROR_CONNECTED_OTHER_PASSWORD;
419pub const WN_CONNECTED_OTHER_PASSWORD_DEFAULT: DWORD = ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT;
420pub const WN_NO_MORE_ENTRIES: DWORD = ERROR_NO_MORE_ITEMS;
421pub const WN_NOT_CONTAINER: DWORD = ERROR_NOT_CONTAINER;
422pub const WN_NOT_AUTHENTICATED: DWORD = ERROR_NOT_AUTHENTICATED;
423pub const WN_NOT_LOGGED_ON: DWORD = ERROR_NOT_LOGGED_ON;
424pub const WN_NOT_VALIDATED: DWORD = ERROR_NO_LOGON_SERVERS;
425STRUCT!{struct NETCONNECTINFOSTRUCT {
426 cbStructure: DWORD,
427 dwFlags: DWORD,
428 dwSpeed: DWORD,
429 dwDelay: DWORD,
430 dwOptDataSize: DWORD,
431}}
432pub type LPNETCONNECTINFOSTRUCT = *mut NETCONNECTINFOSTRUCT;
433pub const WNCON_FORNETCARD: DWORD = 0x00000001;
434pub const WNCON_NOTROUTED: DWORD = 0x00000002;
435pub const WNCON_SLOWLINK: DWORD = 0x00000004;
436pub const WNCON_DYNAMIC: DWORD = 0x00000008;
437extern "system" {
438 pub fn MultinetGetConnectionPerformanceA(
439 lpNetResource: LPNETRESOURCEA,
440 lpNetConnectInfoStruct: LPNETCONNECTINFOSTRUCT,
441 ) -> DWORD;
442 pub fn MultinetGetConnectionPerformanceW(
443 lpNetResource: LPNETRESOURCEW,
444 lpNetConnectInfoStruct: LPNETCONNECTINFOSTRUCT,
445 ) -> DWORD;
446}