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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
|
/******************************************************************\
* Microsoft Windows NT *
* Copyright(c) Microsoft Corp., 1992-1996 *
\******************************************************************/
/*++
Module Name:
RASSAPI.H
Description:
This file contains the RASADMIN structures, defines and
function prototypes for the following APIs and they can
be imported from RASSAPI.DLL:
RasAdminServerGetInfo
RasAdminGetUserAccountServer
RasAdminUserSetInfo
RasAdminUserGetInfo
RasAdminPortEnum
RasAdminPortGetInfo
RasAdminPortClearStatistics
RasAdminPortDisconnect
RasAdminFreeBuffer
Note:
This header file and the sources containing the APIs will work
only with UNICODE strings.
--*/
#ifndef _RASSAPI_H_
#define _RASSAPI_H_
#ifndef UNLEN
#include <lmcons.h>
#endif
#define RASSAPI_MAX_PHONENUMBER_SIZE 128
#define RASSAPI_MAX_MEDIA_NAME 16
#define RASSAPI_MAX_PORT_NAME 16
#define RASSAPI_MAX_DEVICE_NAME 128
#define RASSAPI_MAX_DEVICETYPE_NAME 16
#define RASSAPI_MAX_PARAM_KEY_SIZE 32
// Bits indicating user's Remote Access privileges and mask to isolate
// call back privilege.
//
// Note: Bit 0 MUST represent NoCallback due to a quirk of the "userparms"
// storage method. When a new LAN Manager user is created, bit 0 of the
// userparms field is set to 1 and all other bits are 0. These bits are
// arranged so this "no Dial-In info" state maps to the "default Dial-In
// privilege" state.
#define RASPRIV_NoCallback 0x01
#define RASPRIV_AdminSetCallback 0x02
#define RASPRIV_CallerSetCallback 0x04
#define RASPRIV_DialinPrivilege 0x08
#define RASPRIV_CallbackType (RASPRIV_AdminSetCallback \
| RASPRIV_CallerSetCallback \
| RASPRIV_NoCallback)
//
// Modem condition codes
//
#define RAS_MODEM_OPERATIONAL 1 // No modem errors.
#define RAS_MODEM_NOT_RESPONDING 2
#define RAS_MODEM_HARDWARE_FAILURE 3
#define RAS_MODEM_INCORRECT_RESPONSE 4
#define RAS_MODEM_UNKNOWN 5
//
// Line condition codes
//
#define RAS_PORT_NON_OPERATIONAL 1
#define RAS_PORT_DISCONNECTED 2
#define RAS_PORT_CALLING_BACK 3
#define RAS_PORT_LISTENING 4
#define RAS_PORT_AUTHENTICATING 5
#define RAS_PORT_AUTHENTICATED 6
#define RAS_PORT_INITIALIZING 7
// The following three structures are same as the ones
// defined in rasman.h and have been renamed to prevent
// redefinitions when both header files are included.
enum RAS_PARAMS_FORMAT {
ParamNumber = 0,
ParamString = 1
} ;
typedef enum RAS_PARAMS_FORMAT RAS_PARAMS_FORMAT ;
union RAS_PARAMS_VALUE {
DWORD Number ;
struct {
DWORD Length ;
PCHAR Data ;
} String ;
} ;
typedef union RAS_PARAMS_VALUE RAS_PARAMS_VALUE ;
struct RAS_PARAMETERS {
CHAR P_Key [RASSAPI_MAX_PARAM_KEY_SIZE] ;
RAS_PARAMS_FORMAT P_Type ;
BYTE P_Attributes ;
RAS_PARAMS_VALUE P_Value ;
} ;
typedef struct RAS_PARAMETERS RAS_PARAMETERS ;
// structures used by the RASADMIN APIs
typedef struct _RAS_USER_0
{
BYTE bfPrivilege;
WCHAR szPhoneNumber[ RASSAPI_MAX_PHONENUMBER_SIZE + 1];
} RAS_USER_0, *PRAS_USER_0;
typedef struct _RAS_PORT_0
{
WCHAR wszPortName[RASSAPI_MAX_PORT_NAME];
WCHAR wszDeviceType[RASSAPI_MAX_DEVICETYPE_NAME];
WCHAR wszDeviceName[RASSAPI_MAX_DEVICE_NAME];
WCHAR wszMediaName[RASSAPI_MAX_MEDIA_NAME];
DWORD reserved;
DWORD Flags;
WCHAR wszUserName[UNLEN + 1];
WCHAR wszComputer[NETBIOS_NAME_LEN];
DWORD dwStartSessionTime; // seconds from 1/1/1970
WCHAR wszLogonDomain[DNLEN + 1];
BOOL fAdvancedServer;
} RAS_PORT_0, *PRAS_PORT_0;
// Possible values for MediaId
#define MEDIA_UNKNOWN 0
#define MEDIA_SERIAL 1
#define MEDIA_RAS10_SERIAL 2
#define MEDIA_X25 3
#define MEDIA_ISDN 4
// Possible bits set in Flags field
#define USER_AUTHENTICATED 0x0001
#define MESSENGER_PRESENT 0x0002
#define PPP_CLIENT 0x0004
#define GATEWAY_ACTIVE 0x0008
#define REMOTE_LISTEN 0x0010
#define PORT_MULTILINKED 0x0020
typedef ULONG IPADDR;
// The following PPP structures are same as the ones
// defined in rasppp.h and have been renamed to prevent
// redefinitions when both header files are included
// in a module.
/* Maximum length of address string, e.g. "255.255.255.255" for IP.
*/
#define RAS_IPADDRESSLEN 15
#define RAS_IPXADDRESSLEN 22
#define RAS_ATADDRESSLEN 32
typedef struct _RAS_PPP_NBFCP_RESULT
{
DWORD dwError;
DWORD dwNetBiosError;
CHAR szName[ NETBIOS_NAME_LEN + 1 ];
WCHAR wszWksta[ NETBIOS_NAME_LEN + 1 ];
} RAS_PPP_NBFCP_RESULT;
typedef struct _RAS_PPP_IPCP_RESULT
{
DWORD dwError;
WCHAR wszAddress[ RAS_IPADDRESSLEN + 1 ];
} RAS_PPP_IPCP_RESULT;
typedef struct _RAS_PPP_IPXCP_RESULT
{
DWORD dwError;
WCHAR wszAddress[ RAS_IPXADDRESSLEN + 1 ];
} RAS_PPP_IPXCP_RESULT;
typedef struct _RAS_PPP_ATCP_RESULT
{
DWORD dwError;
WCHAR wszAddress[ RAS_ATADDRESSLEN + 1 ];
} RAS_PPP_ATCP_RESULT;
typedef struct _RAS_PPP_PROJECTION_RESULT
{
RAS_PPP_NBFCP_RESULT nbf;
RAS_PPP_IPCP_RESULT ip;
RAS_PPP_IPXCP_RESULT ipx;
RAS_PPP_ATCP_RESULT at;
} RAS_PPP_PROJECTION_RESULT;
typedef struct _RAS_PORT_1
{
RAS_PORT_0 rasport0;
DWORD LineCondition;
DWORD HardwareCondition;
DWORD LineSpeed; // in bits/second
WORD NumStatistics;
WORD NumMediaParms;
DWORD SizeMediaParms;
RAS_PPP_PROJECTION_RESULT ProjResult;
} RAS_PORT_1, *PRAS_PORT_1;
typedef struct _RAS_PORT_STATISTICS
{
// The connection statistics are followed by port statistics
// A connection is across multiple ports.
DWORD dwBytesXmited;
DWORD dwBytesRcved;
DWORD dwFramesXmited;
DWORD dwFramesRcved;
DWORD dwCrcErr;
DWORD dwTimeoutErr;
DWORD dwAlignmentErr;
DWORD dwHardwareOverrunErr;
DWORD dwFramingErr;
DWORD dwBufferOverrunErr;
DWORD dwBytesXmitedUncompressed;
DWORD dwBytesRcvedUncompressed;
DWORD dwBytesXmitedCompressed;
DWORD dwBytesRcvedCompressed;
// the following are the port statistics
DWORD dwPortBytesXmited;
DWORD dwPortBytesRcved;
DWORD dwPortFramesXmited;
DWORD dwPortFramesRcved;
DWORD dwPortCrcErr;
DWORD dwPortTimeoutErr;
DWORD dwPortAlignmentErr;
DWORD dwPortHardwareOverrunErr;
DWORD dwPortFramingErr;
DWORD dwPortBufferOverrunErr;
DWORD dwPortBytesXmitedUncompressed;
DWORD dwPortBytesRcvedUncompressed;
DWORD dwPortBytesXmitedCompressed;
DWORD dwPortBytesRcvedCompressed;
} RAS_PORT_STATISTICS, *PRAS_PORT_STATISTICS;
//
// Server version numbers
//
#define RASDOWNLEVEL 10 // identifies a LM RAS 1.0 server
#define RASADMIN_35 35 // Identifies a NT RAS 3.5 server or client
#define RASADMIN_CURRENT 40 // Identifies a NT RAS 4.0 server or client
typedef struct _RAS_SERVER_0
{
WORD TotalPorts; // Total ports configured on the server
WORD PortsInUse; // Ports currently in use by remote clients
DWORD RasVersion; // version of RAS server
} RAS_SERVER_0, *PRAS_SERVER_0;
//
// function prototypes
//
DWORD APIENTRY RasAdminServerGetInfo(
IN const WCHAR * lpszServer,
OUT PRAS_SERVER_0 pRasServer0
);
DWORD APIENTRY RasAdminGetUserAccountServer(
IN const WCHAR * lpszDomain,
IN const WCHAR * lpszServer,
OUT LPWSTR lpszUserAccountServer
);
DWORD APIENTRY RasAdminUserGetInfo(
IN const WCHAR * lpszUserAccountServer,
IN const WCHAR * lpszUser,
OUT PRAS_USER_0 pRasUser0
);
DWORD APIENTRY RasAdminUserSetInfo(
IN const WCHAR * lpszUserAccountServer,
IN const WCHAR * lpszUser,
IN const PRAS_USER_0 pRasUser0
);
DWORD APIENTRY RasAdminPortEnum(
IN const WCHAR * lpszServer,
OUT PRAS_PORT_0 * ppRasPort0,
OUT WORD * pcEntriesRead
);
DWORD APIENTRY RasAdminPortGetInfo(
IN const WCHAR * lpszServer,
IN const WCHAR * lpszPort,
OUT RAS_PORT_1 * pRasPort1,
OUT RAS_PORT_STATISTICS * pRasStats,
OUT RAS_PARAMETERS ** ppRasParams
);
DWORD APIENTRY RasAdminPortClearStatistics(
IN const WCHAR * lpszServer,
IN const WCHAR * lpszPort
);
DWORD APIENTRY RasAdminPortDisconnect(
IN const WCHAR * lpszServer,
IN const WCHAR * lpszPort
);
DWORD APIENTRY RasAdminFreeBuffer(
PVOID Pointer
);
DWORD APIENTRY RasAdminGetErrorString(
IN UINT ResourceId,
OUT WCHAR * lpszString,
IN DWORD InBufSize );
BOOL APIENTRY RasAdminAcceptNewConnection (
IN RAS_PORT_1 * pRasPort1,
IN RAS_PORT_STATISTICS * pRasStats,
IN RAS_PARAMETERS * pRasParams
);
VOID APIENTRY RasAdminConnectionHangupNotification (
IN RAS_PORT_1 * pRasPort1,
IN RAS_PORT_STATISTICS * pRasStats,
IN RAS_PARAMETERS * pRasParams
);
DWORD APIENTRY RasAdminGetIpAddressForUser (
IN WCHAR * lpszUserName,
IN WCHAR * lpszPortName,
IN OUT IPADDR * pipAddress,
OUT BOOL * bNotifyRelease
);
VOID APIENTRY RasAdminReleaseIpAddress (
IN WCHAR * lpszUserName,
IN WCHAR * lpszPortName,
IN IPADDR * pipAddress
);
// The following two APIs are used to get/set
// RAS user permissions in to a UsrParms buffer
// obtained by a call to NetUserGetInfo.
//
// Note that RasAdminUserGetInfo and RasAdminUserSetInfo
// are the APIs you should be using for getting and
// setting RAS permissions.
DWORD APIENTRY RasAdminGetUserParms(
IN WCHAR * lpszParms,
OUT PRAS_USER_0 pRasUser0
);
DWORD APIENTRY RasAdminSetUserParms(
IN OUT WCHAR * lpszParms,
IN DWORD cchNewParms,
IN PRAS_USER_0 pRasUser0
);
#endif // _RASSAPI_H_
|