Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:2894回复:21

有关虚拟驱动卸载和SoftICE调试问题

楼主#
更多 发布于:2005-03-07 08:09
我参考了terrificskyfox发布的基于oemdll的W2kPrintDrvSample例子,该例子链接
http://www.driverdevelop.com/forum/viewthread.php?tid=58415
现已编译并安装成功, 我的环境是 Win2k Server sp4,SD3.2
使用SoftICE调试的时候一切正常,就是无法截下断点!我安装了HP Deskjet 4848 打印驱动到机器,并外接打印机,如果不安装W2kPrintDrvSample,则HP打印机一切正常,安装W2kPrintDrvSample以后,就会出现保护地址错误等信息,请问这是为什么?是否该驱动不支持高端打印机?还有我安装了例子之后不知道如何卸载,请编译过该例子的各位高手给予指点,多谢多谢!!!


[编辑 -  3/7/05 by  Pregunta]

[编辑 -  3/7/05 by  Pregunta]
多交流,多学习,共同提高。
xbzjackey
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望34点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-07 17:19
我没试过该例子,因此只能回答你的第二个问题。
你可以到系统目录下把驱动程序删掉,并且在打印机中删掉安装好的Hp打印机,重新安装即可。
回答好的不要忘了给分哦。。。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-07 19:38
谢谢xbzjackey的回答以及斑竹的关注,“系统目录下把驱动程序删掉”是指“I:\\WINNT\\system32\\drivers”目录下吗?可是我并没有找到我刚刚安装的驱动,请问具体目录是哪个?谢谢你!
多交流,多学习,共同提高。
aqua_aqua
驱动牛犊
驱动牛犊
  • 注册日期2005-01-16
  • 最后登录2005-09-15
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-08 09:35
那个例子的驱动程序是安装在C:\\WINNT\\system32\\spool\\drivers\\w32x86\\3\\这个位置下的,你可以找到.
至于SOFTICE无法下断点,这是运气问题 :D :D :D,
我可以把我的方法提供给你参考 每次要用SOFTICE都要很祈祷一番,很虔诚的那种..
MSN:aqua_aqua@21cn.com
terrificskyfox
驱动小牛
驱动小牛
  • 注册日期2003-03-12
  • 最后登录2014-04-28
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-08 11:33
在用SoftICE调试前你必须弄清楚一个问题:
你知道驱动程序被调用的时候具体会执行哪些函数么???该在哪里
下断点???

另外想高效的调试一个程序不但需要对程序本身有深入系统的了解,
调试方法和技巧也很重要。

我的建议是:
1、先研究一下debug.h和debug.cpp中的调试宏定义都是干什么用的
,再看看这些宏在整个源码中是怎么使用的。

2、到Sysinternals网站上下载一个DebugView,这个工具可以捕捉
到OutputDebugString()函数的输出,这样只要你在源码中加入调试
宏输出,整个驱动程序的执行流程就非常清晰的显示出来了,比任何
帮助文件都清晰可靠(仅仅想理解用户态驱动程序的执行流程根本
就不需要SoftICE,而且用SoftICE来理解流程显然是个笨办法,效率
也比较低下),过了这步你对系统算是有个基本清晰的认识了。

3、善用MSDN和SoftICE理解程序细节,这才是SoftICE出马的时候,
需要调试细节的时候显然SoftICE就能派上大用场了,不过通过第二
步你才知道该在哪里下断点。MSDN的资料足够回答初学者的任何问题
了,先自己研究一下吧,过一段时间你就会发现你付出的时间是值得
的,在论坛上初学者通常很难获得实质性的收获。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-09 08:20
那个例子的驱动程序是安装在C:\\WINNT\\system32\\spool\\drivers\\w32x86\\3\\这个位置下的,你可以找到.
至于SOFTICE无法下断点,这是运气问题 :D :D :D,
我可以把我的方法提供给你参考 每次要用SOFTICE都要很祈祷一番,很虔诚的那种..


谢谢 aqua_aqua 兄的指点,我前几天出差,一直没有进展,以后我们可要多联系~~
多交流,多学习,共同提高。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-09 08:27
在用SoftICE调试前你必须弄清楚一个问题:
你知道驱动程序被调用的时候具体会执行哪些函数么???该在哪里
下断点???

另外想高效的调试一个程序不但需要对程序本身有深入系统的了解,
调试方法和技巧也很重要。

我的建议是:
1、先研究一下debug.h和debug.cpp中的调试宏定义都是干什么用的
,再看看这些宏在整个源码中是怎么使用的。

2、到Sysinternals网站上下载一个DebugView,这个工具可以捕捉
到OutputDebugString()函数的输出,这样只要你在源码中加入调试
宏输出,整个驱动程序的执行流程就非常清晰的显示出来了,比任何
帮助文件都清晰可靠(仅仅想理解用户态驱动程序的执行流程根本
就不需要SoftICE,而且用SoftICE来理解流程显然是个笨办法,效率
也比较低下),过了这步你对系统算是有个基本清晰的认识了。

