关于 RAS 管理 DLL

每当用户尝试连接或断开连接时,RAS 管理 DLL 就会导出 RAS 服务器调用的函数。 下面是 RAS 管理 DLL 的一些可能用途:

  • 决定是否允许用户连接到服务器。 除了标准 RAS 用户身份验证之外,管理 DLL 还可以提供安全检查。
  • 记录每个用户连接到服务器和断开服务器的时间。 这可用于计费或审核目的。
  • 为每个用户分配 IP 地址。 这对于安全性很有用,因为此功能用于将用户的连接映射到特定计算机。

RAS 管理 DLL 的位置在注册表中指定;请参阅 RAS 管理 DLL 注册表设置

RAS 支持多个管理 DLL。 注册表支持多个 DLL 位置。 RAS 按照 DLL 在注册表中的列出顺序调用 DLL 中的函数;请参阅 RAS 管理 DLL 注册表设置

Windows 2000 Server: RAS 不支持多个 DLL。

RAS 管理 DLL 必须实现并导出以下所有函数:

MprAdminAcceptNewLink

MprAdminInitializeDll

MprAdminLinkHangupNotification

MprAdminTerminateDll

此外,RAS 管理 DLL 必须实现和导出任一

MprAdminAcceptNewConnection

MprAdminConnectionHangupNotification

MprAdminAcceptNewConnection2

MprAdminConnectionHangupNotification2

如果未实现所有必需的函数,则 RAS 无法启动。

Windows 2000 Server: 管理 DLL 必须实现 MprAdminGetIpAddressForUserMprAdminReleaseIpAddress 函数。 如果 DLL 实现其中一个函数,则还必须实现另一个函数。

当路由和远程访问服务首次启动时,RAS 会调用 MprAdminInitializeDll 函数。 MprAdminInitializeDll 函数为管理 DLL 提供了执行任何必要初始化的机会。 同样,当路由和远程访问服务关闭时,RAS 会调用 MprAdminTerminateDll 服务。 此函数允许管理 DLL 在退出之前执行任何必要的清理。

MprAdminAcceptNewConnectionMprAdminConnectionHangupNotification 函数使 DLL 能够审核用户与服务器的连接。 每当用户尝试连接时,RAS 服务器就会调用 MprAdminAcceptNewConnection 函数。 此函数可阻止用户进行连接。 MprAdminAcceptNewConnection 函数还可以生成用于计费或审核的日志条目。 当用户断开连接时,RAS 服务器会调用 MprAdminConnectionHangupNotification 函数,该函数可以记录用户断开连接的时间。

MprAdminAcceptNewConnection2MprAdminConnectionHangupNotification2 函数类似于 MprAdminAcceptNewConnectionMprAdminConnectionHangupNotification。 但是,当 RAS 调用 MprAdminAcceptNewConnection2MprAdminConnectionHangupNotification2 函数时,RAS 会传入 RAS_CONNECTION_2类型的附加参数。

RAS 支持多个管理 DLL。 仅当每个 DLL 中 MprAdminAcceptNewConnection 或 MprAdminAcceptNewConnection2 函数的实现接受连接时,才允许远程访问用户进行连接。 换句话说,每个 DLL 都必须接受连接,以便允许用户进行连接。

连接到 RAS 服务器时,单个 RAS 连接可能会使用多个链接。 MprAdminAcceptNewLinkMprAdminLinkHangupNotification 函数使管理 DLL 能够管理连接中的单个链接。 每当为连接建立新链接时,RAS 将调用 MprAdminAcceptNewLink 。 由于所有连接至少涉及一个链接,因此 RAS 始终在 MprAdminAcceptNewConnection 或MprAdminAcceptNewConnection2 返回后立即调用 MprAdminAcceptNewLink 一次,前提是 MprAdminAcceptNewConnectionMprAdminAcceptNewConnection2 接受连接。 每当连接的链接关闭时,RAS 就会调用 MprAdminLinkHangupNotification

由于 RAS 支持多个管理 DLL,因此仅当每个 DLL 中 MprAdminAcceptNewLink 函数的实现接受连接时,才允许远程访问用户进行连接。 换句话说,每个 DLL 都必须接受链接才能建立链接。

RAS 服务器对用户进行身份验证后,会调用 MprAdminGetIpAddressForUser 函数来获取远程客户端的 IP 地址。 此函数提供一种替代方案,用于将 IP 地址映射到拨入用户。 如果未实现 MprAdminGetIpAddressForUser ,RAS 服务器会将远程用户与从静态 IP 地址池中选择的 IP 地址或动态主机配置协议 (DHCP) 服务器选择的 IP 地址相关联。 MprAdminGetIpAddressForUser 函数允许 DLL 替代此默认 IP 地址并为每个用户指定特定的 IP 地址。 MprAdminGetIpAddressForUser 函数可以设置一个标志,使 RAS 在用户断开连接时调用 MprAdminReleaseIpAddress 函数。 然后,DLL 可以使用 MprAdminReleaseIpAddress 更新其用户到 IP 地址的映射。

RAS 支持多个管理 DLL,但它仅在实现和导出它们的第一个 DLL 中调用 MprAdminGetIpAddressForUserMprAdminReleaseIpAddress 函数。 RAS 忽略其他 DLL 中这些函数的实现。 RAS 按照它们在 注册表中的列出顺序检查这些函数的 DLL。

RAS 将调用序列化到管理 DLL 中。 对给定 RAS 客户端的 DLL 函数之一的调用不会抢占对不同 RAS 客户端的该函数的调用;在初始调用完成之前,RAS 不会为另一个客户端调用 函数。 此外,序列化扩展到某些函数组。 IP 地址函数序列化为组;对 MprAdminGetIpAddressForUserMprAdminReleaseIpAddress 的 调用会阻止对两个函数的调用,直到初始调用返回为止。 MprAdminAcceptNewConnectionMprAdminConnectionHangupNotification 也序列化为组。

RAS 执行在一个进程中分配 IP 地址的函数;连接和断开连接通知的函数在另一个进程中执行。 因此,DLL 不依赖于这两组函数之间的共享数据。

请勿从标注函数内部调用任何 RAS 管理功能RAS 用户管理功能 。 从标注函数中调用时,对这些函数的调用不会返回。

如果 RAS 服务器在尝试加载 RAS 管理 DLL 或调用 DLL 的函数之一时发生错误,则 RAS 服务器会在系统事件日志中记录错误。 例如,如果 DLL 为导出的函数指定了错误的名称,或者它未在 DEF 文件中包含函数名称,则可能会发生这种情况。 事件日志中的条目指示失败的原因。

Windows 2000/NT: 不支持多个管理 DLL。