NDIS开发[网络驱动开发] NDIS开发(2)

转自:http://wuli5164233.blog.163.com/blog/static/460195442009125682591/

NDIS开发[网络驱动开发] NDIS开发(2)  

2009-02-25 18:08:25|  分类: VPN编程 |字号 订阅

接  NDIS开发[网络驱动开发] NDIS开发(1)

 

3.4 在微端口驱动程序上实现LBFO

为了支持LBFO,微端口驱动程序必须能够执行以下操作:

初始化微端口束

平衡微端口驱动程序的工作量

在主微端口失效后提升一个次微端口

3.4.1 初始化微端口束

NDIS为驱动程序管理的每个网络适配器调用一次微端口驱动程序的MiniportInitialize函数。为了支持LBFO,MiniportInitialize必须确定被初始化的微端口是否属于一个已存在的束。

为了确定微端口是否是束的成员,微端口首先调用NdisOpenConfiguratiom函数获得注册表键(存储着微端口的配置参数)的句柄。然后微端口调用NdisReadConfiguration函数从微端口的注册表键下的BundleId关键字中检索它的字符串值(REG_SZ)。每个微端口都应将此束标识符复制到它的内部结构中。此内部结构还被认为是一个MiniportAdapterContext。每个微端口还应将它的MiniportAdapterHandle复制到MiniportAdapterContext中。NDIS使用MiniportAdapterHandle引用相关的微端口。

在微端口检索束标识符后,微端口应搜索所有已初始化微端口的内部结构,查找与它有相同束标识符值的微端口。为了执行此搜索,微端口检查每个微端口的MiniportAdapterContext。微端口驱动程序可以将此微端口置为主微端口或次微端口:

此微端口是束中第一个被初始化的微端口。换句话说,此微端口没有查找到与它有相同束标识符值的微端口。在此情况下,此微端口默认成为主微端口。

此微端口查找到一个相同的束标识符值。它应调用NdisMSetMiniportSecondary函数将它自己置为与主微端口关联的次微端口。在此调用中,微端口在MiniportAdapterHandle参数中传递他自己的句柄,在PrimaryMiniportAdapterHandle参数中传递已被初始化的主微端口的句柄。微端口从主微端口的MiniportAdapterContext中检索主微端口的句柄。

一个束中可以存在多个次微端口。在每个实例初始化的过程中,微端口驱动程序可以为多个微端口调用NdisMSetMiniportSecondary,将它置为与主微端口关联的次微端口。

只有在微端口实例潜在的属于一个被同一微端口驱动程序初始化的实例束时,它才能调用NdisMSetMiniportSecondary。在微端口实例调用NdisMSetMiniportSecondary之前,它不能被认为是束的一部分。只有在成功调用NdisMSetMiniportSecondary之后,微端口实例才能成为束的一部分。

3.4.2 平衡微端口驱动程序的工作量

先前初始化了多个微端口并使它们成为一个束的成员的微端口驱动程序,可以使用这些微端口平衡驱动程序的工作量。

NDIS只将主微端口实例暴露给传输层。如果传输层请求向微端口驱动程序发送包或请求查询或设置微端口驱动程序的信息,NDIS应将这些请求传递给主微端口实例。为了平衡微端口驱动程序的工作量,驱动程序应实现将一些请求卸载给次微端口实例的功能。微端口驱动程序可以通过将这些请求发送给次微端口请求次微端口执行与请求相关的任务。不管实际上是主微端口还是次微端口执行了请求,在完成这些请求时微端口驱动程序只应用主微端口的句柄。

然而,如果NDIS向次微端口发送了一个请求,那个次微端口应使用它自己的句柄完成请求。

3.4.3 在主微端口失效后提升一个次微端口

支持LBFO的微端口驱动程序可以在主适配器失效时提升一个次微端口担任主要角色。如果微端口驱动程序的主适配器失效,驱动程序可以调用NdisMRemoveMiniport函数将主微端口从束中去除。然后驱动程序调用NdisMPromoteMiniport函数将次微端口提升为主微端口。NDIS应使用新的微端口作为主微端口将传输层的后续请求传递给微端口驱动程序。

4 安装网络组件

这部分包括:

·涉及网络组件安装的组件和文件总结

·关于创建网络组件信息(INF)文件的细节化信息

4.1 用于安装网络组件的组件和文件

Windows 2000网络组件的安装涉及如下几个方面:

·类安装器和协作安装程序

网络组件由Windows 2000网络类安装器,或者供应商创建的定制类安装器实现安装。类安装器是一个动态链接库,用于安装、配置或删除某个类的设备。如果网络类安装器没有提供所需的特性,供应商自己可以写一个协作安装程序来定制安装过程。协作安装程序可以是一个Win32 DLL,它在Windows 2000系统中协助设备安装。协作安装程序作为类安装器的助手或过滤器,由设备安装器调用。

·信息(INF)文件

每个网络组件必须有信息(INF)文件,网络类安装器可以用来安装组件。网络INF文件基于通用的INF文件格式。

