网络重定向程序的基本体系结构

网络重定向程序需要以下基本软件组件:

  • 内核模式文件系统设备驱动程序 (提供网络重定向程序功能的 SYS) 。

  • 用户模式动态链接库 (DLL) ,它为客户端用户应用程序提供对非文件操作的网络提供程序接口的访问权限,并允许与提供网络重定向程序功能的内核模式文件系统驱动程序进行通信。

网络重定向器的内核模式文件系统驱动程序组件与对象管理器、缓存管理器、内存管理器、I/O 系统和其他内核系统交互,以便将远程文件访问集成到操作系统中。 驱动程序通过 I/O 管理器接收来自客户端应用程序的请求,以便进行远程文件访问,并通过网络将必要信息发送到远程文件服务器。 驱动程序还会从远程文件服务器接收响应,并通过 I/O 管理器将信息传递回客户端应用程序。 网络重定向程序驱动程序还必须实现用于远程访问的网络协议,或者提供对实现此网络协议或通信机制的另一个内核驱动程序、用户模式应用程序或服务的调用。 实现此网络通信的最常见方法是使用传输驱动程序接口 (TDI) (TCP/IP 调用现有网络协议堆栈,例如) 。 然后,网络协议堆栈使用网络驱动程序接口规范 (NDIS) 与网络接口卡在底层进行通信。 还可以为此通信机制使用特定于应用程序的接口。

用户模式 DLL 通过不是文件操作的网络提供程序接口从客户端接收特殊请求。 这些请求可用于确定网络提供程序的功能、枚举远程网络资源、登录到远程网络、更改网络密码、与远程服务器连接、装载远程网络共享或资源以及断开与远程共享的连接。 用户模式 DLL 实现用于访问远程文件系统的 WNet 用户模式 API 的等效项。 然后,此 DLL 通过特殊的 IOCTL 调用与内核模式网络重定向程序驱动程序通信,以满足这些客户端请求。 例如,当枚举网络资源 (浏览网络邻里) 或连接到远程文件共享和资源时,Windows 资源管理器会调用此 DLL (打印机) 。 此 DLL 也从 NET 命令行工具调用,用于查看远程资源 (net view \\computername) , (net use) 连接到远程文件共享或断开连接。 自定义应用程序也可以使用多提供程序路由器的公开 WNet API (MPR) 调用此 DLL。

网络重定向程序可能还需要几个其他组件:

  • 如果需要将任何全局数据表安全地存储在用户模式 DLL 中,可能需要服务应用程序充当用户模式 DLL 和内核模式驱动程序之间的中介。 由于用户模式 DLL 在客户端应用程序的进程空间中实例化,因此无法保护需要跨所有客户端应用程序全局的任何内部数据表。 连接到用户模式网络提供程序 DLL 时,每个客户端数据可能是每个客户端应用程序的专用数据,但不是全局数据。 (.exe文件) 的服务应用程序可用作用户模式 DLL 与存储全局数据表的内核驱动程序之间的中介。 例如,Microsoft Networks 使用内置于 svchost.exe 的工作站服务来存储“net use”连接的全局表,并充当内核模式驱动程序的中介。 对于 Microsoft Networks,用户模式 DLL ntlanman.dll 调用 svchost.exe 中的工作站服务,然后调用内核模式驱动程序mrxsmb.sys,后者提供网络重定向程序函数。

  • 用于在系统中安装和正确注册网络重定向程序组件的系统,其中必须包括创建任何必要的注册表项。 如果不再需要该软件,还应有一种方法来卸载网络重定向程序。 可以使用 Microsoft 系统安装程序 (MSI) 或 Windows INF 脚本文件来执行此设置。 还可以使用自定义安装程序完成此安装和设置。

  • 如果网络重定向程序使用未包含在操作系统 (Xerox 网络服务中的网络协议(例如) ),则需要安装自定义内核模式 TDI 驱动程序。 需要安装新的 TDI 驱动程序,该驱动程序实现用于通信的网络协议。 内核模式网络重定向程序驱动程序连接到自定义 TDI 驱动程序的上边缘。 自定义 TDI 驱动程序反过来会在其下边缘与 NDIS 驱动程序通信。

    请注意,如果网络重定向程序使用 TCP/IP 协议,则不需要自定义 TDI 驱动程序。 在这种情况下,网络重定向程序将连接到 TCP/IP 协议 TDI 驱动程序的上边缘。

  • 有时需要管理工具来提供从用户模式到内核模式驱动程序的访问权限,以便进行特殊配置、诊断和管理。 此工具还可用于启用或禁用跟踪和日志记录以排查问题。 该工具将使用各种自定义专用 IOCTL 与内核驱动程序通信。 此工具还可能提供对服务控制管理器 (SCM) 的访问权限,以管理中间服务,其中全局数据安全存储到用户模式网络提供程序 DLL。

注意 在 Windows Vista 之后的 Microsoft Windows 版本中将不支持 TDI。 请改用 Windows 筛选平台Winsock 内核