1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Stewart Gordon
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC core/sys/windows/_winnetwk.d)
9  */
10 module core.sys.windows.winnetwk;
11 version (Windows):
12 
13 version (ANSI) {} else version = Unicode;
14 pragma(lib, "mpr");
15 
16 import core.sys.windows.winbase, core.sys.windows.winerror, core.sys.windows.winnt;
17 
18 enum : DWORD {
19     WNNC_NET_MSNET       = 0x00010000,
20     WNNC_NET_LANMAN      = 0x00020000,
21     WNNC_NET_NETWARE     = 0x00030000,
22     WNNC_NET_VINES       = 0x00040000,
23     WNNC_NET_10NET       = 0x00050000,
24     WNNC_NET_LOCUS       = 0x00060000,
25     WNNC_NET_SUN_PC_NFS  = 0x00070000,
26     WNNC_NET_LANSTEP     = 0x00080000,
27     WNNC_NET_9TILES      = 0x00090000,
28     WNNC_NET_LANTASTIC   = 0x000A0000,
29     WNNC_NET_AS400       = 0x000B0000,
30     WNNC_NET_FTP_NFS     = 0x000C0000,
31     WNNC_NET_PATHWORKS   = 0x000D0000,
32     WNNC_NET_LIFENET     = 0x000E0000,
33     WNNC_NET_POWERLAN    = 0x000F0000,
34     WNNC_NET_BWNFS       = 0x00100000,
35     WNNC_NET_COGENT      = 0x00110000,
36     WNNC_NET_FARALLON    = 0x00120000,
37     WNNC_NET_APPLETALK   = 0x00130000,
38     WNNC_NET_INTERGRAPH  = 0x00140000,
39     WNNC_NET_SYMFONET    = 0x00150000,
40     WNNC_NET_CLEARCASE   = 0x00160000,
41     WNNC_NET_FRONTIER    = 0x00170000,
42     WNNC_NET_BMC         = 0x00180000,
43     WNNC_NET_DCE         = 0x00190000,
44     WNNC_NET_AVID        = 0x001A0000,
45     WNNC_NET_DOCUSPACE   = 0x001B0000,
46     WNNC_NET_MANGOSOFT   = 0x001C0000,
47     WNNC_NET_SERNET      = 0x001D0000,
48     WNNC_NET_DECORB      = 0x00200000,
49     WNNC_NET_PROTSTOR    = 0x00210000,
50     WNNC_NET_FJ_REDIR    = 0x00220000,
51     WNNC_NET_DISTINCT    = 0x00230000,
52     WNNC_NET_TWINS       = 0x00240000,
53     WNNC_NET_RDR2SAMPLE  = 0x00250000,
54     WNNC_NET_CSC         = 0x00260000,
55     WNNC_NET_3IN1        = 0x00270000,
56     WNNC_NET_EXTENDNET   = 0x00290000,
57     WNNC_NET_OBJECT_DIRE = 0x00300000,
58     WNNC_NET_MASFAX      = 0x00310000,
59     WNNC_NET_HOB_NFS     = 0x00320000,
60     WNNC_NET_SHIVA       = 0x00330000,
61     WNNC_NET_IBMAL       = 0x00340000,
62     WNNC_CRED_MANAGER    = 0xFFFF0000
63 }
64 
65 enum : DWORD {
66     RESOURCE_CONNECTED  = 1,
67     RESOURCE_GLOBALNET  = 2,
68     RESOURCE_REMEMBERED = 3,
69     RESOURCE_RECENT     = 4,
70     RESOURCE_CONTEXT    = 5
71 }
72 
73 enum DWORD
74     RESOURCETYPE_ANY      = 0,
75     RESOURCETYPE_DISK     = 1,
76     RESOURCETYPE_PRINT    = 2,
77     RESOURCETYPE_RESERVED = 8,
78     RESOURCETYPE_UNKNOWN  = 0xFFFFFFFF;
79 
80 enum DWORD
81     RESOURCEUSAGE_CONNECTABLE   = 0x00000001,
82     RESOURCEUSAGE_CONTAINER     = 0x00000002,
83     RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
84     RESOURCEUSAGE_SIBLING       = 0x00000008,
85     RESOURCEUSAGE_ATTACHED      = 0x00000010,
86     RESOURCEUSAGE_ALL           = (RESOURCEUSAGE_CONNECTABLE
87                                   | RESOURCEUSAGE_CONTAINER
88                                   | RESOURCEUSAGE_ATTACHED),
89     RESOURCEUSAGE_RESERVED      = 0x80000000;
90 
91 enum : DWORD {
92     RESOURCEDISPLAYTYPE_GENERIC,
93     RESOURCEDISPLAYTYPE_DOMAIN,
94     RESOURCEDISPLAYTYPE_SERVER,
95     RESOURCEDISPLAYTYPE_SHARE,
96     RESOURCEDISPLAYTYPE_FILE,
97     RESOURCEDISPLAYTYPE_GROUP,
98     RESOURCEDISPLAYTYPE_NETWORK,
99     RESOURCEDISPLAYTYPE_ROOT,
100     RESOURCEDISPLAYTYPE_SHAREADMIN,
101     RESOURCEDISPLAYTYPE_DIRECTORY,
102     RESOURCEDISPLAYTYPE_TREE // = 10
103 }
104 
105 enum NETPROPERTY_PERSISTENT = 1;
106 
107 enum DWORD
108     CONNECT_UPDATE_PROFILE =   1,
109     CONNECT_UPDATE_RECENT  =   2,
110     CONNECT_TEMPORARY      =   4,
111     CONNECT_INTERACTIVE    =   8,
112     CONNECT_PROMPT         =  16,
113     CONNECT_NEED_DRIVE     =  32,
114     CONNECT_REFCOUNT       =  64,
115     CONNECT_REDIRECT       = 128,
116     CONNECT_LOCALDRIVE     = 256,
117     CONNECT_CURRENT_MEDIA  = 512;
118 
119 enum DWORD
120     CONNDLG_RO_PATH     =  1,
121     CONNDLG_CONN_POINT  =  2,
122     CONNDLG_USE_MRU     =  4,
123     CONNDLG_HIDE_BOX    =  8,
124     CONNDLG_PERSIST     = 16,
125     CONNDLG_NOT_PERSIST = 32;
126 
127 enum DWORD
128     DISC_UPDATE_PROFILE =  1,
129     DISC_NO_FORCE       = 64;
130 
131 enum DWORD
132     WNFMT_MULTILINE   =  1,
133     WNFMT_ABBREVIATED =  2,
134     WNFMT_INENUM      = 16,
135     WNFMT_CONNECTION  = 32;
136 
137 enum : DWORD {
138     WN_SUCCESS                   = NO_ERROR,
139     WN_NO_ERROR                  = NO_ERROR,
140     WN_NOT_SUPPORTED             = ERROR_NOT_SUPPORTED,
141     WN_CANCEL                    = ERROR_CANCELLED,
142     WN_RETRY                     = ERROR_RETRY,
143     WN_NET_ERROR                 = ERROR_UNEXP_NET_ERR,
144     WN_MORE_DATA                 = ERROR_MORE_DATA,
145     WN_BAD_POINTER               = ERROR_INVALID_ADDRESS,
146     WN_BAD_VALUE                 = ERROR_INVALID_PARAMETER,
147     WN_BAD_USER                  = ERROR_BAD_USERNAME,
148     WN_BAD_PASSWORD              = ERROR_INVALID_PASSWORD,
149     WN_ACCESS_DENIED             = ERROR_ACCESS_DENIED,
150     WN_FUNCTION_BUSY             = ERROR_BUSY,
151     WN_WINDOWS_ERROR             = ERROR_UNEXP_NET_ERR,
152     WN_OUT_OF_MEMORY             = ERROR_NOT_ENOUGH_MEMORY,
153     WN_NO_NETWORK                = ERROR_NO_NETWORK,
154     WN_EXTENDED_ERROR            = ERROR_EXTENDED_ERROR,
155     WN_BAD_LEVEL                 = ERROR_INVALID_LEVEL,
156     WN_BAD_HANDLE                = ERROR_INVALID_HANDLE,
157     WN_NOT_INITIALIZING          = ERROR_ALREADY_INITIALIZED,
158     WN_NO_MORE_DEVICES           = ERROR_NO_MORE_DEVICES,
159     WN_NOT_CONNECTED             = ERROR_NOT_CONNECTED,
160     WN_OPEN_FILES                = ERROR_OPEN_FILES,
161     WN_DEVICE_IN_USE             = ERROR_DEVICE_IN_USE,
162     WN_BAD_NETNAME               = ERROR_BAD_NET_NAME,
163     WN_BAD_LOCALNAME             = ERROR_BAD_DEVICE,
164     WN_ALREADY_CONNECTED         = ERROR_ALREADY_ASSIGNED,
165     WN_DEVICE_ERROR              = ERROR_GEN_FAILURE,
166     WN_CONNECTION_CLOSED         = ERROR_CONNECTION_UNAVAIL,
167     WN_NO_NET_OR_BAD_PATH        = ERROR_NO_NET_OR_BAD_PATH,
168     WN_BAD_PROVIDER              = ERROR_BAD_PROVIDER,
169     WN_CANNOT_OPEN_PROFILE       = ERROR_CANNOT_OPEN_PROFILE,
170     WN_BAD_PROFILE               = ERROR_BAD_PROFILE,
171     WN_BAD_DEV_TYPE              = ERROR_BAD_DEV_TYPE,
172     WN_DEVICE_ALREADY_REMEMBERED = ERROR_DEVICE_ALREADY_REMEMBERED,
173     WN_NO_MORE_ENTRIES           = ERROR_NO_MORE_ITEMS,
174     WN_NOT_CONTAINER             = ERROR_NOT_CONTAINER,
175     WN_NOT_AUTHENTICATED         = ERROR_NOT_AUTHENTICATED,
176     WN_NOT_LOGGED_ON             = ERROR_NOT_LOGGED_ON,
177     WN_NOT_VALIDATED             = ERROR_NO_LOGON_SERVERS
178 }
179 
180 enum : DWORD {
181     UNIVERSAL_NAME_INFO_LEVEL = 1,
182     REMOTE_NAME_INFO_LEVEL
183 }
184 
185 enum DWORD
186     NETINFO_DLL16      = 1,
187     NETINFO_DISKRED    = 4,
188     NETINFO_PRINTERRED = 8;
189 
190 enum DWORD
191     RP_LOGON   = 1,
192     RP_INIFILE = 2;
193 
194 enum DWORD PP_DISPLAYERRORS = 1;
195 
196 enum DWORD
197     WNCON_FORNETCARD = 1,
198     WNCON_NOTROUTED  = 2,
199     WNCON_SLOWLINK   = 4,
200     WNCON_DYNAMIC    = 8;
201 
202 struct NETRESOURCEA {
203     DWORD dwScope;
204     DWORD dwType;
205     DWORD dwDisplayType;
206     DWORD dwUsage;
207     LPSTR lpLocalName;
208     LPSTR lpRemoteName;
209     LPSTR lpComment;
210     LPSTR lpProvider;
211 }
212 alias NETRESOURCEA* LPNETRESOURCEA;
213 
214 struct NETRESOURCEW {
215     DWORD  dwScope;
216     DWORD  dwType;
217     DWORD  dwDisplayType;
218     DWORD  dwUsage;
219     LPWSTR lpLocalName;
220     LPWSTR lpRemoteName;
221     LPWSTR lpComment ;
222     LPWSTR lpProvider;
223 }
224 alias NETRESOURCEW* LPNETRESOURCEW;
225 
226 struct CONNECTDLGSTRUCTA {
227     DWORD          cbStructure;
228     HWND           hwndOwner;
229     LPNETRESOURCEA lpConnRes;
230     DWORD          dwFlags;
231     DWORD          dwDevNum;
232 }
233 alias CONNECTDLGSTRUCTA* LPCONNECTDLGSTRUCTA;
234 
235 struct CONNECTDLGSTRUCTW {
236     DWORD          cbStructure;
237     HWND           hwndOwner;
238     LPNETRESOURCEW lpConnRes;
239     DWORD          dwFlags;
240     DWORD          dwDevNum;
241 }
242 alias CONNECTDLGSTRUCTW* LPCONNECTDLGSTRUCTW;
243 
244 struct DISCDLGSTRUCTA {
245     DWORD cbStructure;
246     HWND  hwndOwner;
247     LPSTR lpLocalName;
248     LPSTR lpRemoteName;
249     DWORD dwFlags;
250 }
251 alias DISCDLGSTRUCTA* LPDISCDLGSTRUCTA;
252 
253 struct DISCDLGSTRUCTW {
254     DWORD  cbStructure;
255     HWND   hwndOwner;
256     LPWSTR lpLocalName;
257     LPWSTR lpRemoteName;
258     DWORD  dwFlags;
259 }
260 alias DISCDLGSTRUCTW* LPDISCDLGSTRUCTW;
261 
262 struct UNIVERSAL_NAME_INFOA {
263     LPSTR lpUniversalName;
264 }
265 alias UNIVERSAL_NAME_INFOA* LPUNIVERSAL_NAME_INFOA;
266 
267 struct UNIVERSAL_NAME_INFOW {
268     LPWSTR lpUniversalName;
269 }
270 alias UNIVERSAL_NAME_INFOW* LPUNIVERSAL_NAME_INFOW;
271 
272 struct REMOTE_NAME_INFOA {
273     LPSTR lpUniversalName;
274     LPSTR lpConnectionName;
275     LPSTR lpRemainingPath;
276 }
277 alias REMOTE_NAME_INFOA* LPREMOTE_NAME_INFOA;
278 
279 struct REMOTE_NAME_INFOW {
280     LPWSTR lpUniversalName;
281     LPWSTR lpConnectionName;
282     LPWSTR lpRemainingPath;
283 }
284 alias REMOTE_NAME_INFOW* LPREMOTE_NAME_INFOW;
285 
286 struct NETINFOSTRUCT {
287     DWORD cbStructure;
288     DWORD dwProviderVersion;
289     DWORD dwStatus;
290     DWORD dwCharacteristics;
291     ULONG_PTR dwHandle;
292     WORD  wNetType;
293     DWORD dwPrinters;
294     DWORD dwDrives;
295 }
296 alias NETINFOSTRUCT* LPNETINFOSTRUCT;
297 
298 extern (Windows) {
299     alias UINT function(LPCSTR, LPSTR, UINT) PFNGETPROFILEPATHA;
300     alias UINT function(LPCWSTR, LPWSTR, UINT) PFNGETPROFILEPATHW;
301     alias UINT function(LPCSTR, LPCSTR, DWORD) PFNRECONCILEPROFILEA;
302     alias UINT function(LPCWSTR, LPCWSTR, DWORD) PFNRECONCILEPROFILEW;
303     alias BOOL function(HWND, LPCSTR, LPCSTR, LPCSTR, DWORD)
304       PFNPROCESSPOLICIESA;
305     alias BOOL function(HWND, LPCWSTR, LPCWSTR, LPCWSTR, DWORD)
306       PFNPROCESSPOLICIESW;
307 }
308 
309 struct NETCONNECTINFOSTRUCT {
310     DWORD cbStructure;
311     DWORD dwFlags;
312     DWORD dwSpeed;
313     DWORD dwDelay;
314     DWORD dwOptDataSize;
315 }
316 alias NETCONNECTINFOSTRUCT* LPNETCONNECTINFOSTRUCT;
317 
318 extern (Windows) {
319     DWORD WNetAddConnection2A(LPNETRESOURCEA, LPCSTR, LPCSTR, DWORD);
320     DWORD WNetAddConnection2W(LPNETRESOURCEW, LPCWSTR, LPCWSTR, DWORD);
321     DWORD WNetAddConnection3A(HWND, LPNETRESOURCEA, LPCSTR, LPCSTR, DWORD);
322     DWORD WNetAddConnection3W(HWND, LPNETRESOURCEW, LPCWSTR, LPCWSTR, DWORD);
323     DWORD WNetCancelConnection2A(LPCSTR, DWORD, BOOL);
324     DWORD WNetCancelConnection2W(LPCWSTR, DWORD, BOOL);
325     DWORD WNetGetConnectionA(LPCSTR, LPSTR, PDWORD);
326     DWORD WNetGetConnectionW(LPCWSTR, LPWSTR, PDWORD);
327     DWORD WNetUseConnectionA(HWND, LPNETRESOURCEA, LPCSTR, LPCSTR, DWORD,
328       LPSTR, PDWORD, PDWORD);
329     DWORD WNetUseConnectionW(HWND, LPNETRESOURCEW, LPCWSTR, LPCWSTR, DWORD,
330       LPWSTR, PDWORD, PDWORD);
331     DWORD WNetSetConnectionA(LPCSTR, DWORD, PVOID);
332     DWORD WNetSetConnectionW(LPCWSTR, DWORD, PVOID);
333     DWORD WNetConnectionDialog(HWND, DWORD);
334     DWORD WNetDisconnectDialog(HWND, DWORD);
335     DWORD WNetConnectionDialog1A(LPCONNECTDLGSTRUCTA);
336     DWORD WNetConnectionDialog1W(LPCONNECTDLGSTRUCTW);
337     DWORD WNetDisconnectDialog1A(LPDISCDLGSTRUCTA);
338     DWORD WNetDisconnectDialog1W(LPDISCDLGSTRUCTW);
339     DWORD WNetOpenEnumA(DWORD, DWORD, DWORD, LPNETRESOURCEA, LPHANDLE);
340     DWORD WNetOpenEnumW(DWORD, DWORD, DWORD, LPNETRESOURCEW, LPHANDLE);
341     DWORD WNetEnumResourceA(HANDLE, PDWORD, PVOID, PDWORD);
342     DWORD WNetEnumResourceW(HANDLE, PDWORD, PVOID, PDWORD);
343     DWORD WNetCloseEnum(HANDLE);
344     DWORD WNetGetUniversalNameA(LPCSTR, DWORD, PVOID, PDWORD);
345     DWORD WNetGetUniversalNameW(LPCWSTR, DWORD, PVOID, PDWORD);
346     DWORD WNetGetUserA(LPCSTR, LPSTR, PDWORD);
347     DWORD WNetGetUserW(LPCWSTR, LPWSTR, PDWORD);
348     DWORD WNetGetProviderNameA(DWORD, LPSTR, PDWORD);
349     DWORD WNetGetProviderNameW(DWORD, LPWSTR, PDWORD);
350     DWORD WNetGetNetworkInformationA(LPCSTR, LPNETINFOSTRUCT);
351     DWORD WNetGetNetworkInformationW(LPCWSTR, LPNETINFOSTRUCT);
352     DWORD WNetGetResourceInformationA(LPNETRESOURCEA, LPVOID, LPDWORD,
353       LPSTR*);
354     DWORD WNetGetResourceInformationW(LPNETRESOURCEA, LPVOID, LPDWORD,
355       LPWSTR*);
356     DWORD WNetGetResourceParentA(LPNETRESOURCEA, LPVOID, LPDWORD);
357     DWORD WNetGetResourceParentW(LPNETRESOURCEW, LPVOID, LPDWORD);
358     DWORD WNetGetLastErrorA(PDWORD, LPSTR, DWORD, LPSTR, DWORD);
359     DWORD WNetGetLastErrorW(PDWORD, LPWSTR, DWORD, LPWSTR, DWORD);
360     DWORD MultinetGetConnectionPerformanceA(LPNETRESOURCEA,
361       LPNETCONNECTINFOSTRUCT);
362     DWORD MultinetGetConnectionPerformanceW(LPNETRESOURCEW,
363       LPNETCONNECTINFOSTRUCT);
364     deprecated {
365         DWORD WNetAddConnectionA(LPCSTR, LPCSTR, LPCSTR);
366         DWORD WNetAddConnectionW(LPCWSTR, LPCWSTR, LPCWSTR);
367         DWORD WNetCancelConnectionA(LPCSTR, BOOL);
368         DWORD WNetCancelConnectionW(LPCWSTR, BOOL);
369     }
370 }
371 
372 version (Unicode) {
373     alias PFNGETPROFILEPATHW PFNGETPROFILEPATH;
374     alias PFNRECONCILEPROFILEW PFNRECONCILEPROFILE;
375     alias PFNPROCESSPOLICIESW PFNPROCESSPOLICIES;
376     alias NETRESOURCEW NETRESOURCE;
377     alias CONNECTDLGSTRUCTW CONNECTDLGSTRUCT;
378     alias DISCDLGSTRUCTW DISCDLGSTRUCT;
379     alias REMOTE_NAME_INFOW REMOTE_NAME_INFO;
380     alias UNIVERSAL_NAME_INFOW UNIVERSAL_NAME_INFO;
381     alias WNetAddConnection2W WNetAddConnection2;
382     alias WNetAddConnection3W WNetAddConnection3;
383     alias WNetCancelConnection2W WNetCancelConnection2;
384     alias WNetGetConnectionW WNetGetConnection;
385     alias WNetUseConnectionW WNetUseConnection;
386     alias WNetSetConnectionW WNetSetConnection;
387     alias WNetConnectionDialog1W WNetConnectionDialog1;
388     alias WNetDisconnectDialog1W WNetDisconnectDialog1;
389     alias WNetOpenEnumW WNetOpenEnum;
390     alias WNetEnumResourceW WNetEnumResource;
391     alias WNetGetUniversalNameW WNetGetUniversalName;
392     alias WNetGetUserW WNetGetUser;
393     alias WNetGetProviderNameW WNetGetProviderName;
394     alias WNetGetNetworkInformationW WNetGetNetworkInformation;
395     alias WNetGetResourceInformationW WNetGetResourceInformation;
396     alias WNetGetResourceParentW WNetGetResourceParent;
397     alias WNetGetLastErrorW WNetGetLastError;
398     alias MultinetGetConnectionPerformanceW MultinetGetConnectionPerformance;
399     deprecated {
400         alias WNetAddConnectionW WNetAddConnection;
401         alias WNetCancelConnectionW WNetCancelConnection;
402     }
403 } else {
404     alias PFNGETPROFILEPATHA PFNGETPROFILEPATH;
405     alias PFNRECONCILEPROFILEA PFNRECONCILEPROFILE;
406     alias PFNPROCESSPOLICIESA PFNPROCESSPOLICIES;
407     alias NETRESOURCEA NETRESOURCE;
408     alias CONNECTDLGSTRUCTA CONNECTDLGSTRUCT;
409     alias DISCDLGSTRUCTA DISCDLGSTRUCT;
410     alias REMOTE_NAME_INFOA REMOTE_NAME_INFO;
411     alias UNIVERSAL_NAME_INFOA UNIVERSAL_NAME_INFO;
412     alias WNetAddConnection2A WNetAddConnection2;
413     alias WNetAddConnection3A WNetAddConnection3;
414     alias WNetCancelConnection2A WNetCancelConnection2;
415     alias WNetGetConnectionA WNetGetConnection;
416     alias WNetUseConnectionA WNetUseConnection;
417     alias WNetSetConnectionA WNetSetConnection;
418     alias WNetConnectionDialog1A WNetConnectionDialog1;
419     alias WNetDisconnectDialog1A WNetDisconnectDialog1;
420     alias WNetOpenEnumA WNetOpenEnum;
421     alias WNetEnumResourceA WNetEnumResource;
422     alias WNetGetUniversalNameA WNetGetUniversalName;
423     alias WNetGetUserA WNetGetUser;
424     alias WNetGetProviderNameA WNetGetProviderName;
425     alias WNetGetNetworkInformationA WNetGetNetworkInformation;
426     alias WNetGetResourceInformationA WNetGetResourceInformation;
427     alias WNetGetResourceParentA WNetGetResourceParent;
428     alias WNetGetLastErrorA WNetGetLastError;
429     alias MultinetGetConnectionPerformanceA MultinetGetConnectionPerformance;
430     deprecated {
431         alias WNetAddConnectionA WNetAddConnection;
432         alias WNetCancelConnectionA WNetCancelConnection;
433     }
434 }
435 
436 alias NETRESOURCE* LPNETRESOURCE;
437 alias CONNECTDLGSTRUCT* LPCONNECTDLGSTRUCT;
438 alias DISCDLGSTRUCT* LPDISCDLGSTRUCT;
439 alias REMOTE_NAME_INFO* LPREMOTE_NAME_INFO;
440 alias UNIVERSAL_NAME_INFO* LPUNIVERSAL_NAME_INFO;