RAS协议

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
暂停:表示RasDial需要更多的信息来建立连接,默认设置是取消暂停状态。在RASDIALEXTENSIONS结构中设置RDEOPT_PauseStates标志,便可以启用通知进程。当连接处于暂停状态时,可能有如下原因
1因为身份验证失败,用户需要提供新的登陆凭证
2密码过期,需要一个新密码
3用户密码需要提供一个回拨号码
DWORDdwfOptions;//允许为使用RASDIAL扩展特性而设置为标志
HWNDhwndParent;//不用,应该设置NULL字符
ULONG_PTR reserved;//不用,应该设置0
#if(WINVER>=0x500)
ULONG_PTR reserved1;保留应该设置0
RASEAPINFORasEapInfo;//Windows 2000上,允许指定"扩展性身份验证协议"(EAP)信息
5拨号:
{
RASDIALPARAMSrdParams;
charszBuf[256] = "";
//--------------------------------------------------------------------------------
ZeroMemory(&rdParams,sizeof(RASDIALPARAMS));
Iprasconnstatus为一个结构体RASCONNSTATUS,它取得当前连接状态
typedefstruct_RASCONNSTATUS{
DWORDdwSize;//结构体大小
RASCONNSTATErasconnstate;//一种连接状态
DWORDdwError;//返回值不是0,就取得具体的错误代码
//允许指定一个电话号码,RAS服务器可以给据这个号码回拨,如果RAS服务器允许有一个回拨号码,他就中断原来的连接,利用指定的回拨号码回拨
//这个特性非常有用,因为服务器可以知道连接的用户来自何处
rdParams.szCallbackNumber[0] = '*';
rdParams.szDomain[0] = '*';//可选项,指定最初的电话薄字条目拨叫一个RAS多链路连接
#if(WINV百度文库R>=0x401)
DWORDdwSubEntry;//标志用户帐号所在的Windows 2000或者NT区域
ULONG_PTRdwCallbackId;//允许把一个应用程序定义的值投递到一个RasDidalFunc2回拨函数中
#endif
}RASDIALPARAMS;
(3)lpszPhonebook:识别到一个电话薄文件的路径
//--------------------------------------------------------------------------------
CStringun,pw;
un =theApp.GetIniString(sCurrentProvider, "UserName", "");
2断开拨号函数RasHangUp:
DWORDRasHangUp(HRASCONNhrasconn);//hrasconn正在连接的句柄,也就是在上一个函数中的最后一个参数hRasConn所得到的值
3获取连接状态函数RasGetConnectStatus:
DWORDRasGetConnectStatus(HRASCONNhrasconn,LPRASCONNSTATUSIprasconnstatus);
6RasGetProjectionInfo:
DWORDRasGetProjectionInfo(
HRASCONNhrasconn,//连接句柄
RASPROJECTIONrasprojection,//枚举类型
LPVOIDlpprojection,//取得一个数据结构该结构和rasprojection中指//定的枚举类型有关联
//RasDial就会选择系统上安装的第一个可以使用的Modem,并依据下一个参数szPhoneNumber来拨叫连接
lstrcpy(rdParams.szEntryName,sCurrentProvider);//
//rdParams.szPhoneNumber代表一个电话号码,优先于szEntryName指定的电话薄条目内包含的电话号码
pw=theApp.GetPassword(TRUE);
lstrcpy(rdParams.szUserName, un);//标志RAS服务器上的用户进行身份验证时所用的登陆名
lstrcpy(rdParams.szPassword,pw);//标志RAS服务器上的用户进行身份验证所用的密码
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
TCHARszPhoneNumber[RAS_MaxPhoneNumber+1];//代表一个电话号码,优先于szEntryName指定的电话薄条目内包含的电话号码
TCHARszCallbackNumber[RAS_MaxCallbackNumber+1];//允许指定一个电话号码,RAS服务器可以给据这个号码回拨,如果RAS服务器允许有一个回拨号码,他就中断原来的连接,利用指定的回拨号码回拨
TCHARszEntryName[RAS_MaxEntryName+1];//允许标志一个电话薄条目,该条目包含在RASDIAL函数的lpszPhonebook参数列出的电话薄文件内。该参数比较重要,因为电话薄条目能够使用户更好地指定RAS连接属性。如选定一个Modem或者一个分帧协议等,但是,为了使用RasDial而指定一个电话薄条目并不是非用不可,可以选择使用。如果该字段为空,RasDial就会选择系统上安装的第一个可以使用的Modem,并依据下一个参数szPhoneNumber来拨叫连接
LPHRASCONNlphRasConn);
参数说明:
(1)lpRasDialExtensions为RASDIALEXTENSIONS结构体变量
typedefstructtagRASDIALEXTENSIONS{
DWORDdwSize;//必须设置为RASDIALEXTENSIONS结构体的长度(按字节)
if (rde!= NULL)
{
rde(NULL,sCurrentProvider);
QueryConnections();//查询连接状态
QueryPhones(sCurrentProvider);////查询目前的拨号情况
}
::FreeLibrary(hLib);
}
4编辑已有连接:
RasEditPhonebookEntry(GetSafeHwnd(), NULL,sCurrentProvider);//编辑已有连接
5子连接句柄RasGetSubEntryHandle:该函数允许为多连接中一个具体的字条目取得一个连接句柄,
远程访问服务器利用这个投影信息来表示网络上的一个远程客户机,比如说,在一个分帧协议上建立一个连接的时候,这个连接采用的是IP协议,IP配置信息(如分配的ip地址)就会从RAS服务器到客户机之间建立起来。要想获得PPP(点对点)分帧协议上的协议投影信息,就可以使用管理连接函数中的第3个函数RasGetProjectionInfo
intpd =atoi(theApp.GetIniString(gchMain,gchPulseDialing, "1"));
if (1 == pd)
lstrcpy(rdParams.szPhoneNumber,CString("P") +GetPhoneListSelection());
else
lstrcpy(rdParams.szPhoneNumber,GetPhoneListSelection());
#endif
}RASDIALEXTENSIONS;
(2)lpRasDialParams
lpRasDialParams为结果RASDIALPARAMS变量
typedefstruct_RASDIALPARAMS
{
DWORDdwSize;//结构体长度(按字节).有了这个标志,RAS便可以对程序使用的操作系统平台版本进行内部判断。因为不同的操作系统,这个结构体是不一样的
这个特性非常有用,因为服务器可以知道连接的用户来自何处。
TCHARszUserName[UNLEN+1];//标志RAS服务器上的用户进行身份验证时所用的登陆名
TCHARszPassword[PWLEN+1];//标志RAS服务器上的用户进行身份验证所用的密码
TCHARszDomain[DNLEN+1];//可选项,指定最初的电话薄字条目拨叫一个RAS多链路连接
RAS协议:
远程访问服务(RAS)是Windows 9X/NT/2000操作系统提供的系统服务器之一,通过电话线可以使单独的计算机接入网络,或通过两个RAS对拨使两个局域网互连,此项服务的功能可以使远程的计算机以较低的费用同网络连接,而且一旦建立了RAS连接,则可以使用其它的几乎所有的网络函数,对用户来说,实际上和通过网卡在基于网中进行数据传输是一样的。
LPCTSTRlpszEntry// pointer to an entry name to delete
);
//载入动态库
HINSTANCEhLib=LoadLibrary(_T("RASAPI32.DLL"));
if (NULL ==hLib) return;
RDErde= (RDE)GetProcAddress(hLib, "RasDeleteEntryA");
TCHARszDeviceType[RAS_MaxDeviceType+1];//连接所用的设备类型
TCHARszDeviceName[RAS_MaxDeviceName+1];//当前设备名称
}RASCONNSTATUS
RAS的活动连接状态有很多
连接有3种活动状态:运行,暂停,中止
运行:RasDial调用仍在进程当中,每一处运行状态活动都将提供进程状态分析
rdParams.dwSize=sizeof(RASDIALPARAMS);
//允许标志一个电话薄条目,该条目包含在RASDIAL函数的lpszPhonebook参数列出的电话薄文件内
//该参数比较重要,因为电话薄条目能够使用户更好地指定RAS连接属性。如选定一个Modem或者一个分帧协议等,
//但是,为了使用RasDial而指定一个电话薄条目并不是非用不可,可以选择使用。如果该字段为空,
2增加新的连接主要通过调用
RasCreatePhonebookEntry(GetSafeHwnd(),sCurrentProvider);//新建拨号连接
3删除连接
{
//结构体
typedefDWORD (WINAPI* RDE)
(
LPCTSTRlpszPhonebook, // pointer to full path and filename of
LPDWORDlpcb//
);//该函数返回时,变量Lpcb会得到包含获得投影信息所需要的缓冲区//长度
相关函数:
1RasEnumEntries: //Ras规定要获得所有连接,必须连续两次调用RasEnumEntries函数,第一次要获得需要的缓冲区的大小,然后申请该缓冲区;在第二次调用的时候才能够真正获得所有的连接。
中止:表示RasDial拨号失败,或者RasHangUp函数关闭连接
4枚举连接函数RasEnumConnections:列出所有活动的RAS连接
DWORDRasEnumConnections(LPRASCONNlprasconn,LPDWORDlpcb,LPDWORDlpcConnections);
拨号和连接管理:
1拨号函数RasDial
DWORDRasDial(
LPRASDIALEXTENSIONSlpRasDialExtensions,
LPCRSTRlpszPhonebook,
LPRASDIALPARAMSlpRasDialParams,
DWORDdwNotifierType,
LPVOIDlpvNotifier,
相关文档
最新文档