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