分享
 
 
 

VxD技术的应用

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

VxD技术的应用作者:汤琳发布时间:2001/02/08

文章摘要:

本文首先介绍了通过PC机实现V5协议测试的方法,引申出在Win95平台上的ISA总线数据传送问题,重点介绍了VxD技术。

正文:

VxD技术的应用

1 PC机V5协议测试方法

1.1前言

现代电信网的发展趋势是网络集中、高效、优化。随着Internet的普及,通信业务网的接入能力受到严峻的考验。电信网络发展宽带通信业务和多媒体业务的任务已刻不容缓。要想实现接入网的数字化、宽带化和智能化,必须解决当前电信网中传输瓶颈的问题。现有的采用模拟传输方式为主要传送媒体的接入网,难以适应接入网网络升级和提供新业务的要求。因此V5接入网将成为现代接入网的标志。现代接入网的重要特征是:它与交换机之间的业务节点接口应为开放的、标准的V5接口,V5接口在提供综合业务和新业务等方面具有无可比拟的优越性,V5接入网取代远端模块是发展的必然。由于设备供应商本能的保护性反应,V5.X接口的开放性缺乏法规保障;而且不同厂商设备之间互通性、兼容性及完备性较差。因此V5接口协议测试成为令人非常关注的问题。在理想的情况下,不同厂家按相同协议标准生产的设备应能在网路环境下正常通信,但是实际情况并非如此,由于设计者对标准的不同理解,以及各个厂家持不同的技术政策,导致其产品的某些性能要么偏离标准,要么是标准的一个子集。这样,使得不同设备生产厂家生产的本地交换机(LE)和接入网(AN)设备在互连时出现一些问题(如系统启动过程不一致而无法连接等)。设备在使用过程中也会因协议配合或设备存在的缺陷出现一些问题(如表现为V5二层链路频繁建链或出现大量呼损等)而影响服务质量。而当设备互连发生问题时,又急需用统一的尺度来衡量设备的一致性,以找出问题的根源。目前,随着V5接口在我国商用的展开,各种设备蜂拥而来,这样,解决通信设备互连产生的协议问题将成为推广V5接口应用的一个不可忽略的因素,V5协议分析仪对于这些问题的查找定位和分析解决是至关重要的。我们自行研制的V5协议测试仪具有使用方便,成本低,易于升级的优越性,而VxD技术正是其中的关键技术。

1.2 V5协议测试仪原理

V5协议测试仪(以下简称为V5TS)由两部分组成:ISA总线标准的硬件插卡和协议处理软件。每块板卡最多可处理一条2048kbit/s数据链路中的3条C通路(TS16、TS15和TS31),可根据测试需要选择一块或两块板卡;协议处理软件以Windows95/98作为运行平台。硬件插卡及其协议处理软件组成一个完整的测试系统,可用作LE侧或AN侧的V5协议测试设备或监测设备。

V5TS的测试原理如图1-1所示。方式A和B为协议仿真方式,方式C为协议监视方式。方式A中,V5TS模拟AN侧来

测试LE侧的V5功能;方式B中,V5TS模拟LE侧来测试AN侧的V5功能;在方式C中,V5TS是作为监视设备工作的,可以监听LE和AN之间传递的信息帧。

图1-1

测试的依据是原邮电部颁发的《接入网V5.2接口现场测试规范》,共有7组84项测试条款,如表1-1所示.

表1-1 接入网V5.2接口现场测试规范

1.3测试仪硬件原理

ISA总线插卡的结构如下图1-2所示。

图1-2 V5TS硬件结构图

其中E1 Controller 采用了Brooktree公司的Bt8510,完成物理层功能和TS16的LAPD操作;HSCX(高级串行通信控制器)选用了Siemens公司的SAB82525,完成了TS15和TS31的LAPD操作;μP使用了DALLAS半导体公司的DS80C320;DPRAM(双端口随机存储器)运用了IDT71342,用于μP(微处理器)和MP(主处理器)之间的数据通信;I/O Port用于在μP和MP之间传递控制信号。与本文有关的就是DPRAM和I/O Port。

1.4测试仪软件框架

测试仪的软件部分根据实现的处理器的不同分为两大模块:μP模块和MP模块。

其中μP模块采用汇编语言作为程序开发语言,主要完成硬件初始化工作和消息收发工作;MP模块分为四个子模块:

· 主控模块;