3、善用MSDN和SoftICE理解程序细节,这才是SoftICE出马的时候,
需要调试细节的时候显然SoftICE就能派上大用场了,不过通过第二
步你才知道该在哪里下断点。MSDN的资料足够回答初学者的任何问题
了,先自己研究一下吧,过一段时间你就会发现你付出的时间是值得
的,在论坛上初学者通常很难获得实质性的收获。
 


多谢老大的指点了,我想我的问题还比较多,需要一点一点解决,您的这些建议应该对我很有帮助,我想我的首要任务就是再把代码仔细看看,搞清楚第 1 个问题,希望顺利的话,能在此基础上进行调试,以期对系统有更清晰的认识。遇到新的问题,还希望前辈多多指点!谢谢!

另外帖子分数已经修改,希望对这个问题感兴趣的朋友给予一点关注,谢谢!

[编辑 -  3/9/05 by  Pregunta]
多交流,多学习,共同提高。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-09 08:43
另外还想问一个弱弱的问题:安装sample.inf后“I:\\WINNT\\system32\\spool\\drivers\\w32x86\\3”目录下的文件只有
STDNAMES.GPD 、TENCENT.BUD、 TENCENT.GPD、 UNIDRV.DLL、 UNIDRVUI.DLL、 UNIRES.DLL 几个文件,并没有看到 UNI.DLL 和UN.DLL ;而且我的打印机列表中也没有出现新的打印机,这是什么原因呢?(因为需要选择这个打印机驱动来进行打印任务,肯定要有个打印机图标安装上去的,我的却没有,在其他机器上也试过,也是没有,为什么啊?!)

多交流,多学习,共同提高。
terrificskyfox
驱动小牛
驱动小牛
  • 注册日期2003-03-12
  • 最后登录2014-04-28
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-09 09:29
你这个现象我倒是从来没有见过,UNI.DLL和UI.DLL应该是在那个文件夹的,你在系统盘里搜索一下看看能不能找到。

你以前不是安装成功过么?
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-03-09 09:50
terrificskyfox,谢谢您的回复,我刚刚搜索了我的系统盘I,没有UNI.dll和UI.dll,包括C盘里也没有,我的I盘是专门外挂的一个测试盘,2k server sp4 ,另外我的D盘里有2003 OS ,不会跟多系统有关系吧,以前我只是使用sample.inf点击右键安装的,今天看了你的回复才知道应该有个打印机图标安装到打印机列表的,但是发现没有,我也不知道这是怎么回事,不知道其他的朋友有没有遇到过这个问题。如果没有安装成功的话,测试就没办法进行了,我想也正是这个原因使得SoftICE下断点没有弹出成功,至于DbgView我正在熟悉它的用法!多谢您的指点,我在找找其他原因,结果我会即刻发到这儿来的!
多交流,多学习,共同提高。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-03-09 10:08
我是使用 NTDDK 的checked直接编译src目录的
多交流,多学习,共同提高。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-03-09 12:21
安装的问题还没有解决,可能是源文件目录中包含中文字符有关系,唉,具体还没找到。但是重新便宜以后可以看到该虚拟打印机,另外,当我把这个虚拟打印机图标删除以后在安装就又安装不上去了,系统目录下还是找不到 UNI.DLL 和 UI.DLL,头疼!


[编辑 -  3/9/05 by  Pregunta]
多交流,多学习,共同提高。
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-03-09 13:16
安装的问题还没有解决,可能是源文件目录中包含中文字符有关系,唉,具体还没找到。但是重新便宜以后可以看到该虚拟打印机,另外,当我把这个虚拟打印机图标删除以后在安装就又安装不上去了,系统目录下还是找不到 UNI.DLL 和 UI.DLL,头疼!


[编辑 -  3/9/05 by  Pregunta]


打印机安装是使用inf文件手动安装,
方法:点击“添加打印机”后指定inf文件位置来安装,成功后在打印机文件夹出现打印机图标

你安装不上有什么错误提示呢?
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-03-09 14:15
多谢snowstart的指点,我已经解决了这个问题,我一直以为直接使用右键安装这个驱动,原来是要指定inf文件位置来安装,再次多谢各位,现在我正在加紧看码和熟悉DebugView的用法,希望遇到问题后各位前辈能给小弟解惑

可是现在怎么给分啊?难道只能一次性给分?

[编辑 -  3/9/05 by  Pregunta]
多交流,多学习,共同提高。
aqua_aqua
驱动牛犊
驱动牛犊
  • 注册日期2005-01-16
  • 最后登录2005-09-15
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-03-10 09:48
[quote]那个例子的驱动程序是安装在C:\\WINNT\\system32\\spool\\drivers\\w32x86\\3\\这个位置下的,你可以找到.
至于SOFTICE无法下断点,这是运气问题 :D :D :D,
我可以把我的方法提供给你参考 每次要用SOFTICE都要很祈祷一番,很虔诚的那种..


谢谢 aqua_aqua 兄的指点,我前几天出差,一直没有进展,以后我们可要多联系~~ [/quote]

