dflovely
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-16分
  • 威望100点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:3343回复:7

大侠救我!2000下passthru用event通知应用程序,结果不时的会出现ATTEMPTED_SWITCH_FROM_DPC,蓝屏dump重启

楼主#
更多 发布于:2001-10-19 14:33
我在应用程序中定义事件event,传入passthru,在passthru中转换为内核事件,当内核中的事件被触发,应用程序可以收到通知,然后用IOCONTROL取数据。过程就是这样,实际情况也可以实现,但是很不稳定,经常会出现ATTEMPTED_SWITCH_FROM_DPC错误,而且用softice也调试不到,因为出错的时候不一定,也不固定在程序的某个地方出现。在网上查到ATTEMPTED_SWITCH_FROM_DPC出错信息大部分是和2000的一个什么bug有关,说是当你访问并口zip驱动器是可能会出现,已经在sp3中得到解决,但我并没有访问什么并口zip驱动器,并口也没访问啊。我脑壳都要想破了,请大侠指点一二吧,谢谢啦。
VC在手,天下我有
liuhb
驱动牛犊
驱动牛犊
  • 注册日期2001-09-25
  • 最后登录2002-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-19 18:04
我不能解答你的问题,但从你的问题中我相信你能解答我的一个问题。先谢过。
我看你的问题中提到用DeviceIoControl的方式与passthru交互。那么我想肯定应该用IoCreateDevice建立一个设备对象,我在DriverEntry中调用该函数,然后设置好它的dispatch函数,可是这样运行不正确。我没调试进去。在windows2000下完成。
请高手指点。
混在深圳
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-19 20:10
我也在为这个问题烦恼!贴点代码上来看看啊!!看看你是怎么用ioctr函数调用passthru的那段!这样也不知道是什么问题啊!加我的QQ来交流一下!
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
bible
驱动牛犊
驱动牛犊
  • 注册日期2001-09-03
  • 最后登录2009-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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
    );
lucker
驱动牛犊
驱动牛犊
  • 注册日期2001-09-14
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-24 11:14
我同样的需要解决类似的问题,我的做法是在初始化例程中将DeviceObject的DriverObject->MajorFunction全部换成自己的Irp处理例程(当然还要保存原先的),然后调用IoCreateDevice和IoCreateSymbolicLink生成一个symbollinkname供上层应用程序使用,应用程序通过ReadFile和WriteFile读写驱动程序的数据。这种方法是可以的,但是我有一些疑问:我在处理IRP_MJ_READ的时候,如果没有数据到达,就调用KeWaitForMultipleObjects等待数据到达事件(如果20ms内没有数据到达,则返回该Irp),我不知道这样的“等待”会不会对设备的中断处理产生影响?
dflovely
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-16分
  • 威望100点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2001-10-24 17:15
to liuhb
 
 
bible说的对,我就是用的那个函数,而不是iocreatedevice。
VC在手,天下我有
dflovely
驱动牛犊
驱动牛犊
  • 注册日期2001-05-10
  • 最后登录2018-05-30
  • 粉丝0
  • 关注0
  • 积分-16分
  • 威望100点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2001-10-24 17:20
to top

你写的是什么啊,还有你的资料里没有你的QQ啊。

to all

谢谢大家捧场,还望继续关注这个问题。

VC在手,天下我有
liuhb
驱动牛犊
驱动牛犊
  • 注册日期2001-09-25
  • 最后登录2002-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-10-24 20:53
感谢dflovely和bible.

我原来的驱动一般都是在驱动内部生成事件对象,然后在应用程序去打开。
[liuhb 编辑于 2001-10-24 20:55]
混在深圳
游客

返回顶部