为网络组件创建INF文件的细节化信息,参见1.2节

·可选的通知对象

软件组件,如网络协议、客户或服务,可以有一个通知对象。通知对象实现一个用户接口,向组件通知绑定事件,使组件实现对某个绑定过程的控制,并提供条件安装和条件删除。通知对象在第二章中描述。

网络适配器也能支持一个用户接口,并对绑定事件、条件安装和条件删除实现一些控制。这些通过INF文件或协作安装程序来实现。

·可选的网络移植DLL和相关文件

如果网络供应商的驱动程序没有随Windows 2000一起发布,供应商应该提供这些组件的升级支持。网络升级处理将网络组件的参数只从Windows  NT 3.51 或Windows NT 4.0移到Windows 2000 上。关于升级网络组件的更多信息,参见在线DDK“NetWork Drivers Reference”的第六部分,第一章。

除了以上组件外,供应商也提供如下文件:

·设备的驱动程序

驱动程序通常由驱动程序印象(.sys文件)和驱动程序库(.dll文件)构成。

·可选的驱动程序目录文件

供应商向Windows硬件质量库(WHQL)提交驱动程序,用来测试和签名,进而得到一个数字签名。WHQL将一个目录文件(.cat文件)随同包返回。供应商必须在设备的INF文件中列出所有目录文件。

·可选的文本模式安装信息文件(txtsetup.oem).

如果网络设备要求启动机器,操作系统包中必须包括驱动程序,或者该设备供应商必须提供一个txtsetup.oem文件。txtsetup.oem文件包含一些信息,在启动处理的早期阶段,系统安装组件用这些信息来安装设备(在文本模式安装期间)。

4.2 创建网络INF文件

网络INF文件基于标准INF文件格式,但也包括网络特殊项,如网络特殊节、说明、节项和值。下面对于网络INF文件的描述,假设读者已经理解基本INF文件。在尝试创建网络INF文件之前,应先读一下基本INF文件的描述。

微软Windows 2000的网络INF文件与Windows NT 4.0和更早版本的NT的网络INF文件是不兼容的。为了使网络组件可以在Windows 2000和NT 4.0平台上安装,应分别创建不同的INF文件。

同样的INF文件可以在Windows 2000和Windows 95/98上用来安装网络组件。参见《Windows 2000 Driver Development Reference》第一卷的INF文献。

INF文件需求因网络类型不同而变化。不同类型网络对INF需求的总结,参见1.2.11。

4.2.1 网络INFS文件名4.2.2 的约定

和Windows 2000一同出售的INF文件的文件名不得超过8个字符。其他INF文件不受这个限制。所有INF文件的扩展名为.inf。所有网络INF文件名以net开头,用来指示由网络类安装器处理这个文件。IrDA设备的INF文件以ir开头。

文件名的其余部分用来指示网络组件生产商或描述这些组件。下面是一个有效的网络INF文件名的例子:

网络INF文件名                        文件名组件

netMst                                net+制造商

netDlc                                net+产品描述

net999                                net+产品型号

4.2.3 网络INF文件的版本节

网络INF文件的版本节有一些网络特有性质的描述,如下:

Class

类版本节中应该包括类项,使读者容易确定该文件要安装的网络组件的类别。

有4个网络类

·Net

说明物理或虚拟的网络适配器。NDIS中间层驱动程序包含在Net类中,该程序输出虚拟网络适配器。

·NetTrans

说明网络协议,如TCP/IP,IPX,面向连接客户或面向连接呼叫管理器。

·NetClient

说明网络客户,如微软网络客户或NetWare客户。NetClient组件被认为是网络提供者,如果它提供网络打印服务,它也被认为是一个打印提供者。

·NetService

说明网络服务,如文件服务或打印服务。

虽然IrDA设备由类安装器安装,但IrDA并不归于上面4个网络类中的任何一个。用来安装IrDA设备的INF文件应该有一个Infrared的Class值。这个类包括Serial-IR和Fast-IR设备。

ClassGuid

版本节中必须包含ClassGuid项。网络类安装器用ClassGuid项确定安装的网络组件类。

有4个ClassGuid值,每个值对应于一个网络类:

网络类                      ClassGuid

Net                {4D36E972-E325-11CE-BECl-08002BE10318}

NetTrans           {4D36E973-E325-11CE-BFCl-08002BE10318}

NetClient          {4D36E974-E325-11CE-BFCl-08002BE10318}

NetService         {4D36E975-E325-11CE-BFCl-08002BE10318}

IrDA设备的INF文件应该有一个ClassGuid:{66ddlfc5-81do-bec7-08002be2092f}。

签名和操作系统项

签名项有三个值:

·$Windows 95$

·$Windows NT$

·$Chicago$

如果INF文件仅用于Windows 95/98,正确的签名应力$Windows 95$。有$Windows 95$签

名的INF文件不能运行于Windows 2000.

如INF仅用于Windows 2000,正确的签名是$Windows NT$。有$Windows NT$签名的INF文件不能在Windows 95/98上运行。

