在视窗操作系统上获取bios版本日期的方法

文档序号:6651502阅读:383来源:国知局
专利名称:在视窗操作系统上获取bios版本日期的方法
技术领域
本发明涉及一种在视窗操作系统上获取BIOS版本日期的方法,特别是指借助动态虚拟设备驱动程序(dynamic virtual device driver;dynamic VxD)实现在视窗操作系统上获取BIOS版本日期的方法。
由于计算机硬件技术不断翻新,BIOS也不断地被计算机厂商升级换代,由于不同的BIOS支持的硬件及服务皆不同,因此,获得BIOS版本日期对编写对硬件进行检测的软件具有极其重要的意义。
在传统DOS操作系统上,BIOS版本日期可以通过读取固定的BIOS存储器而获得,但是,视窗操作系统上不允许应用程序直接存取实际存储器,因此,想在视窗操作系统上获得BIOS版本日期也就遇到实际上的困难。
本发明所揭示的在视窗操作系统上获取BIOS版本日期的方法,是借助于动态虚拟设备驱动程序(dynamic virtual device driver;dynamic VxD)实现在视窗操作系统上获取BIOS版本日期的方法,利用VxD能执行于RING 0特权级,并定义输入参数与输出参数的结构,获取BIOS的System BIOS版本日期与Video BIOS版本日期。
以在一笔记型计算机测试程序Evolution的系统信息显示(SystemInformation)为例,需要显示BIOS的System BIOS版本日期与VideoBIOS版本日期。经加载BIOSDATE.VxD後,定义输入参数的结构中StartAddress为0xffff0,PrepareSize为0x400(1K),使用VxD中的READDATE功能,返回值结构中CatchedValue内的值即希望获得的System BIOS版本日期。
定义输入参数的结构中,StartAddress为0xc0000,PrepareSize为0x400,再使用VxD中的READDATE功能,返回值结构中CatchedValue内的值即希望获得的Video BIOS版本日期。
有关本发明的详细内容及技术特征,将结合


