阅读:5007回复:28
最近做的串口监控filter...
我想自己做一个串口监控的驱动,要是serial和serenum的UpperFilters,任何应用打开COM口之后或串口鼠标已经工作之后,该过滤驱动都能随时用相应的应用程序打开并能得到串口数据。我曾经用过驱动网上Serial Spy.zip文件中的驱动,俄罗斯的一大学生写的,但必须要先打开他写的应用程序设置监控后别的应用程序与串口的通信才能得到监控。他用的C++实现的,直接编译后还不能运行,只能用他以前编好了的驱动运行,要做的东西太多,我决定自已动手,kissfire老兄建议我看Walter Oney的第二版,AllenZh大虾让我给他有偿开发好减轻我的劳苦,都是网上的好兄弟呀,我按照kissfire老兄的意见重新看了那章有关filter的部分,重新生出一个edo来再进行操作,星期天搞了一整天,老婆不幸被我冷落,我们经常打仗,在这里也对我老婆说声对不起,星期天的成果是串口也能打开,edo也能打开了,这个节外生成的edo刚开始就是打不开,create一个\\Device\\MyExtra0 device建立一个\\??\\Sermon symblelink才搞定它,bullshit,接着周一又搞了一天有关DispatchRead就是无法将监控的read IRP正确返回,不是BSOD就是全0,郁闷无数把,今天又搞了一下午到现在才将其擒住,我给他返回0x31,它就全是1111111...不是全0000000...接下来要将两个read的dispatch进行挂接让串口的数据克隆一份给sermon设备,请大家继续关注我.
|
|
最新喜欢:waterw...
|
沙发#
发布于:2004-11-03 10:11
先用IoSetCompletionRoutine,送出IOCTL_SERIAL_....
后在completion routine里read data. 小心edo和fido的Irp区分及 |
|
板凳#
发布于:2004-11-04 09:33
[quote]先用IoSetCompletionRoutine,送出IOCTL_SERIAL_....
后在completion routine里read data. 小心edo和fido的Irp区分及 |
|
|
地板#
发布于:2004-11-04 10:12
使用先队列在处理是个好的方法,另外的数据通过DeviceIoControl来得到和ReadFile得到都没有问题
|
|
|
地下室#
发布于:2004-11-04 12:11
但我现在还不知道怎样将completion routine里的data发送给edo里的read Irp, 送给edo的目的 |
|
5楼#
发布于:2004-11-04 13:35
我现在用我的SerialSpy从那个edo里得到了数据,没有使用先queue再处理总觉得比较复杂,处理的不好,Walter Oney大师不是说naive就是Less naive,我就只用了一个SpinLock就搞定它,在DeviceExtension中用了一个100bytes长的buffer,比较SB!但我想应该能对付一下了。
|
|
|
6楼#
发布于:2004-11-04 13:37
[quote]
送给edo的目的 |
|
|
7楼#
发布于:2004-11-04 13:42
TO 论坛大佬 AllenZh :
使用先队列在处理是个好的方法,另外的数据通过DeviceIoControl来得到和ReadFile得到都没有问题 你是大虾,说的很好,我有很多地方需要你指点,没有你一语点破梦中人,我还不知道该往哪走啊,有时间到北京,我定为你接风洗尘! [编辑 - 11/4/04 by emugine] |
|
|
8楼#
发布于:2004-11-04 14:21
TO 论坛大佬 AllenZh : 你是大虾,说的很好,我有很多地方需要你指点,没有你一语点破梦中人,我还不知道该往哪走啊,有时间到北京,我定为你接风洗尘! [编辑 - 11/4/04 by emugine] [/quote]] 不必客气 我也没有实际帮你什么忙,有时间也欢迎你来深圳 |
|
|
9楼#
发布于:2004-11-12 11:18
呵呵 事件读你是怎么搞定的???
|
|
10楼#
发布于:2004-11-12 15:43
呵呵 事件读你是怎么搞定的??? 我在DeviceExtension中用了一个100bytes长的buffer,每次有数据来的时候先存到这个buffer里面,存满了就不存了,读完后对它清空,因为我并不需要所有的数据,能取出其中一些就够了,你说的读事件我的filter驱动只是简单下传,但同时IoSetCompletionRoutine,等读完后进入这个Completion将数据保存到100bytes长的buffer里等edo来读,edo读完后清空。不知道你能否看懂,你的mail不知道是什么码,在我的机器里全是??。 |
|
|
11楼#
发布于:2004-11-16 15:09
我说的是你怎么通知EDO什么时候有数据的??
如果你吧所有的IOCTL向下扔,那么就会影响FDO的读操作啊 |
|
12楼#
发布于:2004-11-17 15:05
我现在也想得到每一个数据了,因为我要在应用程序里根据数据来BEEP,我想用一个事件来处理,但我没有用过事件,读事件发生时没有数据就让EDO等待,一旦收到数据就设定事件让应用程序来读取数据。
原来我都没有通知EDO有数据,我做的就是只把数据暂时存起来,读之前先清空等读完后就不管了,不关心每一个数据,如果你有好的方法,给点提示。 |
|
|
13楼#
发布于:2004-11-19 11:55
偶捆绑成功。每打开一次COM1可以看见IRP IRP_MJ_CREATE dispatch, 可user mode马上出现 错误。关闭又可以继续。 没有IRP_MJ_READ dispatch出现。。
可偶捆绑其他的设备是完全OK的。。郁闷。不知道为什么哟 :mad: |
|
|
14楼#
发布于:2004-11-19 15:10
建议你在应用程序里得到它的错误代码后再研究你的driver
|
|
|
15楼#
发布于:2004-11-19 17:16
应用层的错误码 拒绝访问呀
|
|
|
16楼#
发布于:2004-11-19 17:36
DWORD dw=GetLastError();
然后你根据dw到msdn里去找看是哪个错误,一般还是你的driver有问题,或是拒绝访问,或是参数错误。 |
|
|
17楼#
发布于:2004-11-22 09:58
应用层返回错误码 翻译过来就是拒绝访问!!
我做了个测试驱动。让我的FILTER捆绑过去。。没有任何错误 可我一捆绑COM1照成 应用层打开COM1拒绝访问。。 打开时候可以看见过滤驱动的派法例程Irp Create 调用 |
|
|
18楼#
发布于:2004-11-23 09:26
应用层返回错误码 翻译过来就是拒绝访问!! 那是你的驱动的问题,你的驱动打开了COM1而不是过滤,当然应用程序就被拒绝访问了 |
|
|
19楼#
发布于:2004-11-23 21:13
我是捆绑到COM1的设备堆栈上哟。。 也成功了。应用层就无法打开COM1。 如果我捆绑到我的测试驱动上。应用层可以打开我测试驱动连接符
有EMAIL吗?? 我发代码给你看看。。我看不出什么问题了。 |
|
|
上一页
下一页