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 src/core/sys/windows/_nspapi.d)
9  */
10 module core.sys.windows.nspapi;
version(Windows)11 version (Windows):
12 @system:
13 
14 version (ANSI) {} else version = Unicode;
15 
16 import core.sys.windows.basetyps, core.sys.windows.windef;
17 
18 // FIXME: check types of constants
19 
20 enum {
21     NS_ALL         =  0,
22 
23     NS_SAP,
24     NS_NDS,
25     NS_PEER_BROWSE,
26 
27     NS_TCPIP_LOCAL = 10,
28     NS_TCPIP_HOSTS,
29     NS_DNS,
30     NS_NETBT,
31     NS_WINS,
32 
33     NS_NBP         = 20,
34 
35     NS_MS          = 30,
36     NS_STDA,
37     NS_NTDS,
38 
39     NS_X500        = 40,
40     NS_NIS,
41     NS_NISPLUS,
42 
43     NS_WRQ         = 50
44 }
45 
46 enum {
47     SERVICE_REGISTER   = 1,
48     SERVICE_DEREGISTER = 2,
49     SERVICE_FLUSH      = 3,
50     SERVICE_FLAG_HARD  = 2
51 }
52 
53 import core.sys.windows.winsock2;
54 
55 struct SOCKET_ADDRESS {
56     LPSOCKADDR lpSockaddr;
57     INT        iSockaddrLength;
58 }
59 alias SOCKET_ADDRESS* PSOCKET_ADDRESS, LPSOCKET_ADDRESS;
60 
61 struct CSADDR_INFO {
62     SOCKET_ADDRESS LocalAddr;
63     SOCKET_ADDRESS RemoteAddr;
64     INT            iSocketType;
65     INT            iProtocol;
66 }
67 alias CSADDR_INFO* PCSADDR_INFO, LPCSADDR_INFO;
68 
69 struct BLOB {
70     ULONG cbSize;
71     BYTE* pBlobData;
72 }
73 alias BLOB* PBLOB, LPBLOB;
74 
75 struct SERVICE_ADDRESS {
76     DWORD dwAddressType;
77     DWORD dwAddressFlags;
78     DWORD dwAddressLength;
79     DWORD dwPrincipalLength;
80     BYTE* lpAddress;
81     BYTE* lpPrincipal;
82 }
83 
84 struct SERVICE_ADDRESSES {
85     DWORD           dwAddressCount;
86     SERVICE_ADDRESS _Addresses;
87 
88     SERVICE_ADDRESS* Addresses() return { return &_Addresses; }
89 }
90 alias SERVICE_ADDRESSES* PSERVICE_ADDRESSES, LPSERVICE_ADDRESSES;
91 
92 struct SERVICE_INFOA {
93     LPGUID lpServiceType;
94     LPSTR  lpServiceName;
95     LPSTR  lpComment;
96     LPSTR  lpLocale;
97     DWORD  dwDisplayHint;
98     DWORD  dwVersion;
99     DWORD  dwTime;
100     LPSTR  lpMachineName;
101     LPSERVICE_ADDRESSES lpServiceAddress;
102     BLOB   ServiceSpecificInfo;
103 }
104 alias SERVICE_INFOA* LPSERVICE_INFOA;
105 
106 struct SERVICE_INFOW {
107     LPGUID lpServiceType;
108     LPWSTR lpServiceName;
109     LPWSTR lpComment;
110     LPWSTR lpLocale;
111     DWORD  dwDisplayHint;
112     DWORD  dwVersion;
113     DWORD  dwTime;
114     LPWSTR lpMachineName;
115     LPSERVICE_ADDRESSES lpServiceAddress;
116     BLOB   ServiceSpecificInfo;
117 }
118 alias SERVICE_INFOW* LPSERVICE_INFOW;
119 
120 alias void* LPSERVICE_ASYNC_INFO;
121 
122 extern (Windows) {
123     INT SetServiceA(DWORD, DWORD, DWORD, LPSERVICE_INFOA,
124       LPSERVICE_ASYNC_INFO, LPDWORD);
125     INT SetServiceW(DWORD, DWORD, DWORD, LPSERVICE_INFOW,
126       LPSERVICE_ASYNC_INFO, LPDWORD);
127     INT GetAddressByNameA(DWORD, LPGUID, LPSTR, LPINT, DWORD,
128       LPSERVICE_ASYNC_INFO, LPVOID, LPDWORD, LPSTR, LPDWORD);
129     INT GetAddressByNameW(DWORD, LPGUID, LPWSTR, LPINT, DWORD,
130       LPSERVICE_ASYNC_INFO, LPVOID, LPDWORD, LPWSTR, LPDWORD);
131 }
132 
133 version (Unicode) {
134     alias SERVICE_INFOW SERVICE_INFO;
135     alias SetServiceW SetService;
136     alias GetAddressByNameW GetAddressByName;
137 } else {
138     alias SERVICE_INFOA SERVICE_INFO;
139     alias SetServiceA SetService;
140     alias GetAddressByNameA GetAddressByName;
141 }
142 
143 alias SERVICE_INFO _SERVICE_INFO;
144 alias SERVICE_INFO* LPSERVICE_INFO;
145