yearn
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1213回复:12

soft 断点的问题?

楼主#
更多 发布于:2002-10-23 10:39
本人在 softice中设置断点  BPX  xxxCreate
其中 xxxCreate 为对应 IRP_MJ_CREATE 的函数。

应用程序中第一次调用 CreateFile 时, softice调试窗口弹出,
并停留在断点 xxxCreate 处。单步执行后,成功返回。
连续第二次调用,则断点不起作用。应用程序直接返回错误。

为什么会这样呢? 请大家帮我分析一下。

thanks very much.

Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-23 11:00
应该会断下来,除非在没到IRP_MJ_CREATE之前驱动程序以返回了。
Tom_lyd
yearn
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-23 11:10
是不是也可以这样认为:
   第二次调用CreateFile()时,I/O管理器并没将IRP传递到
驱动程序,而直接返回错误?
   如果是这样的话,又是什么原因呢?
两次调用参数设置是一样啊,而且为共享模式。

   这个问题已经弄了很久。请大家帮帮我吧。我都快 crazy 了。


VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-10-23 11:27
是不是也可以这样认为:
   第二次调用CreateFile()时,I/O管理器并没将IRP传递到
驱动程序,而直接返回错误?
   如果是这样的话,又是什么原因呢?
两次调用参数设置是一样啊,而且为共享模式。

   这个问题已经弄了很久。请大家帮帮我吧。我都快 crazy 了。


 

具体原因,靠你说的猜不出,具体说说,贴个代码上来
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-23 11:44
从表面上来分析是没有道理的。你既然你第一次能调用成功,说明I/O Manager已经成功调用IRP_MJ_CREATE, 而你第二次不行,是不是因为SoftIce装载的驱动不对?是不是你在两次之间修改了驱动,即没有效重新启动,或没有重新装载符号?
Tom_lyd
bbear
驱动小牛
驱动小牛
  • 注册日期2002-08-20
  • 最后登录2009-04-16
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-23 11:52
第一次调用 CreateFile 时, softice调试窗口弹出,
是不是你未晷CLOSEFILE.
所以 第二次调用,已不成功
yearn
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-10-23 15:53
从表面上来分析是没有道理的。你既然你第一次能调用成功,说明I/O Manager已经成功调用IRP_MJ_CREATE, 而你第二次不行,是不是因为SoftIce装载的驱动不对?是不是你在两次之间修改了驱动,即没有效重新启动,或没有重新装载符号?


可能我没说清楚。我的两次调用只是在不同的应用程序中。
第一个应用程序 CreatFile()后,没有 CloseHandle()。
接着在第二个应用程序中调用CreateFile(),就出错:打开失败。

这样有问题吗?
bbear
驱动小牛
驱动小牛
  • 注册日期2002-08-20
  • 最后登录2009-04-16
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-10-23 16:22


可能我没说清楚。我的两次调用只是在不同的应用程序中。
第一个应用程序 CreatFile()后,没有 CloseHandle()。
接着在第二个应用程序中调用CreateFile(),就出错:打开失败。

这样有问题吗?
 


是有问题, 陪 CreateFile 的
yearn
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2009-05-27
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-10-23 16:50
[quote]
是有问题, 陪 CreateFile 的
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
9楼#
发布于:2002-10-23 17:33
跟驱动也有关系,好像是IoCreateDevice的时候的一个参数不允许多次打开设备。
wlrwx
驱动小牛
驱动小牛
  • 注册日期2002-04-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望11点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-10-23 17:39
是不是独占方式打开的设备???
 :mad: :mad: :mad: :mad:
真正的浪子―――― 是掠过城市的微风,每个人都能感到他的清新,可没有人能留住...... 亦是划过天际的流星,所有人都能仰望他夺目的光芒,没有人能触及...... 风止于森林,流星损于黄土......非凡浪子归于他的最爱......
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2002-10-23 19:15
是不是独占方式打开的设备???
 :mad: :mad: :mad: :mad:

nod
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-10-24 21:51
看看iocreatedevice的参数
NTSTATUS
  IoCreateDevice(
  IN PDRIVER_OBJECT  DriverObject,
  IN ULONG  DeviceExtensionSize,
  IN PUNICODE_STRING  DeviceName  OPTIONAL,
  IN DEVICE_TYPE  DeviceType,
  IN ULONG  DeviceCharacteristics,
  IN BOOLEAN  Exclusive,
  OUT PDEVICE_OBJECT  *DeviceObject
  );

这个参数:
  IN BOOLEAN  Exclusive,
Indicates whether the device object represents an exclusive device. That is, only one handle at a time can send I/O requests to the corresponding device object. If the underlying device supports overlapped I/O, multiple threads of the same process can send requests through a single handle.

够爽吧

  
 :D :D :D
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
游客

返回顶部