如下图1~3为本发明在视窗操作系统上获取BIOS版本日期具体实现的流程图。
步骤101 获取搜索的起始地址步骤102获取搜索的区域大小步骤103是否存在该物理地址步骤104设置错误标志步骤105返回0到9位的值给应用程序步骤106将物理地址映射至线性地址步骤107初始化地址偏移量I步骤108偏移量I是否小于存储器大小减去8步骤109以起始地址加上偏移量I所指向的地址是否为数字步骤110偏移量I加1步骤201以起始地址加上偏移量I所指向的地址为基址,其第2位与第5位是否为符号″/″步骤202以起始地址加上偏移量I所指向的地址为基址,其第0位至第7位是否为符号″/″或数字步骤203以起始地址加上偏移量I所指向的地址为基址,其第8位与第9位是否为数字步骤204保存0到9位的值步骤205保存0到7位的值步骤206设第8与第9位为空格步骤301以起始地址加上偏移量I所指向的地址为基址,其第4位与第7位是否为符号″/″步骤302以起始地址加上偏移量I所指向的地址为基址,其第0位至第9位是否为符号″/″或数字本发明主要的目的在于借助于动态虚拟设备驱动程序(dynamicvirtual device driver;dynamic VxD)实现在视窗操作系统上获取BIOS版本日期的方法,使程序员在编写视窗应用程序时能够轻松地获得BIOS版本日期的方法。
就Intel的x86系列处理器而言,在保护模式下共有四个特权级(Rings Privilege,如RING 0、RING 1、RING 2及RING 3),不同RINGS提供不同形式的保护与不同级别的特权,其分别代表了对储存设备的不同权限。而RING x是指操作系统的结构像一圈圈的同心圆,最内部是核心(kernel)部分,称RING 0,而愈外面的RING是愈接近用户层(user level),而RING x是x86架构的设计,不是指操作系统,大多数的CPU都只分特权模式和一般模式,而x86则分成RING 0-RING 3四个模式,但一般操作系统为了跨平台考虑,也仅用RING 0和RING 3,RING 1和RING 2就如x86保护模式(protected mode),虽然有,但很少人使用。
所以,视窗操作系统使用两个级别操作系统执行于RING 0及应用程序执行于RING 3,且只有RING 0的程序才有权限对BIOS存储器进行直接I/O操作,视窗操作系统不支持应用程序对硬件的直接I/O操作,但在视窗操作系统中有一类特殊的程序,即虚拟设备驱动程序(virtual device driver;VxD),此VxD能执行于RING 0特权级,可执行一切操作系统的工作,视窗操作系统设计VxD的目的是为了提供一种在不通过应用程序,而能共享同一种外部设备的机制,也就是,可利用自己的VxD取代系统所提供的VxD,如此即能读取BIOS存储器的控制权,使视窗应用程序能够从实际存储器中获得BIOS版本日期。
VxD与视窗应用程序之间的信息交流主要依据应用程序接口(API)的DeviceIoControl函数,在此函数的参数中包含一个指向输入缓冲区的指针,以及一个指向输出缓冲区的指针,而通过两个缓冲区,可以把需要的参数递交给VxD,并且把结果返回给应用程序,当然,在使用此DeviceIoControl函数之前,需要加载(reloaded)相应的VxD,并在服务完後再卸载(unloaded)此VxD。
一般而言,BIOS版本日期被放在BIOS存储器的固定位置上,也即被保存在物理地址(physical address)0xffff4开始的8个或10个字节的空间内,由于物理地址是指在计算机存储器当中真正的存储器地址。若计算机系统采用物理地址,将会使系统程序的设计变得较容易,因为每一个物理地址都是以线性(linear)的方式表示出来,这种表示方式是唯一的,但是在虚拟存储器系统中,因为可以利用硬盘的空间来当成存储器的一部份,所以所有的存储器便不可能全部都是物理地址。
BIOS存储器的时间格式一般很固定,月、日、年之间用符号″/″隔开,具体的有以下几种形式1.月/日/年型,包括xx/xx/xx与xx/xx/xxxx(x为0-9的数字);2.年/月/日型,包括xx/xx/xx与xxxx/xx/xx(x为0-9的数字),由于时间格式比较特殊,只要在实际存储器中搜索到xx/xx/xx或xxxx/xx/xx的内容,即可确定此为一时间。而在特殊BIOS存储器区的地址0xffff0开始向下寻找,找到第一个时间值即为所要找的BIOS版本日期;同理,从0xc0000开始向下寻找,找到第一个时间值即为VIDEO BIOS版本日期。
第1~3图为本发明在视窗操作系统上获取BIOS版本日期具体实现的流程图,在VxD内获取BIOS版本日期前,须定义输入参数与输出参数的结构1.定义输入参数为了使VxD存取BIOS存储器的功能具有通用性,至少需要两个参数,其一为所搜索的该存储区的起始地址,如搜索BIOS版本日期的0xffff0与搜索Video BIOS版本日期的0xc0000;其二为所搜索储存区的大小,也即所搜索的时间可能存在的区域大小,所以输入参数的结构定义为<pre listing-type="program-listing"><![CDATA[typedef struct{ DWORD StartAddress; DWORD PrepareSize;}InputBuffer;]]></pre>2.定义输出参数依据输入的参数,VxD在BIOS存储器内进行搜索,找到所求的时间值,即返回给使用VxD的视窗应用程序,因此,应定义一个至少10个字节的字符串,用以接收搜索结果,所以输出参数的结构定义为<pre listing-type="program-listing"><![CDATA[typedef struct{ char CatchedValue[10];}OutputBuffer;]]></pre>接着把VxD的输入参数缓冲区指针转化成自定义的InputBuffer型指针,从而获取搜索的起始地址(步骤101),及获取搜索的区域大小(步骤102),接着判断存储区块是否存在该物理地址(步骤103),如果不存在,则设置错误标志(步骤104),并返回0到9位的值给应用程序(步骤105);如果存在,则将物理地址映射至线性地址(步骤106),该线性地址(linear address)所指的是操作系统当中,每个存储器单元的地址是连续性,而且独一无二的表示法。
本发明所提供的方法是运用基址加上偏移量的地址来加以存取存储器,所以必须初始化地址偏移量I(步骤107),鉴于BIOS版本日期表示的格式,时间至少需要8个字节来储存,所以搜索到size-8的位置时,如果该地址所储存的不是数字时,即表示剩下的7个字节不可能是一个时间值,所以最多搜索size-8次,每次分析连续的8或10个字节,并判断偏移量I是否小于存储器大小减去8(步骤108),如果不是,则设置错误标志(步骤104),并返回0到9位的值给应用程序(步骤105);如果是,则判断以起始地址加上偏移量I所指向的地址是否为数字(步骤109),也即判断其值是否在0x30至0x39之间,如果不是数字,则将偏移量I加1(步骤110),继续执行步骤108,如果是数字,则继续执行步骤A(请参考第2图),如下列所述。
依据本发明的判断方法,将时间格式分成两类处理,即xx/xx/xx与xx/xx/xxxx为一类,其共同点为第2位与第5位为符号″/″;xxxx/xx/xx为另一类,其第4位与第7位为符号″/″。所以,接着以起始地址加上偏移量I所指向的地址为基址,其第2位与第5位是否为符号″/″(步骤201),如果不是,则转而执行步骤D(请参考第3图),并以起始地址加上偏移量I所指向的地址为基址,其第4位与第7位是否为符号″/″(步骤301),如果不是,则回到步骤C,如果是,则接着以起始地址加上偏移量I所指向的地址为基址,其第0位至第9位是否为符号″/″或数字(步骤302),如果不是,则回到步骤C,如果是,则保存0到9位的值(步骤204),并回到步骤B。
上述步骤201中,如果为是,则以起始地址加上偏移量I所指向的地址为基址,其第0位至第7位是否为符号″/″或数字(步骤202),如果不是,则继续执行步骤C;如果为是,则以起始地址加上偏移量I所指向的地址为基址,其第8位与第9位是否为数字(步骤203),如果为是,则保存0到9位的值(步骤204),并回到步骤B;如果不是,则保存0到7位的值(步骤205),并设第8与第9位为空格(步骤206),接着回到步骤B。
经上述所揭示的方法,本发明还以一具体的实施例说明本方法的可行性在一笔记型计算机测试程序Evolution的系统信息显示(System Information)中,需要显示BIOS的System BIOS版本日期与Video BIOS版本日期。经载入BIOSDATE.VxD后,定义输入参数的结构中,StartAddress为0xffff0,PrepareSize为0x400(1K),使用VxD中的READDATE功能,返回值结构中CatchedValue内的值即希望获得的System BIOS版本日期。
定义输入参数的结构中,StartAddress为0xc0000,PrepareSize为0x400,再使用VxD中的READDATE功能,返回值结构中CatchedValue内的值即希望获得的Video BIOS版本日期。
虽然参照较佳实施例对本发明进行了描述,然其并非用以限定本发明,本领域的任何技术人员在不脱离本发明之精神和范围内,可进行适当的修改与变动,因此本发明的保护范围应以所附的为准。
权利要求
1.一种在视窗操作系统上获取BIOS版本日期的方法,该方法至少包含下列步骤定义输入及输出参数缓冲区;获取搜索存储器的起始地址及区域大小;将物理地址映射至线性地址;初始化地址偏移量;确定该偏移量小于该存储器大小减去8;确定以该起始地址加上该偏移量所指向的地址为数字;以该数字的该地址为基址,确定其第2位与第5位为符号″/″;确定该基址的第0位至第7位为符号″/″或数字;确定该基址的第8位与第9位为数字;及保存该基址的0到9位的值,并返回该0到9位的值给应用程序。
2.如权利要求1所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于该定义输入参数还包含所搜索该储存区的该起始地址及该区域大小。
3.如权利要求1所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于该定义输出参数还包含定义一个至少10个字节的字符串,用以接收搜索结果。
4.如权利要求1所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于确定该第2的位与第5位为符号″/″的步骤是依据该BIOS版本日期的时间格式。
5.如权利要求4所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于该时间格式为xx/xx/xx与xx/xx/xxxx。
6.如权利要求5所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于该x为0-9的数字。
7.一种在视窗操作系统上获取BIOS版本日期的方法,该方法至少包含下列步骤定义输入及输出参数缓冲区;获取搜索存储器的起始地址及区域大小;将物理地址映射至线性地址;初始化地址偏移量;确定该偏移量小于该存储器大小减去8;确定以该起始地址加上该偏移量所指向的地址为数字;以该数字的该地址为基址,确定其第4位与第7位为符号″/″;确定该基址的第0位至第9位为符号″/″或数字;确定该基址的第8位与第9位为数字;及保存该基址的0到9位的值,并返回该0到9位的值给应用程序。
8.如权利要求7所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于该定义输入参数还包含所搜索该储存区的该起始地址及该区域大小。
9.如权利要求7所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于该定义输出参数还包含定义一个至少10个字节的字符串,用以接收搜索结果。
10.如权利要求7所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于确定该第4位与第7位为符号″/″的步骤是依据该BIOS版本日期的时间格式。
11.如权利要求10所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于该时间格式为xxxx/xx/xx。
12.如权利要求11所述的在视窗操作系统上获取BIOS版本日期的方法,其特征在于该x为0-9的数字。
全文摘要
一种借助动态虚拟设备驱动程序(dynamic virtual device driver;dynamic VxD)实现在视窗操作系统上获取BIOS版本日期的方法,首先定义输入及输出参数缓冲区,并获取搜索存储器的起始地址及区域大小;再将物理地址映射至线性地址;经初始化地址偏移量后,确定该偏移量小于该存储器大小减去8;再确定以该起始地址加上该偏移量所指向的地址为数字;以该数字的该地址为基址,确定数字后;再保存该基址的0到9位的值,并返回该0到9位的值给应用程序,获取BIOS版本日期。
文档编号G06F9/445GK1369784SQ01103460
公开日2002年9月18日 申请日期2001年2月13日 优先权日2000年11月7日
发明者罗江, 陈玄同, 林光信 申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1