自己做RAS Administration DLL

本文介绍RAS Administration DLL的开发要点,包括MprAdminInitializeDll函数正确原型、获取RAS句柄的方法、DLL注册表配置及必需实现的函数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文其他部分是MSDN的内容,我自己的心得在这里:
  • MprAdminInitializeDll这个函数的原型,VS2003自带的MSDN里,被定义为无返回值(void),如果按照这个原型去做,会死得很难看。正确的原型是在线MSDN中定义的返回一个DWORD型(NOERROR表示成功)
  • MprAdminAcceptNewConnection提供的用户IP,其实是虚网地址,而不是它真正的IP地址,所以,用处不大(无法根据一个IP来判断用户是否合法)。
  • 如果想用MprAdminServerConnect取得RAS句柄,不能在MprAdminInitializeDll等函数中调用,因为此时RAS尚未成功启动,会返回RPC_S_UNKNOWN_IF,而在其他事件里调用,好象会造成死锁,所以,我的作法是,在MprAdminInitializeDll里启动一个线程,每秒钟尝试一次,直到成功取得为止。通常我会用QueueUserWorkItem这个API来做这个事情。
RAS是指Remote Access Service,而RAS Administration DLL是指用户自己写的一个动态链接库,它实现了规定的几个函数,由RAS来加载,当有用户连入或断开时,RAS会自动调用这些函数,使得我们可以实现一些附加的需求,比方说可以由自己来决定是否允许一个用户连入,或者在连入和断开的时候记录日志,还可以给用户指定(虚网的)IP:
要让RAS知道我们自己编写的DLL在哪里,必须在注册表中创建名为  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/RAS/AdminDll 的键,然后在该键下创建两个字符串型的值:
名称示例
DisplayName自定义显示名称,可以任意指定。无于声处听惊雷
DLLPathDLL的路径全名,多个DLL名之间用逗号分开(但Windows 2000 Server是不支持多个DLL的,目前仅2003支持)c:/foo/bar.dll

DLL中必须至少实现并export下列四个函数,否则RAS启动会失败:

而在Windows 2000 Server中,DLL还必须实现  MprAdminGetIpAddressForUser 和  MprAdminReleaseIpAddress 这两个函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值