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