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