阅读:4996回复:25
天呀,有没有一个sfilter和用户程序通信的例子啊??help,
看了无数帖子,搞了几天都不成功,,天啊,谁有这样的例子啊?吧代码文件传一下,help me
下面这个帖子是说的和我同样的问题,, http://www.eggheadcafe.com/forumarchives/win32programmerkernel/Mar2000/post26109576.asp 这个问题论坛也有很多相关帖子.. 但是没有人总结一下,,我们菜鸟看不明白.. h--e--l--p------ |
|
|
沙发#
发布于:2007-01-04 19:44
给我一个可以通信的例子给100Y,用支付宝支付,
|
|
|
板凳#
发布于:2007-01-05 00:03
你还是自己研究吧
不知道你想实现什么,是从应用程序中主动找驱动,还是从驱动中通知应用程序 不过都不是啥难点,已经讨论过很多次了. |
|
|
地板#
发布于:2007-01-05 00:22
ddk中general有现成的例子,不过如果是用tooflat大虾的sfilter,要处理好IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject)
|
|
地下室#
发布于:2007-01-05 08:32
我想做的很简单!!只要可以用CreateFile打开设备就可以了!!我看了计划所有的帖子和所有的尝试。最后都失败了,一打开设备就兰屏重启,搞了一个星期了。我是这么做的,将原来IFS 2003的sfilter.c的做了如下修改:
//增加设备链接,这个是成功的,驱动载入后用工具可以看到链接名字 RtlInitUnicodeString( &linkString, DOS_DEVICE_NAME); status = IoCreateSymbolicLink( &linkString, &nameString ); KdPrint(( "SFilter!IoCreateSymbolicLink\n")); if (!NT_SUCCESS(status)) { IoDeleteSymbolicLink( &linkString ); status = IoCreateSymbolicLink( &linkString, &nameString ); if (!NT_SUCCESS(status)) { KdPrint(( "SFilter!DriverEntry: IoCreateSymbolicLink failed\n")); IoDeleteDevice(gSFilterControlDeviceObject); return status; } //增加了IRP_MJ_DEVICE_CONTROL DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = SfDeviceIoControl; //SfDeviceIoControl例程如下(例程基本没有什么处理): NTSTATUS SfDeviceIoControl ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { NTSTATUS status = STATUS_SUCCESS; PIO_STACK_LOCATION irpStack; unsigned long cbin; unsigned long cbout; unsigned long code; HANDLE hEvent = NULL; if (DeviceObject == gSFilterControlDeviceObject) { Irp->IoStatus.Information = 0; irpStack = IoGetCurrentIrpStackLocation( Irp ); cbin = irpStack->Parameters.DeviceIoControl.InputBufferLength; cbout = irpStack->Parameters.DeviceIoControl.OutputBufferLength; code=irpStack->Parameters.DeviceIoControl.IoControlCode; status = STATUS_SUCCESS; Irp->IoStatus.Information = 0L; Irp->IoStatus.Status = status; IoCompleteRequest( Irp, IO_NO_INCREMENT ); return status; } IoSkipCurrentIrpStackLocation(Irp); // // Call the appropriate file system driver with the request. // return IoCallDriver(((PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension)->AttachedToDeviceObject, Irp); } //最后我对SfCreate例程做了如下修改: if (IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject)) { KdPrint(( "SFilter!SfCreate:IS_MY_CONTROL_DEVICE_OBJECT\n")); Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS; } //我就这么做的,, 这是我看了很多帖子,参照很多代码后修改的。。 难道sfilter还有不为人知的秘密吗??就这么简单的东西让我搞了一个星期。。 只要用CreateFile打开这个设备就兰屏重启。。 我也是写了N年C的老程序员,写这个程序让我太郁闷,,打击太大了,, 有人能指点一下吗?? |
|
|
5楼#
发布于:2007-01-05 08:43
我写了几个驱动,,都可以和用户程序通信的,但是sfilter就是不可以。。打开设备就兰屏了,
|
|
|
6楼#
发布于:2007-01-05 09:07
看一下createfile的处理,对于自己的控制设备,要改一下代码...
|
|
|
7楼#
发布于:2007-01-05 09:08
你追一下就清楚了,对于普通的fs irp,应该传到下面,但如果是你的控制irp,则到你的控制设备就应该完成,并告诉它已经open..否则 .... 天晓得下面会怎么处理,,那重启还是轻的...
|
|
|
8楼#
发布于:2007-01-05 09:15
引用第7楼znsoft于2007-01-05 09:08发表的“”: //我对SfCreate例程做了如下修改: if (IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject)) { KdPrint(( "SFilter!SfCreate:IS_MY_CONTROL_DEVICE_OBJECT\n")); Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0;//不管是OPENED还是0都兰屏 IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS; } 你说的我已经做了,如上(同样兰屏)。 难道sfilter还有其他地方禁止了与用户程序的通信吗?? 我在本站下载了十几分sfilter代码。。没有一个是有通信的。。 那些做成功了的也不说怎么搞的。。 |
|
|
9楼#
发布于:2007-01-05 09:25
希望有人帮我,我把代码给你
397437395, |
|
|
10楼#
发布于:2007-01-05 09:31
用户被禁言,该主题自动屏蔽! |
|
11楼#
发布于:2007-01-05 09:34
这里是代码,,
|
|
|
12楼#
发布于:2007-01-05 09:36
刚才不知道怎么传,现在代码我传了,
附件的文档里也把修改的几个地方说明了,,用用比较工具可以一幕了然。。 |
|
|
13楼#
发布于:2007-01-05 10:06
用户被禁言,该主题自动屏蔽! |
|
14楼#
发布于:2007-01-05 11:26
引用第13楼tracera于2007-01-05 10:06发表的“”: 谢谢版主!! 正如你所说。。 只要在SfCleanupClose()加下面一段就OK了!! SfCleanupClose() { if (DeviceObject == gSFilterControlDeviceObject) { Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; IoCompleteRequest( Irp, IO_NO_INCREMENT ); return STATUS_SUCCESS; } 。。。。。。。。。 } |
|
|
15楼#
发布于:2007-01-05 11:27
问题已经解决!
|
|
|
16楼#
发布于:2007-01-05 11:33
其实参考filespy就知道了的。。,,兰屏出现是因为只注意了create要改而没有注意到close也要改
|
|
|
17楼#
发布于:2007-01-05 11:40
unload的时候符号连接确实没删除,但是这个是无关紧要的吧,驱动加载时创建符号链接不成功会删除符号链接重新创建的,。。
|
|
|
18楼#
发布于:2007-01-05 12:46
用户被禁言,该主题自动屏蔽! |
|
19楼#
发布于:2007-01-05 17:09
汗。。。
自己好好琢磨下 IS_MY_CONTROL_DEVICE_OBJECT |
|
上一页
下一页