⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbstor21.txt

📁 VC++编写的驱动。很实用的
💻 TXT
字号:
             98的USB 通用驱动程序终结篇
                                             

前一段时间我发布了USB 通用驱动程序第二版,它是一个
从winme抽取出来的WDM版本的USB Mass Storage
驱动程序和我重写的USBMPHLP.PDR端口驱动程序的混合体。

这个终结篇的USB 通用驱动程序完全采用来自winme 的 USB
Mass Storage 驱动程序,仅仅需要修改USBMPHLP.PDR中的两个字节,
完全不需要重写USBMPHLP.PDR,因为这个驱动和第二版的功能上
没有任何区别,仅仅是它和winme 中的驱动程序几乎完全一样,
所以我才称它为终结篇,

方法:
   在用一个16进制编辑器(如winhex或者UltraEdit)在USBMPHLP.PDR 文件中
搜索两个连续字节0x5a,0x04,把它替换为0x0a,0x04,一共可以
找到两处,所以共需要修改两个字节。
   其余的文件和我在USB 通用驱动程序第二版中发布的没有区别。

原理:
   我一直在考虑为什么原来WINEME的USBMPHLP.PDR端口驱动程序在WIN98
下面不能加载,而我写的功能完全一样的代码没有问题,那么多半是编译时
的原因。
   我把我写的USBMPHLP.PDR端口驱动程序分别在98DDK 和 WIN2kME 的DDK
下编译,发现产生的代码有两个字节不同(就是0x5a,0x04和0x0a,0x04的不同),
而在WIN2kME 的DDK下编译的USBMPHLP.PDR端口驱动程序也不能在WIN98下加载。
   那么原因是什么,仔细看了一下WIN2KME DDK的头文件,发现如下语句
ifndef DDK_VERSION
ifdef WIN31COMPAT
DDK_VERSION	EQU	30AH
else
ifdef WIN40COMPAT
DDK_VERSION	EQU	400H
else
ifdef WIN41COMPAT
DDK_VERSION	EQU	40AH
else
DDK_VERSION	EQU	45AH
endif
endif
endif
endif

VxD_Desc_Block	STRUC
DDB_Next	DD	?
DDB_SDK_Version	DW	DDK_VERSION
.
.
.
VxD_Desc_Block	ENDS

看出来了,0x5a,0x04 就是45AH 而0x0a,0x04就是40AH,
于是我在WIN2KME 的DDK 下编译时,定义WIN41COMPAT常量,
就可以让win98加载这个vxd。



最后,我检查winme 的原来的USBMPHLP.pdr端口驱动程序文件,
修改里面的45aH 为40AH,在WIN98下面测试一切正常。
原来win98 不能加载winme 的USBMPHLP.pdr 是因为版本检查的原因,
而USBMPHLP.pdr 的功能非常简单,所以这个版本检查的限制是没有
必要的。

ps:
如果修改45AH为400H 是不是就可以在win95C 下加载了呢?
谁有win95C,可以试一下。

其余内容参见我的帖子
"USB 通用驱动程序第二版"。

其中  Usbmphlp.pdr.me  是winme 的 原版的Usbmphlp.pdr
      Usbmphlp.pdr     是我直接 修改winme 的Usbmphlp.pdr 之后的结果        




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -