阅读:3343回复:7
大侠救我!2000下passthru用event通知应用程序,结果不时的会出现ATTEMPTED_SWITCH_FROM_DPC,蓝屏dump重启
我在应用程序中定义事件event,传入passthru,在passthru中转换为内核事件,当内核中的事件被触发,应用程序可以收到通知,然后用IOCONTROL取数据。过程就是这样,实际情况也可以实现,但是很不稳定,经常会出现ATTEMPTED_SWITCH_FROM_DPC错误,而且用softice也调试不到,因为出错的时候不一定,也不固定在程序的某个地方出现。在网上查到ATTEMPTED_SWITCH_FROM_DPC出错信息大部分是和2000的一个什么bug有关,说是当你访问并口zip驱动器是可能会出现,已经在sp3中得到解决,但我并没有访问什么并口zip驱动器,并口也没访问啊。我脑壳都要想破了,请大侠指点一二吧,谢谢啦。
|
|
|
沙发#
发布于:2001-10-19 18:04
我不能解答你的问题,但从你的问题中我相信你能解答我的一个问题。先谢过。
我看你的问题中提到用DeviceIoControl的方式与passthru交互。那么我想肯定应该用IoCreateDevice建立一个设备对象,我在DriverEntry中调用该函数,然后设置好它的dispatch函数,可是这样运行不正确。我没调试进去。在windows2000下完成。 请高手指点。 |
|
|
板凳#
发布于:2001-10-19 20:10
我也在为这个问题烦恼!贴点代码上来看看啊!!看看你是怎么用ioctr函数调用passthru的那段!这样也不知道是什么问题啊!加我的QQ来交流一下!
|
|
|
地板#
发布于:2001-10-22 15:20
用NDIS_STATUS
NdisMRegisterDevice( IN NDIS_HANDLE NdisWrapperHandle, IN PNDIS_STRING DeviceName, IN PNDIS_STRING SymbolicName, IN PDRIVER_DISPATCH MajorFunctions[], OUT PDEVICE_OBJECT *pDeviceObject, OUT NDIS_HANDLE *NdisDeviceHandle ); |
|
地下室#
发布于:2001-10-24 11:14
我同样的需要解决类似的问题,我的做法是在初始化例程中将DeviceObject的DriverObject->MajorFunction全部换成自己的Irp处理例程(当然还要保存原先的),然后调用IoCreateDevice和IoCreateSymbolicLink生成一个symbollinkname供上层应用程序使用,应用程序通过ReadFile和WriteFile读写驱动程序的数据。这种方法是可以的,但是我有一些疑问:我在处理IRP_MJ_READ的时候,如果没有数据到达,就调用KeWaitForMultipleObjects等待数据到达事件(如果20ms内没有数据到达,则返回该Irp),我不知道这样的“等待”会不会对设备的中断处理产生影响?
|
|
5楼#
发布于:2001-10-24 17:15
to liuhb
bible说的对,我就是用的那个函数,而不是iocreatedevice。 |
|
|
6楼#
发布于:2001-10-24 17:20
to top
你写的是什么啊,还有你的资料里没有你的QQ啊。 to all 谢谢大家捧场,还望继续关注这个问题。 |
|
|
7楼#
发布于:2001-10-24 20:53
感谢dflovely和bible.
我原来的驱动一般都是在驱动内部生成事件对象,然后在应用程序去打开。 [liuhb 编辑于 2001-10-24 20:55] |
|
|