哈哈...共同学习吧,我这几天也正在被驱动的类型和绘画表面的类型苦恼着呢,
MSN:aqua_aqua@21cn.com
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-03-10 10:51

哈哈...共同学习吧,我这几天也正在被驱动的类型和绘画表面的类型苦恼着呢,


我正在crazy调试中ing ~~ 初步打算把生成的位图连成一个位图,不知道技术上能不能实现
多交流,多学习,共同提高。
terrificskyfox
驱动小牛
驱动小牛
  • 注册日期2003-03-12
  • 最后登录2014-04-28
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-03-10 11:16
把几个位图连成一个肯定是没有问题的,位图的生成过程完全是自己
控制的,只要你对位图的格式充分理解了,这就是个小case
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-03-11 07:56
把几个位图连成一个肯定是没有问题的,位图的生成过程完全是自己
控制的,只要你对位图的格式充分理解了,这就是个小case


谢谢terrificskyfox的回复,目前我正在这方面努力,图形编程以前没怎么接触过,现在正在参考相关资料,希望能早点解决这个问题~


另外我还想问一下,有关fineprint和adobe pdf打印机驱动的实现原理,不知道您能不能指点一下。目前我急切想了解的是,假如你在机器上装有fineprint打印机驱动,那么应该可以选择它作为默认打印机,那么在实际外接打印机和安装相应驱动程序后,实际使用的打印机应该不是fineprint,是么?那么fineprint虚拟打印机的功能又如何体现出来?  我知道仅仅编译一个虚拟驱动例程是远远不够的,目前我也正在着手深入了解虚拟打印驱动的原理,但是这个问题,还是有点不好理解,望能解答,谢谢!



[编辑 -  3/11/05 by  Pregunta]
多交流,多学习,共同提高。
terrificskyfox
驱动小牛
驱动小牛
  • 注册日期2003-03-12
  • 最后登录2014-04-28
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望11点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-03-11 08:51
就根本的设计原理来说,adobe的pdf打印驱动和win2kprndrvsample
没有什么区别,仅仅是一些具体实现、输出格式等的区别。
fineprint的设计思路则不同,它主要提供的是对输出的编辑定制,
实际传输到打印机时则是调用其它驱动程序完成具体的操作,这个
设计模式在商业上无疑是很成功的,因为不同的打印机有自己具体
的打印和操作指令,它不可能为所有的打印机做驱动程序,用这种
设计模式直接解决最重要的应用问题;同时它提供的编辑功能又
非常实用,而且解决了用户二次编辑的问题。这种设计思想为它
带来了很大的商业成功,实现的原理要比普通的虚拟打印机复杂的
多,因为它要和其它的打印驱动协作,具体的我也不清楚,你可以
查查资料仔细研究一下。
Pregunta
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2006-10-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-03-11 09:16
就根本的设计原理来说,adobe的pdf打印驱动和win2kprndrvsample
没有什么区别,仅仅是一些具体实现、输出格式等的区别。
fineprint的设计思路则不同,它主要提供的是对输出的编辑定制,
实际传输到打印机时则是调用其它驱动程序完成具体的操作,这个
设计模式在商业上无疑是很成功的,因为不同的打印机有自己具体
的打印和操作指令,它不可能为所有的打印机做驱动程序,用这种
设计模式直接解决最重要的应用问题;同时它提供的编辑功能又
非常实用,而且解决了用户二次编辑的问题。这种设计思想为它
带来了很大的商业成功,实现的原理要比普通的虚拟打印机复杂的
多,因为它要和其它的打印驱动协作,具体的我也不清楚,你可以
查查资料仔细研究一下。


谢谢terrificskyfox的回复,结合您的一段话和我自己的理解, 是不是可以认为fineprint的实现主要问题是在于它对打印内容的输出定制和打印驱动协调?!它的数据输出格式是自己定制的,但是实际处理打印任务的时候他是和具体的外接打印机驱动协作的,我不知道是不是存在两个打印机驱动之间可以通信的说法,如果可以的话,那这个协作就好理解一点了,如果没有这个说法,那么两个驱动之间是在驱动的一个什么样的层次来完成这个协作的呢?!

我安装了fineprint,也看到了它的编辑输出功能,很完善,很强大,其中就有一个我想要实现的功能,那就是它可以把打印内容截获并存储。就这一个功能而言,win2kprndrvsample也是可以实现的,但是终究还是不了解fineprint与具体外接打印驱动的协作过程,而win2kprndrvsample是不是也有可能做到这一步?说白了,我是想知道,win2kprndrvsample在功能上是否能实现截获任何一款打印机的打印数据?!

Adobe PDF虚拟打印机我是看了您的回复才对它有了个大概的了解,原来我一直以为它跟fineprint的功能相似,起码在数据截获的功能上都比较不错,现在我也了解到win2kprndrvsample的数据截获功能也很不错,只是输出格式不同而已。终于可以肯定我的学习方向还是正确的,具体过程肯定会遇到更多更复杂的问题,到时候也希望老兄和其他对这个问题有研究的朋友多多帮忙!
多交流,多学习,共同提高。
上一页
游客

返回顶部