如INF在Windows 95/98以及Windows 2000上运行,正确的签名是$Chicago$。有$Chicago$签名的网络INF文件必须在版本节中有如下一行:

Compatible=1

如果没有这一行,就不能在Windows2000上运行。

版本节例子

下面是安装网络适配器的INI文件的版本节:

[Version]

Signature=$Chicago$

Compatible=1

Class=Net

ClassGuid={4D36E972-E325-11CE-BECl-08002BE0318}

Provider=%Msft%

Driverver=08/20/1999

Provider项指示谁开发了INF文件,不是谁开发了INF文件安装的组件。

4.2.4 网络INF文件的模型节

INF文件的模型节为每个安装的组件,包含如下格式的项:

[device-description=install-section.name,hw-id[,compatible-id...]

对这个项的细节化描述,参见《Windows  2000 Driver Development Reference》第1卷的INF文档。

网络适配器的hw-id(也称为设备、硬件、或组件ID)必须和适配器提供给PnP管理器的硬件ID相匹配。网络软件组件的hw-id应由提供者名字组成,后面跟着下划线和制造商名称或产品名称。提供者名称指示了INF文件的提供者。制造商的名字指示了软件组件的制造商。产品名字指明了软件组件。例如,下面的hw-id包含了后跟产品名称的提供者名称:

MS_DLC

MS_IBMDLC

4.2.5 INF文件的DDInstall节

网络INF文件的DDInstall节有如下的网络特殊属性:

Characteristics

每个DDInstall节必须有Characteristics项。Characteristics项说明了网络组件的某个特征,可能限制用户对组件所作的操作。例如,Characteristics可以说明组件是否支持用户接口,是否可删除,或是否对子用户隐藏。

Characteristics项可以有1个或多个如下的值(多值应计算总和):

十六进制值                   名字                          描述

ox1                   NCF_VIRTUAL                    说明组件是个虚拟适配器

ox2        NCF_SOFTWARE_ENUMERATED             说明组件是一个软件模拟的适配器

ox4                   NCF_PHYSICAL                 说明组件是一个物理适配器

ox8                   NCF_HIDDEN                   说明组件不显示用户接口

ox10                  NCF_NO_SERVICE              说明组件没有相关的服务(设        

                                                     备驱动程序)

ox20              NCF_NOT_USER_REMOVABLE        说明不能被用户删除(例如,              

                                                通过控制面板或设备管理器)

ox40        NCF_MULTIPORT_INSTANCED_ADAPTER     说明组件有多个端口,每个端

                                                口作为单独的设备安装。每个

                                                端口有自己的hw_id(组件ID)

                                                并可被单独安装,这只适合于

                                                EISA适配器

ox80                  NCF_HAS_UI                说明组件支持用户接口(例如,

                                               Advanced  Page或Customer

                                               Properties  Sheet)

ox400                 NCF_FILTER                 说明组件是一个过滤器

下面Characteristics值的组合是不被允许的:

·NCF_VIRTUAL,NCF_SOFTWARE_ENUMERATED,和NCF_PHYSICAL是相互排斥的。

·NCF_NO_SERVICE不能和NCF_VIRTUAL,NCF_SOFTWARE_ENUMERATED,或NCF_PHYSICAL同时使用。虚拟的、软件仿真的适配器或物理适配器必须有一个相关的服务(设备驱动程序)。

下面是支持用户接口的物理适配器的Characteristics项例子:

Characteristics =Ox84;NCF_PHYSICAL,NCF_HAS_UI

BusType

物理适配器的DDInstall节必须包含BusType项,该项说明了总线类型(PCI,ISA,等等)。

BusType项可能的值由INTERFACE_TYPE枚举说明:

 总线类型                                  值

ISA                                       1

EISA                                      2

MicroChannel                              3

TurboChannel                              4

PCIBus                                    5

VMBus                                     6

NuBus                                     7

PCMCIABus                                 8

Cbus                                      9

MPIBus                                    10

MPSABus                                   11

PNPISABus                                 14

PNPBus                                    15

如果适配器可用于多种总线类型,那么安装该适配器的INF文件对每种总线类型都应有一个DDInstall节。例如,如果适配器可用于ISA总线和PnPISA总线,INI文件应该有ISA的DDInstall节和PnPISA的DDInstall节。在DDInstall节中的BusType说明该节的总线类型。例子如下:

[al.isa]

BusType=1

[al.pnpisa]

BusType=14

EisaCompressedId和AdapterMask

安装EISA网络适配器的INF文件的DDInstall节必须包括EisaCompressedId项,该项说明EISA压缩ID和适配器掩码。例子如下:

EisaCompressedId=Ox24322432

AdapterMask=Oxffff

PortlDeviceNumber和Port1FunctionNumber

安装多端口网络适配器的INF文件的DDInstall节,包括Port1DeviceNumber项或Port1FunctionNumber项。说明了这个项,当鼠标在网络适配器名字或图标上时,适配器端口信息显示于连接属性对话框(这个通过网络和拨号文件夹来访问)中。如果适配器端口号映射到PCI设备号,则要使用Port1DeviceNumber项。将Port1DeviceNumber设置为第一个PCI设备号。例如,如果PCI设备号4映射到端口1,PCI设备号5映射到端口2,PCI设备号6映射到端口3。用如下项:

Port1DeviceNumber=4

如果适配器端口号顺序映射到PCI函数号,则要使用Port1FunctionNumber项。将Port1FunctionNumber设置成第一个PCI函数号。例如,如PCI函数号2映射到端口1,PCI函数号3映射到port2,PCI函数号4映射于端口3,等等。用如下项:

Port1FunctionNumber=2

PCI设备号或PCI函数号到端口的映射被认为是静态的。同时也认为适配器端口是顺序编码的。

Port1DeviceNumber和Port1FunctionNumber项是互相排斥的。如果两个项存在于同一DDInstall节中,则只使用Port1DeviceNumber项。

4.2.6 删除节

删除NetClient,NetTrans,和NetService组件支持的节,但不删除Net组件(适配器)。网络类安装器不对适配器实例进行跟踪。删除节导致删除其他网络适配器和适配器的其他实例共享的文件,使适配器或适配器实例无法工作。

如果必须删除一个Net组件所使用的驱动程序文件,则要用协作安装程序跟踪所有使用该文件的驱动程序。这种协作安装程序既可跟踪同一设备的多个实例,也可跟踪多个设备的驱动程序。协作安装程序的更多信息,参见《Windows  2000 Driver Development Reference》的第一卷的INF文献。

4.2.7 ControlFlags节

ControlFlags节通常有1个或多个ExcludeFromSelect项。每个ExcludeFromSelect项说明一个网络组件,该组件不作为手动安装的一个选项显示给最终用户。ControlFlags节必须为如下项包括一个ExcludeFromSelect项:
·每个安装的即插即用适配器
·每个由程序自动增加(而非用户手动增加)的软件组件
非即插即用的适配器必须由用户手动增加,因此不应在ControlFlags节中列出。例如,ISA和EISA适配器必须由用户手动安装。
ExcludeFromSelect项的功能和DDInstall节中的Characteristics项的NCF_HIDDEN的功能是不同的。
ExcludeFromSelect项防止适配器或软件组件在选择安装组件对话框中显示。然而,适配器或组件仍能在连接对话框中列出。NCF_HIDDEN防止适配器或组件在任何用户界面中出现,包括连接对话框。更多的信息,参见《Windows  2000 Driver Development Reference》的第一卷。

4.2.8 网络INF文件的add-registry-sections

INF对每个安装的组件都包含1个或多个add-registry-sections。Add-registry-section向注册表增加键和值。INF的DDInstall节包含AddReg说明,它引用1个或多个add-registry-sections。关于add-registry-section和AddReg说明,参见《Windows  2000 Driver Development Reference》卷1中的INF文档。
向组件的实例键中增加键和值
一个或多个add-registry-sections能向实例键中增加键和值:
·为组件设置静态参数(不能通过用户接口修改的配置参数)。参见1.2.7.1节
·说明端口数目(如信道,电路或bearer信道)参见1.2.7.2节
·说明ISDN适配器的键和值。参见1.2.7.3节
·请求另一个网络组件的安装。参见1.2.7.4节
·说明支持定制属性页的值。参见1.2.7.12
向NetClient组件增加键和值
一个NetClient组件的add-registry-section必须将一个NetworkProrider键加入到该组件的service键中。
NetworkProvider键有2个值:说明网络提供者名字的Name和描述网络提供者DLL完全路径的ProviderPath。参见1.2.7.6。
生成Ndi键
每个网络INF文件必须包括至少一个add-registry-section,用来为该文件安装的组件增加Ndi键。Ndi键是一个特殊网络键,在组件的实例键内。加入到Ndi键中的键和值根据网络组件类型和相容性而不同。Ndi键支持如下信息:
·为NetTrans,NetClient,或NetService组件说明HelpText值。参见1.2.7.7。
·为通知对象说明值。参见1.2.7.8
·说明相关服务值。参见1.2.7.9
·说明绑定接口。参见1.2.7.10
·为高级页说明适配器配置参数。参见1.2.7.11
·为过滤器服务说明值。参见1.2.7.13。
·说明束成员关系。参见1.2.7.14
在Windows 95/98中可用,在Window 2000中不再使用的Ndi注册键和值的列表参见1.2.7.15。
1.2.7.1设置静态参数
静态参数只能用INF文件设置一次,不能通过属性页重新配置。
add-registry-section将一个REG_S2值,作为静态参数加入到组件的实例键中。下面是一个例子,将两个静态参数加入到组件实例键中。
[al.staticparams.reg]
HKR,,MediaType,0,"1"
HKR,,InternalId,0,"232"
add-registry-section可以将一些供应商定义的静态参数加入到组件实例键中。
1.2.7.2 为WAN适配器说明WAN端点
WAN适配器的INF文件必须向适配器实例键中增加WanEndpoionts值。WanEndpoints是一个REG_DWORD值,说明了WAN适配器支持的端点数目(如信道,电路或bearer channels)。例如,BRI(基本速率接口)ISDN适配器的WanEndPoints值是2,而PRI(主速率)ISDN适配器的WanEndPoints值是23。
下面是add-registry-section的例子,为一个BRIISDN适配器增加WanEnelpoionts,其值为2。
[al.reg]
HKR,,WanEndpoints,Ox00010001,2
1.2.7.3为ISDN适配器说明ISDN键和值
除了WanEndpoints值(参见1.2.7.2节),ISDN适配器的INF文件还必须向适配器实例键中加入如下键和值(通过add-registry-section)。
IsdnNumDChannels
这个REG_DWORD类型的值说明了ISDN适配器支持的D-Channels的数目。
IsdnAutoSwitchDetect(Optional)
这个可选的REG_DWORD类型值说明,是否ISDN适配器支持自动交换检测。值1表示支持,值0不支持。
IsdnSwitchType
这个REG_DWORD值说明了ISDN适配器支持的交换类型:
ISDN_SWITCH_AUTO               Auto  Detect(NorthAmericalonly)
ISDN_SWITCH_AUTO               ESS5(AT&T,NorthAmerica)
ISDN_SWITCH_NI1                National ISDN1(NI_1)
ISDN_SWITCH_NI2                National ISDN2(NI_2)
ISDN_SWITCH_NT1                Northern Telecom DMS 100(NT_1)
ISDN_SWITCH_INS64              NTT  INS64(Japan)
ISDN_SWITCH_ITR6               Germal National(ITR6).此类型很少使用
ISDN_SWITCH_VN3                French National(VN3).此类型很少使用
ISDN_SWITCH_NET3               European ISDN(DSS1)
ISDN_SWITCH_DSS1               European ISDN(DSS1)
ISDN_SWITCH_AUS                Australian National此类型很少使用
ISDN_SWITCH_BEL                Belgium National此类型很少使用
ISDN_SWITCH_VN4                French National(VN4)
ISDN_SWITCH_SWE                Swedish National
ISDN_SWITCH_ITA                Italian National
ISDN_SWITCH_TWN                TaiWan  National
为说明多个交换类型,只要将交换类型值相加即可。ISDN向导(在安装ISDN组件时自动运行)允许用户选择由IsdnSwithTypes说明的交换类型。选择的交换类型决定了随后显示的ISDN配置参数。这些参数包括电话号码,SPID(service profile identifier),子地址和多用户号。
IsdnNumBchannels(增加到D-Chanel键)
D-Channel值是一个0~9的索引,用于指明D-Channel。
IsdaNumBChannels是一个REG_DWORD值,该值被添加到D-channel键中。IsdnNumBchannels说明了由D-Channel支持的B-Channel的数目。
下面是向ISDN适配器实例键增加ISDN键和值的例子。说明了两个D-Channels,每个D-Channel中说明了两个B-Channel。
[ISDNadapter,reg]
HKR,,WanEndpoint,Ox00010001,4
HKR,,IsdnNumDChannels,Ox00010001,2
HKR,,IsdnAutoSwitchDetect,Ox00010001,1
HKR,,IsdnSwitchType,Ox00010001,Ox00000004;NI1
HKR,0,IsdnNumBChannels,Ox00010001,2
HKR,1,IsdnNumBChannels,Ox00010001,2
ISDN向导自身也根据用户指定的参数值向ISDN适配器的实例键中增加ISDN键和值。ISDN向导增加如下的键和值:
·IsdnSwitchType
这个REG_DWORD值指示用户选择的交换类型
·对每个D-Channel,有一个IsdnMultiSubscriberNumbers值.这个REG_MULTI_S2值指明了用户说明的multi_subscriber数目。
·每个B-Channel有一个B-Channel键、IsdnSpid、IsdnPhoneNumber和/或一个IsdnSubaddress值。
· B-Channel键是指示B-Channel的由0开始的索引。B-Channel键值的最大值比IsdnNumBChannels的值小1。
·IsdnSpid是指示SPID的一个REG_SZ值。如果有,就由用户来说明。
·IsdnPhoneNumber是电话号码.如果有,由用户说明
下面是ISDN适配器注册表节的布局示例。每个注册键由方括号括起,例如:[keyname]。粗体ISDN键和值由ISDN适配器的INF文件添加。非粗体的ISDN键和值由ISDN向导添加。
[Enum\emumeratorID\device-instance-id]                 ;ISDN适配器实例键
WanEndPoints=4
IsdnNumDChannels=2
IsdnAutoSwitchDetect=1
IsdnSwitchType=Ox4                                       ;NationalISDN1
[Enum\emumeratorID\dervice-instance-id\0]              ;D-Channel0
IsdnNumBChannels=2
IsdnMultiSubscriberNumbers=123456723456783456789
[Enum\emumeratorID\device-instance-id\0\0]            ;D-channel0的B-Channel0
IsdnSpid=00555121200
IsdnPhoneNumber=5551212
IsdnSubaddress=
[Enum\emumeratorID\device-instance-id\0\1]            ;D-Channel0的B-Channel1
IsdnSpid=00555121300
IsdnPhoneNumber=5551213
IsdnSubaddress=
[Enum\emumeratorID\dervice-instance-id\1]              ;D-Channel1键
IsdnNumBChannels=2
IsdnMultiSubscriberNumbers=867530923901257658156
[Enum\emumeratorId\dervice-instance-id\1\0]            ;D-Channel1的B-Channel0
IsduSpid=00555987600
IsdnPhoneNumber=5559876
IsdnSubaddress=
[Enum\emumeratorID\dervice-instance-id\1\0]          ;D-Channel1的B-Channel1
Isdnspid=00555876500
IsdnPhoneNumber=5558765
IsdnSubaddress=
1.2.7.4安装多协议WAN NICs
多协议WAN NIC提供多于1种的WAN协议。例如,NIC可能允许用户选择ISDN,帧中继或T1信道。在安装NIC或配置NIC期间,用户可以选择WAN协议。
多协议WAN NIC的供应商必须提供协作安装程序,以安装向导页。(协作安装程序详细信息,参见《Plug and Play,Power Management,and Setup Design Guide》,以及《Windows  2000 Driver Development Reference》卷1)。向导页提示用户选择WAN协议。
·如果用户选择ISDN,则显示ISDN向导。ISDN向导提示用户输入ISDN交换类型和其他ISDN参数值。(参见1.2.7.3节)
·如果用户选择WAN协议,向导在WAN NIC的实例键中增加ShowIsdnPages值。在这种情况中,向导将ShowIsdnPages设置成0,从而阻止ISDN向导的显示。
在安装WAN NIC后,用户可以使用NIC的属性页重新配置NIC。
·如果用户将协议从ISDN改为WAN协议,属性页将ShowIsdnPage值加入WAN NIC的实例键中。属性页设置ShowIsdnPages为0,阻止ISDN向导的显示。
·如果用户将协议改为ISDN,WAN NIC的属性页显示一个对话框提示用户确认改变。当用户确认改变后,属性页将ShowIsdnPages设置成1。当用户再次打开属性页时,显示ISDN向导。如果多协议WAN NIC支持ISDN,绑定接口中的LowerRange必须设置成isdn(参见1.2.7.10节)。如果showIsdnPage注册值不存在,且NIC的LowerRanger被设置为isdn,安装和配置时显示ISDN向导。如果showIsdnPages设置成0,ISDN向导不显示。ShowIsdnPage设置成1,ISDN向导在NIC配置时显示。
1.2.7.5请求安装另一个网络组件
为正常运作,网络组件可能需要安装1个或多个其他网络组件。网络INF文件用RequiredAll值说明这些依赖性。RequiredAll值被加入到需要安装其他组件的组件的Ndis键中。(通过add-registry-section)。
下面的例子显示了add-registry-section的RequiredAll项:
[ndi.reg]
HKR,Ndi,RequiredAll,0,"Component id"
组件ID是所需要的网络组件的hw-id(参见1.2.3节)。如果网络组件要安装多个其他组件,对每个组件都使用一个RequiredAll项,如下所示:
[HKR,Ndi,RequireAll],0,"component2 id"
RequiredAll仅用于安装那些不能由用户安装的隐藏网络组件。这种组件不为用户接口所支持。
由RequiredAll说明的组件只有在通过RequiredAll请求安装该组件的组件被删除后,才能被删除。例如,如果组件A的INF文件使用RequiredAll说明了对组件B的依赖,组件B在组件A删除时才能删除。
RequiredAll仅安装在组件运行时,必须需要的其他组件。例如,Net组件(适配器)的INF文件中,使用RequiredAll说明安装TCP/IP,用户在适配器删除前不能删除TCP/IP。由于适配器可以不需要TCP/IP,适配器的INF文件不应该使用RequiredAll说明对TCP/IP的依赖。
说明RequiredAll依赖性的INF文件,必须确保所需网络组件的INI文件在inf目录下。它通常有一个CopyFiles节。CopyFiles节的更多信息,参见《Plug and Play,Power Management,and Setup Design Guide》,以及《Windows  2000 Driver Development Reference》卷1。
如果由RequiredAll说明的网络组件安装失败,依赖于该组件的网络组件也无法成功安装。
1.2.7.6说明NetCLient组件的名字和提供者
在用户接口中可见的安装NetClient组件的INF文件必须在该组件的Service键中增加一个NetworkProvider
键。INF文件通过add-registry-section增加NetworkProvider键,这在该组件的Service-install节中用AddReg引用。
NetWorkProvider键有2个值:一个描述网络提供者字的Name和描述网络提供者DLL完全路径的ProviderPath。
下面是一个add-registry-section的例子,用以向组件实例键增加NetworkProvider键。
[NWCWorkStation.AddReg]
HKR,NetworkProvider,Name,0,"NetWare or Compatible Network"
HKR,NetworkProvider,ProviderPath,Ox2000,"%11%\nwprovau.dll"
安装NetClient组件的INF文件不必修改组件的...Control\Network\Provider\Order键下的ProviderOrder值。这由网络类安装器自动完成。
1.2.7.7增加HelpText值
NetTrans,NetClient,NetService网络组件的INF文件应该在组件Ndi键中增加HelpText值(REG_SZ)。HelpText值是一个字符串,说明组件的功用。例如,NetClient组件的HelpText值不应只简单地指明这个客户,而且还需指出客户允许用户和什么连接。在连接属性对话框的Genenal页中,当页中组件被选择时,HelpText值出现在页底部。Net组件(适配器)和IrDA组件不支持HelpText值。下面是add-registry-section的例子,用来向Ndi键中增加HelpText值:
[ms_Protocol.ndi_reg]
HKR,Ndi,HelpText,0,%MyTransport_Help%
HelpText值是一个%strkey%形式的标志,这个在INF文件的Strings节中定义。Strings节的更多信息参见《Plug and Play,Power Management,and Setup Design Guide》,以及《Windows  2000 Driver Development Reference》卷1。
1.2.7.8为通知对象增加注册值
NetTrans,NetClient或NerService组件可以有一个通知对象,用来实现以下功能:
·显示组件用户接口
·将绑定事件通知组件,使组件能实现绑定过程上的一些控制。
·提供条件安装。
详情参见第2章。
Net组件(适配器)不支持通知对象,它使用的是协作安装程序。协作安装程序的详情,参见《Plug and Play,Power Management,and Setup Design Guide》,以及《Windows  2000 Driver Development Reference》的卷1的协作安装程序文档。
如果组件提供通知对象,则此组件的INF文件必须将下面两个值加进组件Ndi键。
·ClsID
说明组件对象的GUID。通过运行uuidgen.exe得到GUID。详情参见 Platform SKD。
·ComponentDll
说明通知对象DLL的路径。如果DLL不在Window\system32目录下,则应说明为完全路径。
下面是将ClsID和ComponentDll加入到Ndi键中的add-registry-section例子:
[MS_Protocol.ndi.reg]
HKR,Ndi,ClsID,O,“GUID”
HKR,Ndi,ComponentDll,O,"notifyobject.dll"
有通知对象的组件的DDInstall节必须包含CopyFiles指令,来引用file-list-section,该节将通知对象DLL复制到DirectionDirs节说明的目的目录中。关于CopyFiles指令和DirectionDirs节的详情参见《Plug and Play,Power Management,and Setup Design Guide》,以及《Windows  2000 Driver Development Reference》的卷1的INF文档。
1.2.7.9向Ndi键增加服务相关值
如果组件有一相连的服务(设备驱动程序),add-registry-section必须将Service值加入到Ndi键中。该值是个REG_SZ值,说明了与组件相连系的主要服务。Service值必须和AddService指令中的ServiceName参数一致,该指令引用了Serivce-install-section(参见1.2.8节)。
如果组件有1个或多个相连系的服务,由DDInstall节引用的add-registry-section必须将CoServices值加入到Ndi键中。CoService值是MULTI_SZ值,说明了组件安装的所有服务,包括Service值说明的主要服务。所有NetTrans,NetClient和NetService组件都需要CoServices值。由于仅有1个服务能连系于1个适配器,Net组件(适配器)不应支持CoServices值。除了关闭服务,所有服务相关的操作按它们在Coservices中所列的顺序执行。例如,服务按它们所列的顺序开始,关闭时却是逆序的。只有当服务在CoServices中列出时,服务相关的操作才能被执行。
如果在CoServices中列出的服务不想在组件安装时启动,这些服务应该在ExcludeSetupStartServices值(MULTI_SZ)中列出,该值被加入到Ndi键中。
下面是一个add-registry-section,用来将服务相关值加入到Ndi键中:
[Ms_Protocol.ndi.reg]
HKR,Ndi,Service,O,"MYT3"
HKR,Ndi,CoService,Ox10000,"MYT3","MYT3CO"
HKR,Ndi,ExcludeSetupStartService,Ox10000,"MYT3CO"
1.2.7.10说明绑定接口
对安装的每个网络组件,网络INF文件必须为此组件说明向上和向下的接口,这可以通过向NDi键中加入Interface键来达到。
Interface键至少有2个值:
·1个UpperRange值(REG_SZ),用以定义组件可以绑在其上边界的接口。
·1个LowerRage值(REG_SZ),用以定义组件可以绑定在其下边界的接口。(对物理适配器来说,这个接口是网络介质,如以太网或信令环网)。
Windows 95/98的网络INF文件中的DefUpper和DefLower,Windows 2000 的INF文件不支持。
下表列出了微软支持的UpperRange值:
UpperRange 值                             描述

Netbios                                       NetBIOS
Ipx                                           IPX
Tdi                                       TCP/IP的TDI接口
ndis5                          NDIS 5.x(ndis2,ndis3和ndis4不应再用)。对于非ATM
                               网络组件这个值必须说明,如非ATM适配器,
                               它的上边界与NDIS接口。
Ndisatm                        ATM支持的NDIS 5.x。这个值在ATM网络组件中是必须
                               的,如ATM适配器,它的上边界和NDIS接口相接。
ndiswan                        WAN适配器的上边界。这个值的说明导致操作系统自动
                               使WAN适配器用于RAS。
Ndiscowan                      WAN适配器的上边界,面向连接的NDIS在上面运行。
Noupper                        所有不暴露上边界给绑定用途的组件的上边界。例如
                               有一个private接口的组件。
Winsock                                   Windows  socket接口
ndis5_atalk                    NDIS 5.x Net组件(适配器)的上边界,在其上边界仅绑
                               定AppleTalk接口
ndis5_dlc                      NDIS5.xNet组件适配器的上边界,在其上边界仅绑定
                               DLC接口
ndis5_ip                       NDIS5.xNet组件(适配器)的上边界,在其上边界仅绑定
                               TCP/IP接口
ndis5_ipx                      NDIS5.xNet组件(适配器)的上边界,在其上边界仅绑定
                               IPX接口
ndis5_nbf                      NDIS 5.x Net组件(适配器)的上边界,在其上边界仅绑       
                               定NetBEUI接口
ndis5_strems                   NDIS5.xNet组件(适配器)的上边界,在其上边界仅绑定
                               streams接口


下表是微软支持的LowerRange值的列举:
LowerRange值                                      描述

ethernet                                 以太网适配器的下边界
atm                                        ATM适配器的下边界
tokenring                                 令牌环网的下边界
serial                                  serial 适配器的下边界
fddi                                     FDDI适配器的下边界
baseband                                baseband适配器的下边界
arcnet                                 Arcinet适配器的下边界
localtalk                               LocalTalk适配器的下边界
isdn                                     ISDN适配器的下边界
wan                                        WAN适配器的下边界
nolower                           某些组件的下边界,这些组件都不将下边界暴露给绑
                                  定用途。
ndis5                             NDIS 5.x(ndis2,ndis3,ndis4不再使用)。对于所
                                  有下边界通过NDIS与非ATM组件接口的组件都必须
                                  说明。
Ndisatm                           由ATM支持的Ndis5.x。所有下边界通过NDIS与ATM
                                  组件接口的组件都必须说明。


UpperRange和LowerRange说明了组件可绑定的接口类型,而不是实际的组件。绑定引擎将网络组件绑定到所有提供相应接口(在适当的边界上)的组件。例如,LowerRange值为ndis5的协议,绑定到所有UpperRange值为ndis5的组件,如物理或虚拟适配器。
如果NDIS 5.x Net组件(适配器)和一个或多个协议工作,那么它的UppeRange应该赋予一个或多个协议值,如ndis5_atalk,nids5_dlc,ndis5_ipx,ndis5_nbf或ndis5_streams。这样的Net类组件不应将其UpperRange值赋为ndis_5,因为这将使该组件绑定于所有提供ndis5下边界的协议。INF文件开发者可以对private绑定接口使用供应商的特定UpperRange和LowerRange值。例如,如果供应商只想将其适配器绑定到自己的私有协议驱动程序,那么INF文件开发者可以将适配器的UpperRange说明为XXX,私有协议的LowerRanger说明为XXX。Windows 2000绑定引擎将所有UpperRange值为XXX的组件(此例中是适配器)绑定到所有LowerRange值为XXX的组件(此例中是私有协议)上。
下面是add-registry-section的一个例子,用于为ATM适配器增加UpperRange和LowerRange。
[addreg-section]
HKR,Ndi\Interfaces,UpperRange,0,"ndisATM"
HKR,Ndi\Interfaces,LowerRange,0,"atm"
1.2.7.11为高级属性页说明配置参数
安装Net组件(适配器)的INF文件可以说明适配器配置参数,这些参数将在组件的高级属性页中显示。用户在高级属性页中说明的配置值被写到此组件的根实例键中。
如果适配器支持高级属性页,适配器的DDInstall节中的Characteristics项必须包括NCF_HAS_UI值。网络INF文件通过add-registry-section说明在高级属性页中显示的配置参数,add-registry-section在该组件的DDInstall节中引用。这种add-registry-section在Ndi\params键中增加一个或多个子键。配置参数的子键格式为Ndi\params\SubkeyName, SubkeyName是说明供应商参数名字的REG_SZ值。例如,说明transceiver类型参数的键,可以命名为Ndi\params\TransceiverType。
以下的键保留,不能作为Ndi\params\SubkeyName使用。这些键包括BundleId,Characteristics,ComponentId,Description,DriverDesc,InfPath,InfSection,InfSectionExt,Manufacturer,NetCfgInstanceId,Provider和ProviderName。
对于每个加入到Ndi\params中的参数子键,add-registry-section必须加入ParamDesc(参数描述)和Type值。add-registry-section也可以为这个参数增加Default和Optional值,并且如果参数式数字的,也可增加Min,Max和Step值。下表描述了可被加入到Ndi\params键中的值:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值