第五卷网络驱动程序设计指南 第一部分网络驱动程序 第一章网络驱动程序设计指南的向导 第二章内核模式驱动程序的网络结构. 2.1 Windows2000网络结构和OSI模型 22NDS驱动程序 2.2.1NDS微端口驱动程序 477889 2.22NDS中间层驱动程序 2.2.3NDS协议驱动程序 23TD驱动程序 2.4网络驱动程序环境 241无连接环境的网络驱动程序 242面向连接环境下的网络驱动程序 2.4.3WAN网络驱动程序的环境 第三章网络驱动程序编程要点 3.1可移植性 3.2多处理器支持 222 3.3 IRQL 34同步和指示 3.5包结构 3.6使用共享内存 3.7异步O和完成函数 第二部分微端口NC驱动程序 第一章 NDIS NIC微端口驱动程序 1.1NC微端口驱动程序类型 12网络接口卡支持 1.3微端口驱动程序代码的重要特征 1.3. MiniportXxxI函数 1.3.2与NDS库链接 1.3.3微端口适配器环境 1.34VC环境 1.3.5网络OID 4驱动程序例子 第二章NC微端口操作和函数概要 21NIC微端口操作 2.1.1初始化NDS库和注册微端口驱动程序 2.12注册网络接口卡 2.1.3对查询和设置微端口信息作出响应 2.14产生,激活,去活,和删除虚连接 2.1.5发送数据 2.1.5.1多包发送 21.52单包发送
- -I 第五卷 网络驱动程序设计指南...................................................................................... 12 第一部分 网络驱动程序.......................................................................................... 13 第一章 网络驱动程序设计指南的向导.............................................................. 14 第二章 内核模式驱动程序的网络结构.............................................................. 17 2.1 Windows 2000 网络结构和OSI模型.................................................... 17 2.2 NDIS驱动程序..................................................................................... 18 2.2.1 NDIS微端口驱动程序................................................................. 18 2.2.2 NDIS中间层驱动程序................................................................. 19 2.2.3 NDIS协议驱动程序..................................................................... 20 2.3 TDI驱动程序........................................................................................ 20 2.4 网络驱动程序环境.............................................................................. 20 2.4.1 无连接环境的网络驱动程序....................................................... 20 2.4.2 面向连接环境下的网络驱动程序................................................ 21 2.4.3 WAN网络驱动程序的环境 .......................................................... 22 第三章 网络驱动程序编程要点........................................................................ 23 3.1 可移植性............................................................................................ 23 3.2 多处理器支持..................................................................................... 23 3.3 IRQL................................................................................................... 24 3.4 同步和指示......................................................................................... 24 3.5 包结构................................................................................................ 26 3.6 使用共享内存..................................................................................... 27 3.7 异步I/O和完成函数............................................................................. 27 第二部分 微端口NIC驱动程序................................................................................ 29 第一章 NDIS NIC微端口驱动程序.................................................................... 30 1.1 NIC微端口驱动程序类型...................................................................... 30 1.2 网络接口卡支持.................................................................................. 30 1.3 微端口驱动程序代码的重要特征......................................................... 32 1.3.1 MiniportXxx函数........................................................................ 32 1.3.2 与NDIS库链接........................................................................... 32 1.3.3 微端口适配器环境..................................................................... 32 1.3.4 VC环境...................................................................................... 33 1.3.5 网络OID.................................................................................... 33 1.4 驱动程序例子..................................................................................... 34 第二章 NIC微端口操作和函数概要.................................................................. 35 2.1 NIC微端口操作.................................................................................... 35 2.1.1 初始化NDIS库和注册微端口驱动程序........................................ 35 2.1.2 注册网络接口卡........................................................................ 35 2.1.3 对查询和设置微端口信息作出响应............................................ 36 2.1.4 产生,激活,去活,和删除虚连接............................................ 36 2.1.5 发送数据................................................................................... 37 2.1.5.1 多包发送......................................................................... 37 2.1.5.2 单包发送......................................................................... 38
2.1.6指示和传递接收的数据 2.1.6.1多包接收 2.1.62单包接收 2.1.7指示状态 218复位网络接口卡 2.1.9终止一个微端口NIC驱动程序 22微端口上层函数 2.2.1无连接微端口的上层函数 2.22面向连接微端口的上层函数 23由微端口调用的NDS函数 2.3.1NDS提供的初始化和注册函数 2.32NDS提供的硬件设置函数 233NDS提供的IO端口函数 234NDS数据的与DMA相关的函数 235NDS提供的中断处理函数 236NDS提供的同步函数 2.37NDS提供的状态函数 2.38NDS为无连接微端口提供的发送和接收函数 2.39NDS为面向连接微端口提供的发送和接收函数 23.10NDS提供的带外数据宏 2311NDS提供的包和缓存处理函数 2.3.12NDS提供的支持函数 2.3.13NDS提供的媒体相关宏 999100 第三章NC微端口驱动程序入口点和初始化 3.1NDS微端口驱动程序入口函数 3.1.1初始化包裹 3.12注册微端口 3.1.2.1指定NDS版本号 3.1.2.2注册 MiniportXxx函数 3.1.2.3为中断支持的注册处理程序 3.1.2.4为无连接微端口选择一个发送函数 3.1.2.5为无连接微端口选择接收函数 3.1.2.6注册一个分配完成处理程序 31.27注册一个挂起检测 Check For Hang)处理程序 3.2NDIS微端口初始化. 3.21注册一个NIC. 3.2.1.1分配一个适配器指定的环境区域 3.2.1.2读取配置信息 3.2.1.3注册NC 3.22声明资源 3.221分配内存 3.22.2注册端口 3.22.3总线管理器DMA设备初始化 3.224可编程IO设备初始化
- II- 2.1.6 指示和传递接收的数据.............................................................. 38 2.1.6.1 多包接收......................................................................... 39 2.1.6.2 单包接收......................................................................... 39 2.1.7 指示状态................................................................................... 39 2.1.8 复位网络接口卡........................................................................ 40 2.1.9 终止一个微端口NIC驱动程序.................................................... 40 2.2 微端口上层函数.................................................................................. 40 2.2.1 无连接微端口的上层函数.......................................................... 41 2.2.2 面向连接微端口的上层函数....................................................... 42 2.3 由微端口调用的NDIS函数................................................................... 43 2.3.1 NDIS提供的初始化和注册函数................................................... 44 2.3.2 NDIS提供的硬件设置函数.......................................................... 45 2.3.3 NDIS提供的I/O端口函数............................................................ 45 2.3.4 NDIS数据的与DMA相关的函数.................................................. 46 2.3.5 NDIS提供的中断处理函数.......................................................... 47 2.3.6 NDIS提供的同步函数................................................................. 48 2.3.7 NDIS提供的状态函数................................................................. 49 2.3.8 NDIS为无连接微端口提供的发送和接收函数.............................. 49 2.3.9 NDIS为面向连接微端口提供的发送和接收函数........................... 50 2.3.10 NDIS提供的带外数据宏............................................................ 50 2.3.11 NDIS提供的包和缓存处理函数................................................. 51 2.3.12 NDIS提供的支持函数............................................................... 53 2.3.13 NDIS提供的媒体相关宏............................................................ 55 第三章 NIC微端口驱动程序入口点和初始化.................................................... 57 3.1 NDIS微端口驱动程序入口函数............................................................. 57 3.1.1 初始化包裹............................................................................... 57 3.1.2 注册微端口............................................................................... 58 3.1.2.1 指定NDIS版本号.............................................................. 58 3.1.2.2 注册MiniportXxx函数....................................................... 58 3.1.2.3 为中断支持的注册处理程序............................................. 60 3.1.2.4 为无连接微端口选择一个发送函数................................... 61 3.1.2.5 为无连接微端口选择接收函数.......................................... 61 3.1.2.6 注册一个分配完成处理程序............................................. 62 3.1.2.7 注册一个挂起检测(CheckForHang) 处理程序.................... 62 3.2 NDIS微端口初始化.............................................................................. 62 3.2.1 注册一个NIC............................................................................. 63 3.2.1.1 分配一个适配器指定的环境区域...................................... 64 3.2.1.2 读取配置信息.................................................................. 64 3.2.1.3 注册NIC.......................................................................... 64 3.2.2 声明资源................................................................................... 65 3.2.2.1 分配内存......................................................................... 65 3.2.2.2 注册端口......................................................................... 66 3.2.2.3 总线管理器DMA设备初始化............................................ 66 3.2.2.4可编程I/O设备初始化........................................................ 67
3.22.5内存映射设备初始化 3.22.6从属DMA设备初始化 3.23注册一个中断 3.24注册一个关闭函数 3.2.5初始化轮询时钟 3.26在初始化当中的同步 3.27在初始化时处理错误 3.3查询微端口信息 3.4减少微端口初始化时间 第四章数据传输 1中断处理 4.2DPC处理程序 43带外(OOB)数据包 43.1等待发送的OOB数据 43.2接收的OOB数据 4.4发送包 01446678900 44.1无连接微端口的多包传送 44.1.1串行微端口的多包传送 44.1.2非串行微端口的多包传送 44.2无连接微端口的单包发送 44.3面向连接微端口的多包发送 444发送数据前的内存同步 44.5发送步骤 44.5.1在总线控制器 DMA NIC上发送包 44.5.2在PIO设备上发送单包 44.5.3使用板上内存发送包 4.5非串行微端口 非串行微端口的NDS要求 45.2非串行微端口的驱动程序内部要求 46接收数据 46.1无连接和面向连接微端口的多包接收 68888982g 4.6.2无连接微端口的单包接收 4.6.3接收数据的高速缓存( Cache)因素 46.4接收数据的步骤 4641接收期间的包管理 46.42在总线控制器 DMA NIC上接收数据 464.3在 PIO NIC上接收数据 4644在内存映射设备上接收数据 47保持统计量 4.88021P包的优先权 4.8.1查询802.1p优先权支持 4.8.2802.1优先权的包支持 483为发送和接收指定包的大小 48.4默认情况下禁止802.1p的优先杈支持
- III- 3.2.2.5 内存映射设备初始化........................................................ 68 3.2.2.6 从属DMA设备初始化....................................................... 68 3.2.3 注册一个中断............................................................................ 68 3.2.4 注册一个关闭函数..................................................................... 69 3.2.5 初始化轮询时钟........................................................................ 69 3.2.6 在初始化当中的同步................................................................. 70 3.2.7 在初始化时处理错误................................................................. 70 3.3 查询微端口信息.................................................................................. 70 3.4 减少微端口初始化时间....................................................................... 71 第四章 数据传输............................................................................................. 74 4.1 中断处理........................................................................................... 74 4.2 DPC处理程序.................................................................................. 76 4.3 带外(OOB)数据包....................................................................... 76 4.3.1 等待发送的OOB数据............................................................... 77 4.3.2 接收的OOB数据...................................................................... 78 4.4 发送包............................................................................................ 79 4.4.1 无连接微端口的多包传送......................................................... 80 4.4.1.1 串行微端口的多包传送.................................................... 80 4.4.1.2 非串行微端口的多包传送................................................. 81 4.4.2 无连接微端口的单包发送......................................................... 81 4.4.3 面向连接微端口的多包发送....................................................... 82 4.4.4 发送数据前的内存同步............................................................ 83 4.4.5 发送步骤................................................................................... 84 4.4.5.1 在总线控制器DMA NIC上发送包.................................. 84 4.4.5.2 在PIO设备上发送单包.................................................... 86 4.4.5.3 使用板上内存发送包...................................................... 87 4.5 非串行微端口.................................................................................... 88 4.5.1 非串行微端口的NDIS要求....................................................... 88 4.5.2 非串行微端口的驱动程序内部要求........................................... 88 4.6 接收数据........................................................................................... 89 4.6.1 无连接和面向连接微端口的多包接收....................................... 89 4.6.2 无连接微端口的单包接收......................................................... 92 4.6.3 接收数据的高速缓存(Cache)因素......................................... 93 4.6.4 接收数据的步骤....................................................................... 93 4.6.4.1 接收期间的包管理......................................................... 93 4.6.4.2 在总线控制器DMA NIC上接收数据................................ 94 4.6.4.3 在PIO NIC上接收数据.................................................... 94 4.6.4.4 在内存映射设备上接收数据........................................... 95 4.7 保持统计量....................................................................................... 95 4.8 802.1P 包的优先权............................................................................ 96 4.8.1 查询802.1p优先权支持............................................................. 97 4.8.2 802.1优先权的包支持............................................................... 97 4.8.3 为发送和接收指定包的大小..................................................... 98 4.8.4 默认情况下禁止802.1p的优先权支持........................................ 98
第五章获取和设置WM的微端口信息及NDIS支持. 51NDS管理信息和OD 52查询微端口信息 5.21无连接微端口的查询 522面向连接微端口的查询 53设置微端口信息 53.1为无连接微端口设置信息 53.2为面向连接微端口设置信息 533设置微端口信息的时机 54报告硬件状态 5.5WM的NDS支持 5.5.1用wM注册与注销NDS微端口 552OID和微端口状态的GUD映射 553支持命名VC 5.54NDS支持的WM操作 5.55向WM注册标准微端口OID 556向WM注册的标准微端口状态 5.57定制OD与状态指示 108 5.57.1填充 NDIS GUID 557.2包括MOF文件 第六章微端口的电源管理 10 6.1电源管理的需求与可选的OD l10 62网络设备电源状态 6.3网络唤醒事件 63.1连接改变唤醒 632网络唤醒帧 l12 63.3魔包唤醒 113 634启用唤醒事件 13 6.3.5处理唤醒事件 13 64处理 OID PNP QUERY POWER 6.5处理 OID PNP SET POWER 6.51转入睡眠状态 l14 652转入工作状态 66早期微端口的电源管理 第七章重置,停止和关闭 116 7.1硬件重置( Reset) 16 7.2停止(Halt)处理程序 16 7.3关闭( Shutdown)处理程序 第八章广域网微端口NC驱动程序 l19 8.1RAS体系结构 119 82 NDIS WAN概述 8.3网络卡、绑定、和连接 84广域网微端口驱动程序的实现 841标准广域网微端口驱动程序与局域网微端口驱动程序的区别.!25
- IV- 第五章 获取和设置WMI的微端口信息及NDIS支持........................................... 99 5.1 NDIS管理信息和OID......................................................................... 99 5.2 查询微端口信息................................................................................ 99 5.2.1 无连接微端口的查询...............................................................100 5.2.2 面向连接微端口的查询...........................................................101 5.3 设置微端口信息...............................................................................102 5.3.1 为无连接微端口设置信息........................................................102 5.3.2 为面向连接微端口设置信息....................................................102 5.3.3 设置微端口信息的时机...........................................................103 5.4 报告硬件状态...................................................................................103 5.5 WMI的NDIS支持.............................................................................104 5.5.1 用WMI注册与注销NDIS微端口...............................................104 5.5.2 OID和微端口状态的GUID映射................................................104 5.5.3 支持命名VC...........................................................................104 5.5.4 NDIS支持的WMI操作.............................................................105 5.5.5 向WMI注册标准微端口OID....................................................105 5.5.6 向WMI注册的标准微端口状态................................................107 5.5.7 定制OID与状态指示...............................................................108 5.5.7.1 填充NDIS_GUID...........................................................108 5.5.7.2 包括MOF文件...............................................................109 第六章 微端口的电源管理..............................................................................110 6.1 电源管理的需求与可选的OID...........................................................110 6.2 网络设备电源状态............................................................................ 111 6.3 网络唤醒事件...................................................................................112 6.3.1 连接改变唤醒.........................................................................112 6.3.2 网络唤醒帧.............................................................................112 6.3.3 魔包唤醒................................................................................113 6.3.4 启用唤醒事件.........................................................................113 6.3.5 处理唤醒事件.........................................................................113 6.4 处理OID_PNP_QUERY_POWER.......................................................114 6.5 处理OID_PNP_SET_POWER ............................................................114 6.5.1 转入睡眠状态.........................................................................114 6.5.2 转入工作状态.........................................................................114 6.6 早期微端口的电源管理.....................................................................115 第七章 重置,停止和关闭.............................................................................116 7.1 硬件重置(Reset)...........................................................................116 7.2 停止(Halt)处理程序......................................................................116 7.3 关闭(Shutdown)处理程序..............................................................117 第八章 广域网微端口 NIC驱动程序................................................................119 8.1 RAS 体系结构.................................................................................119 8.2 NDISWAN 概述...............................................................................121 8.3 网络卡、绑定、和连接.....................................................................123 8.4 广域网微端口驱动程序的实现..........................................................124 8.4.1 标准广域网微端口驱动程序与局域网微端口驱动程序的区别...125
842 CoNDIS广域网微端口驱动程序的附加特性 843广域网微端口驱动程序提供的服务 84.3.1注册为广域网微端口驱动程序 843.2查询广域网微端口驱动程序的信息 843.3设置广域网小段口驱动程序的状态 8434在广域网微端口驱动程序上发送数据 844广域网微端口驱动程序做出的指示 8441指示从标准广域网微端口驱动程序接收数据 135 8.5广域网包的组帧 138 851异步帧结构 852X.25帧结构 8.53ISDN和 Switched-56K帧结构 86标准NDS之上的电话服务扩展 86.1 NDISTAPI概述 862线路设备、地址和呼叫 863设置和查询请求 8.64保持状态信息 86.5建立句柄 8.6.6TAP注册 867TAPI初始化 8.6.8打开线路 869接受内入呼叫 143 86.10产生TAPI呼叫 8611主动事件处理 86.2Line-Up指示 86.13关闭呼叫线路 147 86.14 NDISTAPI接口 148 8.7使用支持电话服务的 CONDIS扩展 8.7.1 NDPROXY概述 87.2 CONDIS TAPI注册 873 CONDIS TAPI初始化 8.74建立外出呼叫 8.7.5接受内入呼叫 87.6 CONDIS TAPI关闭 8.7.7语音流对呼叫管理器的要求 87.7.1响应ODCO_ TAPI LINE CAPS查询 8772为外出呼叫指定参数 877.3为内入呼叫指定参数 8.7.8在面向连接NDS之上支持电话服务的非广域网专用的扩展.162 第九章任务卸载 91查询任务卸载能力 9.1.1报告NIC的校验和性能 9.1.2报告NC的IP安全性性能 9.1.3报告NC的TCP包分段性能
- V- 8.4.2 CoNDIS广域网微端口驱动程序的附加特性.............................125 8.4.3 广域网微端口驱动程序提供的服务...........................................126 8.4.3.1 注册为广域网微端口驱动程序.......................................126 8.4.3.2 查询广域网微端口驱动程序的信息................................127 8.4.3.3 设置广域网小段口驱动程序的状态................................132 8.4.3.4 在广域网微端口驱动程序上发送数据............................133 8.4.4 广域网微端口驱动程序做出的指示..........................................135 8.4.4.1 指示从标准广域网微端口驱动程序接收数据................135 8.5 广域网包的组帧...............................................................................138 8.5.1 异步帧结构.............................................................................138 8.5.2 X.25帧结构.............................................................................138 8.5.3 ISDN和Switched-56K帧结构....................................................138 8.6 标准NDIS之上的电话服务扩展.........................................................138 8.6.1 NDISTAPI概述.......................................................................139 8.6.2 线路设备、地址和呼叫...........................................................139 8.6.3 设置和查询请求......................................................................140 8.6.4 保持状态信息.........................................................................140 8.6.5 建立句柄................................................................................141 8.6.6 TAPI注册................................................................................141 8.6.7 TAPI初始化............................................................................142 8.6.8 打开线路................................................................................142 8.6.9 接受内入呼叫.........................................................................143 8.6.10 产生TAPI呼叫.........................................................................144 8.6.11 主动事件处理.......................................................................145 8.6.12 Line-Up指示..........................................................................145 8.6.13 关闭呼叫线路.......................................................................147 8.6.14 NDISTAPI接口......................................................................148 8.7 使用支持电话服务的CoNDIS扩展.....................................................153 8.7.1 NDPROXY概述.................................................................153 8.7.2 CoNDIS TAPI注册...................................................................153 8.7.3 CoNDIS TAPI初始化...............................................................154 8.7.4 建立外出呼叫.........................................................................155 8.7.5 接受内入呼叫.........................................................................157 8.7.6 CoNDIS TAPI关闭...................................................................159 8.7.7 语音流对呼叫管理器的要求....................................................160 8.7.7.1 响应OID_CO_TAPI_LINE_CAPS查询............................160 8.7.7.2 为外出呼叫指定参数.....................................................161 8.7.7.3 为内入呼叫指定参数.....................................................161 8.7.8 在面向连接NDIS之上支持电话服务的非广域网专用的扩展.....162 第九章 任务卸载...........................................................................................162 9.1 查询任务卸载能力............................................................................163 9.1.1 报告NIC的校验和性能............................................................164 9.1.2 报告NIC的IP安全性性能.........................................................165 9.1.3 报告NIC的TCP包分段性能......................................................166