· 系统管理模块;

· 协议处理模块;

· 数据收发模块。

由于我们使用的操作平台为Windows95平台,在MP的数据收发模块中必须调用VxD程序以完成与ISA插卡的数据交换。

2 VxD技术简介

2.1 VxD的概念

Intel处理器从386开始具有4个特权级,即0级到3级。0级特权级最高,而3级最低。这四个级别可形象的看成是4个同心圆,出于性能的考虑,Win95仅使用了0级和3级,一般的程序运行于3级,0级程序可以使用处理器的所有资源和能力。VxD(Virtual Device Driver)是用来扩展Windows操作系统功能的一类程序。它以DLL的形式链入Windows操作系统的核心层(ring 0)。VxD主要解决不能被ring 3层应用程序处理的一系列问题。

2.2 高层应用程序中的处理

Windows 95 通过DeviceIoControl函数实现设备输入输出控制(IOCTL)接口,该函数可以向指定的VxD发送命令和传递相应的数据。可以用CreateFile函数打开此VxD,用DeviceIoControl向此VxD发送命令,最后用CloseHandle函数关闭此VxD即可。

下面简单介绍一下上述三个函数:

1) HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess,

DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile );

函数成功调用将返回一个指定文件的打开的句柄。参数lpFileName是指向一个字符串的指针,该字符串包含需生成或打开的对象名,对象包括文件、磁盘设备、目录等,在此我们使用的是VxD文件;dwDesiredAccess是访问对象的模式,有读、写、读写或设备查询等;dwShareMode是对象的共享模式,如果该参数为零则对象不可共享;lpSecurityAttributes是指向安全属性结构的指针,该结构决定了返回的句柄能否被子进程继承;dwCreationDisposition指出了当文件存在或不存在时的各种操作,如值CREATE_ALWAYS代表生成一个新文件,如果文件已经存在则覆盖原文件并清除原有的属性;dwFlagsAndAttributes指明了文件属性和标志,如FILE_ATTRIBUTE_HIDDEN代表文件属性为隐藏;hTemplateFile是一个句柄,该句柄指向一读属性的模板文件,Windows95中的此参数必须为NULL。

2) BOOL DeviceIoControl(HANDLE hDevice,DWORD dwIoControlCode,

LPVOID lpInBuffer,DWORD nInBufferSize,LPVOID lpOutBuffer,

DWORD nOutBufferSize,LPDWORD lpBytesReturned,

LPOVERLAPPED lpOverlapped );

函数成功调用返回为非零值。参数hDevice是要执行操作的设备的句柄,由调用CreateFile而获得;dwIoControlCode指出了操作的控制代码;lpInBuffer为指向一缓冲区的指针,缓冲区中是有待操作的数据;nInBufferSize是lpInBuffer缓冲区的大小,单位是字节;lpOutBuffer也为指向一缓冲区的指针,缓冲区中是操作的输出数据;nOutBufferSize是lpOutBuffer缓冲区的大小,单位是字节;lpBytesReturned指向一变量以接收存储到lpOutBuffer中的数据的大小,单位也是字节;lpOverlapped是OVERLAPPED结构的指针。

3) BOOL CloseHandle( HANDLE hObject );

若函数调用成功则返回一个非零值。参数hObject是一个打开对象的句柄。

可以在调用CreateFile函数时指定模块名、文件名或标志某个VxD的登记簿项来打开一个静态的或动态可装载的VxD。若此VxD存在且支持设备IOCTL接口,CreateFile将返回一个设备句柄,此句柄可作为DeviceIoControl函数调用时的参数。否则CreateFile将失败,并将上一个错误值设为ERROR_NOT_SUPPORTED或ERROR_FILE_NOT_FOUND。错误值可调用函数GetLastError获得。

在打开VxD时,必须按下列形式指定其名称:\\.\VxDName,其中VxDName可以是指定模块名、文件名或标志某个Vx的登记簿项的名称。

我们指定扩展名.VXD,函数将在标准搜索路径(一般为Windows下的system)中查找此文件,如:

HANDLE hDevice;

hDevice=CreateFile("\\\\.\\testv5.vxd",0,0,NULL,0,FILE_FLAG_DELETE_ON_ CLOSE, NULL);

同一个VxD可以打开任意多次,每次打开时,CreateFile都会提供此VxD的一个唯一句柄,但内存中决不会装入两份VxD。为保证系统能在关闭VxD的最后一个事例时将其从内存中清除,在打开动态可装载的VxD时应指定FILE_FLAG_DELETE_ON_CLOSE值。

