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