- UID
- 60884
- 积分
- 232
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-6-26
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
USB 通用驱动程序第二版 ---------->by lyh728@COC
更新:
USB存储设备端口驱动程序 从 Win98se的1394/USB Disk驱动更新
到WinMe的USB Disk驱动,也就是说从前的USB 通用驱动程序 是 WinMe
Win98se的驱动程序的混合体,而新的版本完全采用WinMe的驱动程序
(我重写了USBMPHLP.PDR文件,但是代码和WinMe的完全一样).
理由是WinMe的USB驱动程序似乎支持的设备更多,并且WinMe的USB驱动程序
支持热插拔,意思是WinMe的USB驱动程序登记了热插拔的接口,并且可以发出
热插拔的通告.
表现在界面上就是Win98也可以像WinMe和Win2k一样通过点击任务栏的一个
小图标来卸载USB设备.
如图98tray 和 98hotplg所示.
思路:
WinMe 的卸载USB设备的小图标是Systray.exe提供的,你可以浏览WinMe 的
Systray.exe的资源,就可以看到那个图标.
微软的win98se的1394升级补丁Q242975 更新也提供一个Systray.exe,可以手工
卸载1394设备.但是即使把1394升级补丁或者WinMe 的Systray.exe和相关的动
态库拷贝到win98se,仍然不能手工卸载USB设备.
为什么呢?Systray.exe 是通过设备驱动程序提供的接口来梅举和卸载USB设备的,
如果设备驱动程序不能提供这个接口,那么上层的应用程序就不能完成这个任务.
所以现在的任务就是如何让设备驱动程序提供这个接口,有两个方法:
1.移植WinMe的设备驱动.
2.在Win98Se的WDM驱动上加一层,提供设备枚举和卸载接口.
我选择了第一条路线,经过艰苦跟踪系统VXD代码和多次重启动,终于发现原来
Win98的IOS根本就没有加载WinMe的USBMPHLP.PDR,或者说不能加载,我猜可能是文件格式
的原因,这个发现是一个转折点(其实后来我觉得我好傻,根本没必要跟踪系统VXD代码),
于是我反编译了WinMe的USBMPHLP.PDR,然后重新用Win98的 DDk编译了一遍,就得到了
一个Win98可用的WinMe的USBMPHLP.PDR驱动程序.见图 USBDISK. 至此一切OK.
下面是我的USB通用驱动程序的第二版的文件列表,包括驱动程序和Systray.
驱动程序是
usbstor.inf,Usbstor.sys,usbntmap.sys ,usbauth.sys,Usbntmap.inf, usbmphlp.pdr
最后一个是我重新编译的,其余的都是来自WinMe.
Systray 有两个选择,
来自 WinMe :Systray.exe,Hotplug.dll,Powrprof.dll
或者
来自Win98se的1394升级补丁(Q242975 更新):Systray.exe,Hotplug.dll
USB通用驱动程序的安装:
Systray 的安装可以直接拷贝到windows 98的system 目录,
或者鼠标右键点击Systray.inf,选择安装,就可以了.
驱动程序的安装和其他的PNP的驱动程序安装方式一样.
但是有一点要注意,不要让Win98能够自动找到并且安装Win98se光盘内的NTMAP端口驱动.
如果Win98用NTMAP端口驱动的话,哈哈,蓝屏。
(即使蓝屏也没有关系,只要重新启动,再安装USBNTMAP.inf就可以了).
如果已经安装了前一版的USB通用驱动,或者1394的
磁盘驱动,由于其中内含的NTMAP端口驱动程序不可以和WinMe的USBNTMAP
合作使用,为了防止win98自动选择NTMAP端口驱动,
我提供的解决办法是一个Setinf.bat文件,安装驱动之前,首先鼠标双击运行
Setinf.bat文件,预先安装USBNTMAP.inf文件.
然后再安装 USB Mass Storage 驱动程序(USBSTOR.INF).
这样USBMPHLP端口驱动的版本比较新,win98就不会使用NTMAP了.
当然不运行Setinf.bat文件也可以,只要你不让win98自动安装NTMAP端口驱动就可以.
测试平台:
OS
简体中文win98se
简体中文win98se + 微软的1394升级补丁(Q242975 更新)
简体中文win98se + 联想的win98第三版补丁
USB存储设备
朗科32M优盘 ,USB1.1移动硬盘
现在我没有以前那么多的USB设备可以测试了.
不过鉴于 USB 通用驱动程序的第一个版本支持的设备比较广泛,
我觉得这个版本的USB 通用驱动程序应该支持Win Me 支持的所有
USB存储设备,(包括一些需要认证的USB存储设备,但是我没有这样
USB存储设备).
文件列表:
驱动程序共3个目录,USBSTOR,Tray98,TrayMe
USBSTOR 目录:
USBNTMAP.SYS 来自WinMe
USBSTOR.SYS 来自WinMe
USBNTMAP.INF 来自WinMe
USBAUTH.SYS 来自WinMe
Usbstor.inf 来自WinMe
USBMPHLP.PDR 我写的
CPOEMINF.EXE 我写的
SETINF.BAT 我写的
TRAY98 目录:
HOTPLUG.DLL 来自Win98se Q242975 更新
SYSTRAY.EXE 来自Win98se Q242975 更新
systray.INF 我写的
TRAYME 目录:
HOTPLUG.DLL 来自WinMe
POWRPROF.DLL 来自WinMe
SYSTRAY.EXE 来自WinMe
systray.INF 我写的
安装:
如果安装了前一版本的USB 通用驱动,请先在设备管理器中删除USB Mass Storage Device
安装USBSTOR目录的USB Mass Storage 驱动程序,首先鼠标双击运行Setinf.bat文件,
然后再安装 USB Mass Storage 驱动程序(USBSTOR.INF).
Tray98和TrayMe 都是 systray.exe 文件的升级,支持热插拔,文件分别来自
Win98se的1394升级补丁(Q242975 更新)和WinMe,并且都是简体中文版的,如果需要
其他语言版本的,可以自己去找,选择其中一个目录,鼠标右键点击SYSTRAY.inf文件,选择安装.
USB 通用驱动 第三版
98的USB 通用驱动程序终结篇
by lyh728
前一段时间我发布了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端口驱动程序分别在9DK 和 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 之后的结果 |
|