可用DeviceIoControl向VxD发命令。此时应指定先前打开的设备句柄,控制代码及输入输出参数。设备句柄标志了要向其发送命令的VxD,控制代码则指定了要此VxD完成的一个操作。

DeviceIoControl的输入输出参数包括用于向VxD传入数据或接收VxD中传出数据的缓冲区的大小或地址。是否要用到这些参数取决于指定的VxD如何处理控制代码。

当用户结束某个VxD之后,可用CloseHandle函数将与其相关的设备句柄关闭。下例将关闭某个句柄: CloseHandle(hDevice)。将VxD关闭并不需要将其从内存中删除,CloseHandle在系统中没有与此VxD相关的有效句柄时将会把此VxD从内存中清除。

2.3 VxD程序中的处理

VxD可通过处理VxD的控制过程中W32_DEVICEIOCONTROL消息以支持设备IOCTL接口。

当应用程序调用CreateFile函数时,系统向指定的VxD的控制过程发送W32_DEVICEIOCONTROL消息以决定此VxD是否能够支持设备IOCTL接口。对于动态可装载VxD,系统在首次打开此VxD时将向其发送SYS_DYNAMIC_INIT控制消息。

当应用程序调用DeviceIoControl时,系统将调用由给定的设备句柄标识的VxD之控制过程。此时EAX寄存器中包含有W32_DEVICEIOCONTROL消息,ESI寄存器中包含有一个DIOCParams结构的地址。此结构中包含应用程序在DeviceIoControl函数中指定的所有参数以及其它一些信息。VxD应检测DIOCParams结构的dwIoControlCode成员以决定待执行的操作,lpvInBuffer成员中包含VxD完成该操作所需的一些支持数据。在处理完控制代码之后,VxD应将它需要返回给应用程序的信息拷贝到lpvOutBuffer成员所指的缓冲区中。

若VxD成功地处理了控制代码,则在返回前应将EAX寄存器清零.否则应将EAX置为某个非零值。

3. V5协议测试仪中VxD程序的设计

3.1 VxD程序的编写工具

我们选用MicroSoft 的VC++和Vireo Software的VtoolsD for Win95作为程序开发语言,NuMege的SoftIce95作为调试工具。

VtoolsD开发包提供了对VxD编程的全线C++类库支持,其中最重要的是Quick VxD程序,它提供了诸多选项用来快速生成VxD代码框架,这与VC++中的Class Wizard是极为相似的。在Quick VxD可视化编程环境中,Quick VxD根据编程者的各种选择快速创建一个VxD工程文件。此文件包括:C/C++头文件,C/C++代码文件,C/C++工程文件。头文件中含有VxD所必须的类声明,还有VxD控制消息处理函数声明,Windows ring3 API调用VxD的调用入口声明等;代码文件中,QuickVxD预先生成了许多须继续编程来扩充其内在功能的类成员函数。编程者通过在这些类成员函数中添加代码,从而完成定制的功能。

3.2 编写中的细节问题

在V5协议测试仪中,VxD程序主要完成对ISA插卡的双口RAM的读写操作。我们命名插卡设备为TESTV5,设备类为Testv5Device,我们在应用中只须对Testv5Device的成员函数OnW32DeviceIoControl 进行一些改动。

在高层程序和VxD程序中,我们定义了两个常量DIOC_WRITE和DIOC_READ,作为高层程序传递给VxD的控制代码,根据控制代码的不同,VxD程序中的OnW32DeviceIoControl函数对DPRAM进行读或写操作。根据插卡上硬件的跳线,DPRAM的起始地址为0x000D0000,对DPRAM的读写操作实际上就如同简单的数组的赋值。由于存储器的大小有限制,我们在读写操作中要注意判断是否到达存储器尾部。

4. 后记

我们的实际思路使得测试仪具有很好的扩展性和可升级性,我们利用相同的硬件实现了七号信令的监测,不同的只是协议分析软件,而VxD技术可以类似的应用。在设计中我们使用了ISA总线,随着计算机技术的不断发展,我们会采用PCI总线技术,VxD技术在Windows 95/98平台下仍将有其顽强的生命力,我们可以用其实现DMA,以提高数据交换的速度。

作者会员名:tliwant

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有