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