阅读:1213回复:12
soft 断点的问题?
本人在 softice中设置断点 BPX xxxCreate
其中 xxxCreate 为对应 IRP_MJ_CREATE 的函数。 应用程序中第一次调用 CreateFile 时, softice调试窗口弹出, 并停留在断点 xxxCreate 处。单步执行后,成功返回。 连续第二次调用,则断点不起作用。应用程序直接返回错误。 为什么会这样呢? 请大家帮我分析一下。 thanks very much. |
|
沙发#
发布于:2002-10-23 11:00
应该会断下来,除非在没到IRP_MJ_CREATE之前驱动程序以返回了。
|
|
|
板凳#
发布于:2002-10-23 11:10
是不是也可以这样认为:
第二次调用CreateFile()时,I/O管理器并没将IRP传递到 驱动程序,而直接返回错误? 如果是这样的话,又是什么原因呢? 两次调用参数设置是一样啊,而且为共享模式。 这个问题已经弄了很久。请大家帮帮我吧。我都快 crazy 了。 |
|
地板#
发布于:2002-10-23 11:27
是不是也可以这样认为: 具体原因,靠你说的猜不出,具体说说,贴个代码上来 |
|
|
地下室#
发布于:2002-10-23 11:44
从表面上来分析是没有道理的。你既然你第一次能调用成功,说明I/O Manager已经成功调用IRP_MJ_CREATE, 而你第二次不行,是不是因为SoftIce装载的驱动不对?是不是你在两次之间修改了驱动,即没有效重新启动,或没有重新装载符号?
|
|
|
5楼#
发布于:2002-10-23 11:52
第一次调用 CreateFile 时, softice调试窗口弹出,
是不是你未晷CLOSEFILE. 所以 第二次调用,已不成功 |
|
6楼#
发布于:2002-10-23 15:53
从表面上来分析是没有道理的。你既然你第一次能调用成功,说明I/O Manager已经成功调用IRP_MJ_CREATE, 而你第二次不行,是不是因为SoftIce装载的驱动不对?是不是你在两次之间修改了驱动,即没有效重新启动,或没有重新装载符号? 可能我没说清楚。我的两次调用只是在不同的应用程序中。 第一个应用程序 CreatFile()后,没有 CloseHandle()。 接着在第二个应用程序中调用CreateFile(),就出错:打开失败。 这样有问题吗? |
|
7楼#
发布于:2002-10-23 16:22
是有问题, 陪 CreateFile 的 |
|
8楼#
发布于:2002-10-23 16:50
[quote]
是有问题, 陪 CreateFile 的 |
|
9楼#
发布于:2002-10-23 17:33
跟驱动也有关系,好像是IoCreateDevice的时候的一个参数不允许多次打开设备。
|
|
10楼#
发布于:2002-10-23 17:39
是不是独占方式打开的设备???
:mad: :mad: :mad: :mad: |
|
|
11楼#
发布于:2002-10-23 19:15
是不是独占方式打开的设备??? nod |
|
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 |
|
|