NDIS开发
- 格式:pdf
- 大小:221.89 KB
- 文档页数:59
嵌入式Linux系统中NDIS编译及使用说明(V2.12及以上版本):首先,获取NDIS驱动包:versionX.XX.zip其次,配置APN,为了3G和4G网络下都可以上网,需做两路APN设置,以CMNET 为例,设置如下:AT+CGDCONT=1,"IP","CMNET"AT+CGDCONT=2,"IP","CMNET"这个NDIS拨号不涉及到AT指令。
流程大致如下:1.驱动编译ndis_driver/src下相关文档拷贝到drivers/net/usb下,修改Makefile: lc_ether-objs += qmi_oper.o qmi_util.o\lc_cdc_ether.oobj-m += lc_ether.o编译成模块lc_ether.ko。
注:如果同时还需使用其他接口,比如发AT指令或者PPP拨号,则还需修改:(1)kernle/drivers/usb/serial/usb-serial.cint usb_serial_probe( …lock_kernel();if( interface->cur_altsetting->desc.bInterfaceNumber>=4)/ /添加return -EDOM; //添加type = search_serial_device(interface);……(2)kernle/drivers/usb/serial/option.c中添加VID和PID:{ USB_DEVICE( 0x1c9e, 0x9b05 ) } //添加(3) 配置内核时选上“USB Generic Serial Driver”和“USB driver for GSM and CDMA modems”,及PPP相关。
2.编译应用ndis_manager修改build.sh内CC为文件系统所用交叉编译器,然后执行脚本编译生成ndis_manager/libndis_dail.so。
目录1NDIS中间层驱动程序 (5)1.1NDIS中间层驱动程序(NDIS I NTERMEDIATE D RIVERS)概述 (5)1.2 1.2NDIS中间层驱动程序的用途 (7)1.3 1.3NDIS中间层驱动程序的开发环境 (7)2NDIS中间层驱动程序的开发 (7)2.1 2.1可分页和可丢弃代码 (7)2.2共享资源的访问同步 (8)2.3中间层驱动程序的D RIVER E NTRY函数 (9)2.3.1注册NDIS中间层驱动程序 (10)2.3.1.1注册中间层驱动程序的Miniport (10)2.3.1.2注册中间层驱动程序的协议 (14)注册下边界面向无连接的中间层驱动程序的ProtocolXxx函数 (15)注册下边界面向连接的中间层驱动程序的ProtocolXxx函数 (17)2.4中间层驱动程序的动态绑定 (19)2.4.1打开中间层驱动程序下层的适配器 (20)2.4.2微端口(Miniport)初始化 (22)2.4.3中间层驱动程序查询和设置操作 (23)2.4.3.1发布设置和查询请求 (24)2.4.3.2响应设置和查询请求 (25)2.4.4作为面向连接客户程序注册中间层驱动程序 (26)2.5中间层驱动程序数据包管理 (29)2.5.1重用数据包 (32)2.6中间层驱动程序的限制 (33)2.7中间层驱动程序接收数据 (34)2.7.1下边界面向无连接的中间层驱动程序接收数据 (34)2.7.1.1在中间层驱动程序中实现ProtocolReceivePacket处理程序 (36)2.7.1.2在中间层驱动程序中实现ProtocolReceive处理程序 (37)2.7.1.3下边界面向无连接中间层驱动程序接收OOB数据信息 (38)2.7.2下边界面向连接的中间层驱动程序接收数据 (39)2.7.2.1在中间层驱动程序中实现ProtocolCoReceivePacket处理程序 (39)2.7.2.2在下边界面向连接的中间层驱动程序中接收OOB数据信息 (40)2.7.3向高层驱动程序指2.8.4 示接收数据包 (40)2.8通过中间层驱动程序传输数据包 (41)2.9处理中间层驱动程序的P N P事件和PM事件 (45)2.9.1处理OID_PNP_XXX查询和设置 (46)2.9.2中间层驱动程序ProtocolPnPEvent处理程序的实现 (47)2.9.3处理规定的电源请求 (49)2.9.3.1睡眠状态的电源设置请求 (49)2.9.3.2工作状态的电源设置请求 (50)2.10中间层驱动程序复位操作 (51)2.11中间层驱动程序拆除绑定操作 (52)2.12中间层驱动程序状态指示 (53)3负载平衡和失效替换 (54)3.1关于LBFO (55)3.2 3.2指 (56)3.3指定对LBFO的支持 (56)3.4在微端口驱动程序上实现LBFO (57)3.4.1初始化微端口束 (57)3.4.2平衡微端口驱动程序的工作量 (58)3.4.3在主微端口失效后提升一个次微端口 (58)4安装网络组件 (59)4.1用于安装网络组件的组件和文件 (59)4.2创建网络INF文件 (60)4.2.1网络INFS文件名的约定 (61)4.2.2的约定........................................................................................... 错误!未定义书签。
python ndis通信方法Python是一种功能强大的编程语言,广泛应用于数据分析、机器学习、人工智能等领域。
在网络通信中,Python也提供了丰富的库和模块,方便开发者进行NDIS(Network Driver Interface Specification,网络驱动程序接口规范)通信。
本文将介绍Python中的NDIS通信方法,以及如何在Python中使用这些方法进行网络通信。
一、NDIS简介NDIS是一种网络驱动程序接口规范,它定义了网络驱动程序与网络协议栈之间的接口,使得不同的网络驱动程序可以与不同的网络协议栈进行通信。
NDIS提供了一组函数和数据结构,用于实现网络驱动程序的功能,包括数据包传输、中断处理、错误处理等。
在Windows系统中,NDIS是网络驱动程序与操作系统之间的接口规范。
二、Python中的NDIS通信方法Python提供了多种库和模块,用于实现网络通信。
其中,socket 是Python中最常用的网络通信模块之一,它提供了一组函数和方法,用于创建、连接、发送和接收网络数据。
通过socket模块,可以实现基于NDIS的网络通信。
1. 创建Socket对象在Python中,可以使用socket模块的socket()函数创建一个Socket对象。
Socket对象代表一个网络连接,通过它可以进行网络通信。
创建Socket对象时,需要指定网络协议和网络类型。
```pythonimport socket# 创建Socket对象s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)```2. 连接服务器通过Socket对象的connect()方法,可以连接到服务器。
需要指定服务器的IP地址和端口号。
```python# 连接服务器s.connect(('server_ip', port))```3. 发送和接收数据通过Socket对象的send()和recv()方法,可以发送和接收数据。
用NT DDK开发协议驱动程序王大伟杨凯锋胡熠洪佩琳摘要:本文针对基于Windows NT平台的协议驱动程序的开发方法进行讨论,并给出一个开发实例进行具体说明。
关键词:协议驱动程序、DDK、NDIS一.协议驱动程序简介微软公司为Windows系列平台上的网络驱动程序开发者专门制定了NDIS规范(Network Driver Interface Specification)。
根据NDIS规范,Windows NT平台上的网络驱动程序主要有三类:网卡驱动程序、中介协议驱动程序和上层协议驱动程序。
网络驱动程序的层次结构参见参考文献【1】。
网卡驱动程序位于驱动程序层次的最底层,它直接管理硬件,屏蔽底层物理硬件的细节,向上层驱动程序提供一个抽象的服务接口。
协议驱动程序加载在网卡驱动程序之上,利用网卡驱动程序提供的服务实现各种网络协议的功能。
协议驱动程序可以在其上边界实现TDI(Transport Driver Interface)接口为网络用户提供服务。
譬如分配分组,从用户应用程序把数据拷贝到分组中,然后调用NDIS提供的函数把分组发送给下层驱动程序。
它在下边界提供一个协议接口,接收并解释从下层驱动程序接收到的分组。
微软公司为开发者编写驱动程序提供了DDK(Device DriverKit)工具包。
根据不同的平台分为NT DDK和Windows 95 DDK。
在DDK中,包含了依据NDIS规范开发网络驱动程序的工具。
关于DDK的介绍,以及用DDK开发驱动程序的步骤参见参考文献【1】。
二.协议驱动程序的结构协议驱动程序包括驱动程序对象和驱动程序所提供的入口函数集合。
一个协议驱动程序必须绑定到小端口网卡驱动程序或者中介驱动程序(此时相当于一个虚拟的小端口网卡驱动程序)之上,它可以绑定到一个或者多个底层驱动程序之上。
协议驱动程序在其下边界提供一系列的ProtocolXxx接口函数,并通过NDIS发送和接收网络分组。
目录简介 (2)结构 (2)WDM (2)内部 (2)_NDIS_WRAPPER_HANDLE (3)_NDIS_PROTOCOL_BLOCK (3)_NDIS_M_DRIVER_BLOCK (3)_NDIS_MINIPORT_BLOCK (4)_NDIS_OPEN_BLOCK (8)_NDIS51_MINIPORT_CHARACTERISTICS (10)_NDIS50_PROTOCOL_CHARACTERISTICS (11)_NDIS_MINIPORT_INTERRUPT (12)_NDIS_PACKET (12)_NDIS_PACKET_PRIVATE (12)函数 (13)初始化 (13)PNP (13)中断 (14)包 (14)发送 (14)接收 (15)请求 (16)注册表 (16)类 (16)注册表 (16)绑定 (17)简介NDIS为Network Device Interface Specification的缩写,是Windows下的网卡驱动开发框架。
和协议驱动都通过NDIS提供的接口和对方通讯,如下图所示:protocol callbacks|--------------|NDIS lib call | || v微端口驱动 ----> NDIS <---- 协议驱动/|\ || | NDIS lib call|-------------|miniport callbacks结构WDM//miniportDRIVER_OBJECT - NDIS_M_DRIVER_BLOCK(驱动扩展)DEVICE_OBJECT - NDIS_MINIPORT_BLOCK(设备扩展)内部//绑定关系NDIS_PROTOCOL_BLOCK <- NDIS_OPEN_BLOCK -> NDIS_MINIPORT_BLOCKndisProtocolList|_ NDIS_PROTOCOL_BLOCK // 协议驱动|_ OpenQueue // 通过这个列表知道某个协议绑定到了哪些微端口设备ndisMiniDriverList|_ NDIS_M_DRIVER_BLOCK // 微端口驱动(DriverEntry)|_ MiniportQueue // 微端口设备实例(ndisPnPAddDevice)|_ OpenQueue // 通过这个列表知道某个微端口设备绑定了哪些协议_NDIS_WRAPPER_HANDLE这是初始化函数NdisMInitializeWrapper返回的句柄NDIS!_NDIS_WRAPPER_HANDLE+0x000 DriverObject : Ptr32 _DRIVER_OBJECT+0x004 ServiceRegPath : _UNICODE_STRING_NDIS_PROTOCOL_BLOCKNDIS!ndisProtocolList列表上的结构,一个对象代表一个协议驱动,这个结构是NdisRegisterProtocol函数返回的句柄NDIS!_NDIS_PROTOCOL_BLOCK+0x000 OpenQueue : Ptr32 _NDIS_OPEN_BLOCK+0x004 Ref : _REFERENCE+0x00c DeregEvent : Ptr32 _KEVENT+0x010 NextProtocol : Ptr32 _NDIS_PROTOCOL_BLOCK // 链表 +0x014 ProtocolCharacteristics : _NDIS50_PROTOCOL_CHARACTERISTICS // 驱动提供信息+0x080 WorkItem : _WORK_QUEUE_ITEM // 参见ndisCheckProtocolBindings+0x090 Mutex : _KMUTANT+0x0b0 MutexOwner : Uint4B+0x0b4 BindDeviceName : Ptr32 _UNICODE_STRING // 参见ndisInitializeBinding+0x0b8 RootDeviceName : Ptr32 _UNICODE_STRING // 同上 +0x0bc AssociatedMiniDriver : Ptr32 _NDIS_M_DRIVER_BLOCK // 参见NdisIMAssociateMiniport+0x0c0 BindingAdapter : Ptr32 _NDIS_MINIPORT_BLOCK // 参见ndisInitializeBinding_NDIS_M_DRIVER_BLOCKNDIS!ndisMiniDriverList列表上的结构,在NdisMRegisterMiniport或NdisIMRegisterLayeredMiniport中创建,一个对象代表一个微端口驱动NDIS!_NDIS_M_DRIVER_BLOCK+0x000 NextDriver : Ptr32 _NDIS_M_DRIVER_BLOCK // 列表挂接点+0x004 MiniportQueue : Ptr32 _NDIS_MINIPORT_BLOCK // 打开的设备实例列表,// 参见ndisQueueMiniportOnDriver+0x008 NdisDriverInfo : Ptr32 _NDIS_WRAPPER_HANDLE // NDIS 句柄+0x00c AssociatedProtocol : Ptr32 _NDIS_PROTOCOL_BLOCK // 参见NdisIMAssociateMiniport+0x010 DeviceList : _LIST_ENTRY+0x018 PendingDeviceList : Ptr32 _NDIS_PENDING_IM_INSTANCE+0x01c UnloadHandler : Ptr32 void+0x020 MiniportCharacteristics : _NDIS51_MINIPORT_CHARACTERISTICS // 驱动提供信息+0x09c MiniportsRemovedEvent : _KEVENT+0x0ac Ref : _REFERENCE+0x0b4 Flags : Uint2B+0x0b8 IMStartRemoveMutex : _KMUTANT+0x0d8 DriverVersion : Uint4B_NDIS_MINIPORT_BLOCK这个结构在NDIS!ndisMiniportList列表上,在NDIS创建WDM设备对象时创建,是WDM设备对象扩展区的一部分。
开发地理信息系统基础软件的需求分析与设计需求分析和设计是开发地理信息系统基础软件的关键步骤之一。
在本文中,我们将详细探讨如何进行地理信息系统基础软件的需求分析和设计,并介绍一些常用的技术和方法。
1.介绍地理信息系统基础软件的背景和意义地理信息系统(Geographic Information System,简称GIS)是一种用于收集、管理、分析和展示地理数据的计算机系统。
地理信息系统基础软件是构建GIS系统的重要组成部分,它提供了数据管理、空间分析、地图展示等基本功能。
地理信息系统基础软件的开发对于实现地理数据的有效管理和分析具有重要意义。
它可以帮助人们更好地理解和利用地理信息,以支持决策制定和规划管理。
2.需求分析需求分析是确定地理信息系统基础软件功能和性能要求的过程。
它需要从用户的角度出发,明确软件的功能需求、性能需求和约束条件。
在需求分析阶段,需要深入了解用户的需求,包括用户对于数据管理、空间分析和地图展示等功能的期望。
同时,还需要考虑软件的性能需求,如数据处理速度、用户界面友好性等。
需求分析的主要任务包括需求收集、需求分析和需求规格说明。
需求收集阶段通过与用户交流、调研、访谈等方法,获取用户需求。
需求分析阶段对需求进行归类和整理,并确定软件的功能和性能需求。
需求规格说明阶段将需求编写成规格说明文档,以便于后续的设计和开发工作。
3.设计在需求分析的基础上,进行软件的设计工作。
软件设计是制定软件结构和组织的过程,包括系统架构设计、模块设计和用户界面设计等。
系统架构设计是软件设计的核心环节,它确定了系统的整体结构和各个模块的关系。
在地理信息系统基础软件的设计中,应该考虑数据管理、空间分析和地图展示等模块之间的协调与配合。
模块设计是将系统划分为若干个独立的功能模块,并确定模块之间的接口和交互方式。
每个模块应该有清晰的功能定义和输入输出规范。
用户界面设计是保证用户友好性和易用性的重要环节。
地理信息系统基础软件的用户界面应该简洁明了,操作简单,同时提供必要的帮助和提示信息。
目录1NDIS中间层驱动程序 (2)1.1NDIS中间层驱动程序(NDIS Intermediate Drivers)概述 (2)1.2NDIS中间层驱动程序的用途 (4)1.3NDIS中间层驱动程序的开发环境 (4)2NDIS中间层驱动程序的开发 (4)2.1可分页和可丢弃代码 (4)2.2共享资源的访问同步 (5)2.3中间层驱动程序的DriverEntry函数 (5)2.3.1注册NDIS中间层驱动程序 (6)2.3.1.1注册中间层驱动程序的Miniport (6)2.3.1.2注册中间层驱动程序的协议 (8)2.4中间层驱动程序的动态绑定 (11)2.4.1打开中间层驱动程序下层的适配器 (12)2.4.2微端口(Miniport)初始化 (12)2.4.3中间层驱动程序查询和设置操作 (13)2.4.3.1发布设置和查询请求 (14)2.4.3.2响应设置和查询请求 (15)2.4.4作为面向连接客户程序注册中间层驱动程序 (15)2.5中间层驱动程序数据包管理 (17)2.5.1.1重用数据包 (18)2.6中间层驱动程序的限制 (19)2.7中间层驱动程序接收数据 (19)2.7.1下边界面向无连接的中间层驱动程序接收数据 (19)2.7.1.1在中间层驱动程序中实现ProtocolRe ceivePacket处理程序 (20)2.7.1.2在中间层驱动程序中实现ProtocolReceive处理程序 (21)2.7.1.3下边界面向无连接中间层驱动程序接收OOB数据信息 (22)2.7.2下边界面向连接的中间层驱动程序接收数据 (22)2.7.2.1在中间层驱动程序中实现ProtocolCoReceivePacket处理程序 (23)2.7.2.2在下边界面向连接的中间层驱动程序中接收OOB数据信息 (23)2.7.3向高层驱动程序指示接收数据包 (23)2.8通过中间层驱动程序传输数据包 (23)2.8.1传递介质相关信息 (25)2.9处理中间层驱动程序的PnP事件和PM事件 (26)2.9.1处理OID_PNP_XXX查询和设置 (26)2.9.2中间层驱动程序ProtocolPnPEvent处理程序的实现 (27)2.9.3处理规定的电源请求 (28)2.9.3.1睡眠状态的电源设置请求 (28)2.9.3.2工作状态的电源设置请求 (29)2.10中间层驱动程序复位操作 (29)2.11中间层驱动程序拆除绑定操作 (30)2.12中间层驱动程序状态指示 (31)3负载平衡和失效替换 (31)3.1关于LBFO (31)3.2指定对LBFO的支持 (32)3.3在微端口驱动程序上实现LBFO (32)3.3.1初始化微端口束 (33)3.3.2平衡微端口驱动程序的工作量 (33)3.3.3在主微端口失效后提升一个次微端口 (34)4安装网络组件 (34)4.1用于安装网络组件的组件和文件 (34)4.2创建网络INF文件 (35)4.2.1网络INFS文件名的约定 (35)4.2.2网络INF文件的版本节 (35)4.2.3网络INF文件的模型节 (36)4.2.4INF文件的DDInstall节 (37)4.2.5删除节 (38)4.2.6ControlFlags节 (39)4.2.7网络INF文件的add-registry-sections (39)表格 1 缩略语表项目英文描述中文描述NDIS Network Driver Interface Specification网络驱动程序接口标准IMD Intermediate Drivers中间层驱动TDI Transport driver Interface传输驱动程序接口NIC Network Interface Card 网络接口卡SP Service Pack 服务包LAN Local Area Network局域网LAN-E LAN Emulation 局域网仿真NAT Network Address Translation 网络地址转换LBFO Load Balancing And Fail-Over 负载平衡和失效替换DDK Device Drivers Kit 设备驱动程序开发包SMPSymmetry Multiprocessing 对称多处理OS Operating System 操作系统IDE Integrated Development Environment集成开发环境1 NDIS中间层驱动程序 1.1 NDIS中间层驱动程序(NDIS Intermediate Drivers)概述微软Windows网络驱动程序接口标准(NDIS 4.0)和Windows NT 4.0(SP3)引入了一种新的NDIS驱动程序,它可以嵌在NDIS 传输驱动程序TDI(如,TCP/IP)和底层的NDIS网络接口驱动程序的中间。
这种新类型的驱动程序被称为NDIS中间层驱动,如图表1。
NDIS(网络驱动器接口标准)中间层驱动程序在其上边界导出MiniportXxx函数,在其下边界导出ProtocalXxx函数。
该驱动程序在其上边界仅提供面向无连接通信支持,而在其下边界,则即可支持面向无连接通信,也可支持面向连接通信。
中间层驱动程序的微端口部分(上边界)必须是非串行的,系统将依赖这些非串行驱动程序,而不是NDIS对MiniportXxx函数的操作进行串行化处理和对内部生成的输出包进行排队操作,这样驱动程序只要保持很小的临界区(每次只能有一个线程执行该代码)就能提供性能良好的全双工操作。
但是这些非串行Miniport要受到更多也更严格的设计要求的限制,往往要为此付出更多的调试和测试时间。
中间层驱动程序是一种典型的层次结构程序,它基于一个或多个NDIS NIC驱动程序,其上层是一个向上层提供TDI(传输驱动程序接口)支持的传输驱动程序(也可能是多层结构)。
从理论上讲,一个中间层驱动程序也可以是基于其他中间层驱动程序或作为其他中间层驱动程序的低层出现的,尽管这种方案未必能展现更好的性能。
中间层驱动程序的一个示例是LAN仿真中间层驱动程序,其上层是一个早期传输驱动程序,下层是一个非LAN介质的微端口 NIC驱动程序。
该驱动程序从上层接收LAN格式的数据包并将其转换为本地网卡的介质格式,然后将其发送到那个NIC的NDIS 微端口。
接收数据时,该驱动程序将低层网卡驱动程序送来的数据包转换为LAN兼容格式,最后向上层传输驱动程序提交这些转换过的数据包。
例如,NDISWAN就具有一些上述特征。
NDISWAN将数据包从上层的传输LAN格式转换为WAN数据包格式,或者将数据包从低层的网卡驱动WAN格式转换为LAN数据包格式。
另外,如果低层NIC硬件不支持这些功能,那么NDISWAN也可提供诸如压缩、加密和端对端协议(PPP)等的数据格式化功能。
NDISWAN为在NDIS API和网卡驱动程序之间进行通信提供了一个专用接口,同时,NDISWAN也将协议绑定映射为活动连接请求。
另一个中间层驱动程序的例子是ATM LANE (LAN仿真)驱动程序,它将数据包从上层无连接的传输格式转换为下层面向连接的网卡支持的ATM格式。
图1.1说明了中间层驱动程序结构Before Installing NDIS Intermediate DriverAfter InstallingNDIS Intermediate Driver 图表 1 中间层驱动程序结构NDIS中间层驱动程序在NDIS中起着转发上层驱动程序送来的数据包,并将其向下层驱动程序发送的接口功能。
当中间层驱动程序从下层驱动程序接收到数据包时,它要么调用NdisMXxxIndicateReceive函数,要么调用NdisMindicateReceivePacket函数向上层指示该数据包。
中间层驱动程序通过调用NDIS打开和建立一个对低层NIC驱动程序或者NDIS中间层驱动程序的绑定。
中间层驱动程序提供MiniportSetInformation和MiniportQueryInformation函数来处理高层驱动程序的设置和查询请求,某些情况下,可能还要将这些请求向低层NDIS驱动程序进行传递,如果其下边界是面向无连接的可通过调用NidsRequest实现这一功能,如果其下边界是面向连接的则通过调用NidsCoRequest实现该功能。
中间层驱动程序通过调用NDIS提供的函数向网络低层NDIS驱动程序发送数据包。
例如,下边界面向无连接的中间层驱动程序必须调用NdisSend或NdisSendPackets来发送数据包或者包数组,而在下边界面向连接的情况下就必须调用NdisCoSendPackets来发送包数组数据包。
如果中间层驱动程序是基于非NDIS NIC驱动程序的,那么在调用中间层驱动程序的MiniportSend或Miniport(Co)SendPackets函数之后,发送接口对NDIS将是不透明的。
NDIS提供了一组隐藏低层操作系统细节的NdisXxx函数和宏。
例如,中间层驱动程序可以调用NdisMInitializeTimer来创建同步时钟,可以调用NdisInitializeListHead创建链表。
中间层驱动程序使用符合NDIS标准的函数,来提高其在支持Win32接口的微软操作系统上的可移植性。
1.2 NDIS中间层驱动程序的用途NDIS中间层驱动有几个方面的用途,包括:• 局域网仿真(LAN Emulation) – NDIS中间层驱动可以使一个非局域网NIC驱动(如,ATM)犹如一个局域网NIC驱动(如,Ethernet)。
• 包过滤(Packet Filtering)- 可以拦截和修改高层TDI(传输驱动程序)和底层N I C驱动程序之间的网络包(Packets):• 通过或过滤掉(Pass/Drop Packets)• 延迟或重新排序( Delay/Reorder Packets)• 加密或解密(Packet Encryption/Decryption)• 压缩或解压(Packet Compression/Decompression)• 路由包(Route Packets):• NAT网络地址转换(Network Address Translation)• LBFO负载平衡和失效替换(Adapter Load Balancing And Fail-Over)1.3 NDIS中间层驱动程序的开发环境OS : Microsoft Windows 2000 ServerIDE: Microsoft Visual C++ V6.0DDK : Windows 2000 Device Drivers Kit2 NDIS中间层驱动程序的开发2.1 可分页和可丢弃代码每一个MiniportXxx函数或ProtocolXxx函数都运行在一个特定的IRQL上,在中间层驱动程序中这些函数可使用的IRQL从PASSIVE_LEVEL一直到DISPATCH_LEVEL(包括DISPATCH_LEVEL)。