|
|
/******************************************************************\
* Microsoft Windows NT * * Copyright(c) Microsoft Corp., 1992 * \******************************************************************/
/*++
Module Name:
RASSAPIP.H
Description:
This file contains structure defs and defines used in implementing the RASADMIN APIs.
Author:
Michael Salamone (MikeSa) July 13,1992
Revision History:
--*/
#ifndef _RASSAPIP_H_
#define _RASAAPIP_H_
#define RASSAPI_MAX_CALLBACK_NUMBER_SIZE 48
#define RASSAPI_MAX_DEVICE_NAME_OLD 32
// 3rd party DLLs don't need this version information because they will only
// be administering a NT3.51 or greater server.
#define RAS_SERVER_20 20 // identifies a NT RAS 2.0 server
//
// Number of port statistics returned by a RAS 1.0 server
//
#define RAS10_MAX_STATISTICS 6
//
// RAS10 specific port statistics defines
//
#define RAS10_BYTES_RCVED 0
#define RAS10_BYTES_XMITED 1
#define RAS10_SERIAL_OVERRUN_ERR 2
#define RAS10_TIMEOUT_ERR 3
#define RAS10_FRAMING_ERR 4
#define RAS10_CRC_ERR 5
#define MEDIA_NAME_DEFAULT L"SERIAL"
#define DEVICE_TYPE_DEFAULT L"MODEM"
#define DEVICE_NAME_DEFAULT L"UNKNOWN"
//
// structures used by down level RAS 1.x servers
//
typedef struct tagWpdStatisticsInfo { ULONG stat_bytesreceived; ULONG stat_bytesxmitted; USHORT stat_overrunerr; USHORT stat_timeouterr; USHORT stat_framingerr; USHORT stat_crcerr; } WpdStatisticsInfo;
struct dialin_user_info_0 { unsigned char duseri0_privilege_mask ; char duseri0_phone_number[RASSAPI_MAX_PHONENUMBER_SIZE + 1]; };
struct dialin_user_info_1 { struct dialin_user_info_0 duseri0; char duseri1_name[LM20_UNLEN+1]; };
struct dialin_user_info_2 { struct dialin_user_info_0 duseri0; USER_INFO_2 usri2; };
struct dialin_port_info_0 { char dporti0_username[LM20_UNLEN+1]; // name of user using the port
char dporti0_computer[NETBIOS_NAME_LEN+1]; // computer user dialed in from
// Used when the admin wants to
// send a message to this user
unsigned short dporti0_comid; // COM1 = 1 etc
unsigned long dporti0_time; // time user dialed in and
// authenticated - number of seconds
// since 00:00:00 Jan 1, 1970
unsigned short dporti0_line_condition; // If RAS_PORT_AUTHENTICATED, then
// comid, time username and computer
// name fields are valid.
unsigned short dporti0_modem_condition; };
struct dialin_port_info_1 { struct dialin_port_info_0 dporti0; unsigned long dporti1_baud; WpdStatisticsInfo dporti1_stats; };
struct dialin_server_info_0 { unsigned short dserveri0_total_ports; unsigned short dserveri0_ports_in_use; };
//
// defined to support RAS 1.x - the max ports in RAS 2.0 and greater
// is 64 (could be greater)
//
#define RAS_MAX_SERVER_PORTS 16
//
// Max length of RAS 1.0 port name including terminating
// NULL character - eg., "COM16"
//
#define RAS10_MAX_PORT_NAME 6
//
// How long a client will wait for a pipe connection (milliseconds)
// if it is busy.
//
#define PIPE_CONNECTION_TIMEOUT 10000L
#define PIPE_BUFSIZE 512
//
// Name of pipe that will be used to process requests
//
#define RASADMIN_PIPE TEXT("\\pipe\\dialin\\adminsrv")
//
// Pipe path to which RASADMIN_PIPE should be concatenated for local
// machine
//
#define LOCAL_PIPE TEXT("\\\\.")
//
// Request codes for RAS 1.x server
//
#define RASADMINREQ_DISCONNECT_USER 1
#define RASADMINREQ_GET_PORT_INFO 2
#define RASADMINREQ_CLEAR_PORT_STATS 3
#define RASADMINREQ_ENUM_PORTS 4
#define RASADMINREQ_GET_SERVER_INFO 5
//
// Request codes for RAS 2.0 server
//
#define RASADMIN20_REQ_DISCONNECT_USER 2001
#define RASADMIN20_REQ_GET_PORT_INFO 2002
#define RASADMIN20_REQ_CLEAR_PORT_STATS 2003
#define RASADMIN20_REQ_ENUM_PORTS 2004
#define RASADMIN20_REQ_ENUM_RESUME 2005
//
// This request code remains the same as in RAS 1.0
// so that, if RAS 1.0 admin tried to connect, it
// will get server info back, but not in the format
// that it recognizes. It will then be unable to
// admin the RAS 2.0 server.
//
#define RASADMIN20_REQ_GET_SERVER_INFO 5
//
// These can be returned in the RetCode field of server response
// packet sent to the client. These should not be changed in
// order to preserve compatibility with different versions of
// RASADMIN.
//
#define ERR_NO_SUCH_DEVICE 635
#define ERR_SERVER_SYSTEM_ERR 636
//
// These are the packets sent back and forth between RAS 1.x server
// and the RASADMIN APIs.
//
struct PortEnumRequestPkt { unsigned short Request; // ENUM_PORTS
}; // ENUM_PORTS_TOTALAVAIL
struct PortEnumReceivePkt { unsigned short RetCode; unsigned short TotalAvail; struct dialin_port_info_0 Data[RAS_MAX_SERVER_PORTS]; };
struct DisconnectUserRequestPkt { unsigned short Request; // DISCONNECT_USER
unsigned short ComId; };
struct DisconnectUserReceivePkt { unsigned short RetCode; };
struct PortClearRequestPkt { unsigned short Request; // CLEAR_PORT_STATISTICS
unsigned short ComId; };
struct PortClearReceivePkt { unsigned short RetCode; };
struct ServerInfoRequestPkt { unsigned short Request; // GET_SERVER_INFO
};
struct ServerInfoReceivePkt { unsigned short RetCode; struct dialin_server_info_0 Data; };
struct PortInfoRequestPkt { unsigned short Request; // GET_PORT_INFO
unsigned short ComId; };
struct PortInfoReceivePkt { unsigned short RetCode; struct dialin_port_info_1 Data; };
//
// These are the packed structures that are sent out on the network.
// It is up to the receiver to unpack and convert to the proper endian
// for the host.
//
typedef struct _P_WPD_STATISTICS_INFO { BYTE stat_bytesreceived[4]; BYTE stat_bytesxmitted[4]; BYTE stat_overrunerr[2]; BYTE stat_timeouterr[2]; BYTE stat_framingerr[2]; BYTE stat_crcerr[2]; } P_WPD_STATISTICS_INFO, *PP_WPD_STATISTICS_INFO;
typedef struct _P_DIALIN_PORT_INFO_0 { BYTE dporti0_username[LM20_UNLEN+1]; // name of user using the port
BYTE dporti0_computer[NETBIOS_NAME_LEN+1]; // computer user dialed in from
// Used when the admin wants to
// send a message to this user
BYTE dporti0_comid[2]; // COM1 = 1 etc
BYTE dporti0_time[4]; // time user dialed in and
// authenticated - number of seconds
// since 00:00:00 Jan 1, 1970
BYTE dporti0_line_condition[2]; // If RAS_PORT_AUTHENTICATED, then
// comid, time username and computer
// name fields are valid.
BYTE dporti0_modem_condition[2]; } P_DIALIN_PORT_INFO_0, *PP_DIALIN_PORT_INFO_0;
typedef struct _P_DIALIN_PORT_INFO_1 { P_DIALIN_PORT_INFO_0 dporti0; BYTE dporti1_baud[4]; P_WPD_STATISTICS_INFO dporti1_stats; } P_DIALIN_PORT_INFO_1, *PP_DIALIN_PORT_INFO_1;
typedef struct _P_DIALIN_SERVER_INFO_0 { BYTE dserveri0_total_ports[2]; BYTE dserveri0_ports_in_use[2]; } P_DIALIN_SERVER_INFO_0, *PP_DIALIN_SERVER_INFO_0;
typedef struct _P_PORT_ENUM_REQUEST_PKT { BYTE Request[2]; // ENUM_PORTS
} P_PORT_ENUM_REQUEST_PKT, *PP_PORT_ENUM_REQUEST_PKT; // ENUM_PORTS_TOTALAVAIL
typedef struct _P_PORT_ENUM_RECEIVE_PKT { BYTE RetCode[2]; BYTE TotalAvail[2]; P_DIALIN_PORT_INFO_0 Data[RAS_MAX_SERVER_PORTS]; } P_PORT_ENUM_RECEIVE_PKT, *PP_PORT_ENUM_RECEIVE_PKT;
typedef struct _P_DISCONNECT_USER_REQUEST_PKT { BYTE Request[2]; // DISCONNECT_USER
BYTE ComId[2]; } P_DISCONNECT_USER_REQUEST_PKT, *PP_DISCONNECT_USER_REQUEST_PKT;
typedef struct _P_DISCONNECT_USER_RECEIVE_PKT { BYTE RetCode[2]; } P_DISCONNECT_USER_RECEIVE_PKT, *PP_DISCONNECT_USER_RECEIVE_PKT;
typedef struct _P_PORT_CLEAR_REQUEST_PKT { BYTE Request[2]; // CLEAR_PORT_STATISTICS
BYTE ComId[2]; } P_PORT_CLEAR_REQUEST_PKT, *PP_PORT_CLEAR_REQUEST_PKT;
typedef struct _P_PORT_CLEAR_RECEIVE_PKT { BYTE RetCode[2]; } P_PORT_CLEAR_RECEIVE_PKT, *PP_PORT_CLEAR_RECEIVE_PKT;
typedef struct _P_SERVER_INFO_REQUEST_PKT { BYTE Request[2]; // GET_SERVER_INFO
} P_SERVER_INFO_REQUEST_PKT, *PP_SERVER_INFO_REQUEST_PKT;
typedef struct _P_SERVER_INFO_RECEIVE_PKT { BYTE RetCode[2]; P_DIALIN_SERVER_INFO_0 Data; } P_SERVER_INFO_RECEIVE_PKT, *PP_SERVER_INFO_RECEIVE_PKT;
typedef struct _P_PORT_INFO_REQUEST_PKT { BYTE Request[2]; // GET_PORT_INFO
BYTE ComId[2]; } P_PORT_INFO_REQUEST_PKT, *PP_PORT_INFO_REQUEST_PKT;
typedef struct _P_PORT_INFO_RECEIVE_PKT { BYTE RetCode[2]; P_DIALIN_PORT_INFO_1 Data; } P_PORT_INFO_RECEIVE_PKT, *PP_PORT_INFO_RECEIVE_PKT;
//
// These are the packets sent back and forth between a RAS 2.0 server
// and the RASADMIN APIs
//
typedef struct tagPortEnumReceivePkt { DWORD RetCode; WORD TotalAvail; RAS_PORT_0 *Data; } PORT_ENUM_RECEIVE, *PPORT_ENUM_RECEIVE;
typedef struct tagPortInfoReceivePkt { DWORD RetCode; DWORD ReqBufSize; RAS_PORT_1 Data; } PORT_INFO_RECEIVE, *PPORT_INFO_RECEIVE;
typedef struct tagPortClearReceivePkt { DWORD RetCode; } PORT_CLEAR_RECEIVE, *PPORT_CLEAR_RECEIVE;
typedef struct tagDisconnectUserReceivePkt { DWORD RetCode; } DISCONNECT_USER_RECEIVE, *PDISCONNECT_USER_RECEIVE;
typedef struct tagServerInfoReceivePkt { WORD RetCode; // VERY IMPORTANT TO BE A WORD!!! - RAS1.0 COMPATIBILITY
RAS_SERVER_0 Data; } SERVER_INFO_RECEIVE, *PSERVER_INFO_RECEIVE;
typedef struct _CLIENT_REQUEST { WORD RequestCode; WCHAR PortName[RASSAPI_MAX_PORT_NAME]; DWORD RcvBufSize; DWORD ClientVersion; } CLIENT_REQUEST, *PCLIENT_REQUEST;
//
// These are the packed structures that are sent out on the network.
// It is up to the receiver to unpack and convert to the proper endian
// for the host.
//
typedef struct _P_RAS_PORT_0 { BYTE wszPortName[2 * RASSAPI_MAX_PORT_NAME]; BYTE wszDeviceType[2 * RASSAPI_MAX_DEVICETYPE_NAME]; BYTE wszDeviceName[2 * RASSAPI_MAX_DEVICE_NAME_OLD]; BYTE wszMediaName[2 * RASSAPI_MAX_MEDIA_NAME]; BYTE reserved[4]; BYTE Flags[4]; BYTE wszUserName[2 * (UNLEN + 1)]; BYTE wszComputer[2 * NETBIOS_NAME_LEN]; BYTE dwStartSessionTime[4]; BYTE wszLogonDomain[2 * (DNLEN + 1)]; BYTE fAdvancedServer[4]; } P_RAS_PORT_0, *PP_RAS_PORT_0;
typedef struct _P_RAS_STATISTIC { BYTE Stat[4]; } P_RAS_STATISTIC, *PP_RAS_STATISTIC;
/* PPP control protocol results returned by RasPppGetInfo.
*/ typedef struct __PPP_NBFCP_RESULT { BYTE dwError[4]; BYTE dwNetBiosError[4]; BYTE szName[NETBIOS_NAME_LEN + 1]; BYTE wszWksta[2 * (NETBIOS_NAME_LEN + 1)]; } P_PPP_NBFCP_RESULT, *PP_PPP_NBFCP_RESULT;
typedef struct __PPP_IPCP_RESULT { BYTE dwError[4]; BYTE wszAddress[2 * (RAS_IPADDRESSLEN + 1)]; } P_PPP_IPCP_RESULT, *PP_PPP_IPCP_RESULT;
typedef struct __PPP_IPXCP_RESULT { BYTE dwError[4]; BYTE wszAddress[2 * (RAS_IPXADDRESSLEN + 1)]; } P_PPP_IPXCP_RESULT, *PP_PPP_IPXCP_RESULT;
typedef struct __PPP_ATCP_RESULT { BYTE dwError[4]; BYTE wszAddress[2 * (RAS_ATADDRESSLEN + 1)]; } P_PPP_ATCP_RESULT, *PP_PPP_ATCP_RESULT;
typedef struct __PPP_PROJECTION_RESULT { P_PPP_NBFCP_RESULT nbf; P_PPP_IPCP_RESULT ip; P_PPP_IPXCP_RESULT ipx; P_PPP_ATCP_RESULT at; } P_PPP_PROJECTION_RESULT, *PP_PPP_PROJECTION_RESULT;
typedef struct _P_RAS_PORT_1 { P_RAS_PORT_0 rasport0; BYTE LineCondition[4]; BYTE HardwareCondition[4]; BYTE LineSpeed[4]; // in bits/second
BYTE NumStatistics[2]; BYTE NumMediaParms[2]; BYTE SizeMediaParms[4]; P_PPP_PROJECTION_RESULT ProjResult; } P_RAS_PORT_1, *PP_RAS_PORT_1;
typedef struct _P_RAS_FORMAT { BYTE Format[4]; } P_RAS_FORMAT, *PP_RAS_FORMAT;
typedef union _P_RAS_VALUE { BYTE Number[4]; struct { BYTE Length[4]; BYTE Offset[4]; } String; } P_RAS_VALUE, *PP_RAS_VALUE;
typedef struct _P_RAS_PARAMS { BYTE P_Key[RASSAPI_MAX_PARAM_KEY_SIZE]; P_RAS_FORMAT P_Type; BYTE P_Attributes; P_RAS_VALUE P_Value; } P_RAS_PARAMS, *PP_RAS_PARAMS;
typedef struct _P_RAS_SERVER_0 { BYTE TotalPorts[2]; BYTE PortsInUse[2]; BYTE RasVersion[4]; } P_RAS_SERVER_0, *PP_RAS_SERVER_0;
typedef struct _P_PORT_ENUM_RECEIVE { BYTE RetCode[4]; BYTE TotalAvail[2]; P_RAS_PORT_0 Data[1]; } P_PORT_ENUM_RECEIVE, *PP_PORT_ENUM_RECEIVE;
typedef struct _P_PORT_INFO_RECEIVE { BYTE RetCode[4]; BYTE ReqBufSize[4]; P_RAS_PORT_1 Data; } P_PORT_INFO_RECEIVE, *PP_PORT_INFO_RECEIVE;
typedef struct _P_PORT_CLEAR_RECEIVE { BYTE RetCode[4]; } P_PORT_CLEAR_RECEIVE, *PP_PORT_CLEAR_RECEIVE;
typedef struct _P_DISCONNECT_USER_RECEIVE { BYTE RetCode[4]; } P_DISCONNECT_USER_RECEIVE, *PP_DISCONNECT_USER_RECEIVE;
typedef struct _P_SERVER_INFO_RECEIVE { BYTE RetCode[2]; P_RAS_SERVER_0 Data; } P_SERVER_INFO_RECEIVE, *PP_SERVER_INFO_RECEIVE;
typedef struct _P_CLIENT_REQUEST { BYTE RequestCode[2]; BYTE PortName[2 * RASSAPI_MAX_PORT_NAME]; BYTE RcvBufSize[4]; BYTE ClientVersion[4]; } P_CLIENT_REQUEST, *PP_CLIENT_REQUEST;
//
// The following macros deal with on-the-wire integer and long values
// On the wire format is little-endian i.e. a long value of 0x01020304 is
// represented as 04 03 02 01. Similarly an int value of 0x0102 is
// represented as 02 01.
//
// The host format is not assumed since it will vary from processor to
// processor.
//
// Get a short from on-the-wire format to the host format
#define GETUSHORT(DstPtr, SrcPtr) \
*(unsigned short *)(DstPtr) = \ ((*((unsigned char *)(SrcPtr)+1) << 8) +\ (*((unsigned char *)(SrcPtr)+0)))
// Get a dword from on-the-wire format to the host format
#define GETULONG(DstPtr, SrcPtr) \
*(unsigned long *)(DstPtr) = \ ((*((unsigned char *)(SrcPtr)+3) << 24) +\ (*((unsigned char *)(SrcPtr)+2) << 16) + \ (*((unsigned char *)(SrcPtr)+1) << 8) + \ (*((unsigned char *)(SrcPtr)+0)))
// Put a ushort from the host format to on-the-wire format
#define PUTUSHORT(DstPtr, Src) \
*((unsigned char *)(DstPtr)+1)=(unsigned char)((unsigned short)(Src) >> 8),\ *((unsigned char *)(DstPtr)+0)=(unsigned char)(Src)
// Put a ulong from the host format to on-the-wire format
#define PUTULONG(DstPtr, Src) \
*((unsigned char *)(DstPtr)+3)=(unsigned char)((unsigned long)(Src) >> 24),\ *((unsigned char *)(DstPtr)+2)=(unsigned char)((unsigned long)(Src) >> 16),\ *((unsigned char *)(DstPtr)+1)=(unsigned char)((unsigned long)(Src) >> 8),\ *((unsigned char *)(DstPtr)+0)=(unsigned char)(Src)
#endif // _RASSAPIP_H_
|