阅读:1792回复:9
文件过滤驱动与应用层通信的问题
我在应用层用这段代码打开下层过滤驱动对象,但是却报“函数不正确”的错误,而后我又用同样的方法打开NDIS的Passthru,却没有任何问题。
HANDLE handle = CreateFile( "\\\\.\\SFilter", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE == handle) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL); AfxMessageBox((LPTSTR)lpMsgBuf) ; } 在过滤驱动的DriverEntry中创建符号连接的代码如下: RtlInitUnicodeString( &nameString, L"\\FileSystem\\Filters\\SFilter" ); status = IoCreateDevice( DriverObject, 0, //has no device extension &nameString, FILE_DEVICE_DISK_FILE_SYSTEM, FILE_DEVICE_SECURE_OPEN, FALSE, &gSFilterControlDeviceObject ); //////ADD BY Shenhui RtlInitUnicodeString(&symbolicName, L"\\DosDevices\\SFilter") ; status = IoCreateSymbolicLink(&symbolicName, &nameString) ; if (!NT_SUCCESS(status)) { IoDeleteDevice(gSFilterControlDeviceObject) ; return status ; } 而且我用windbg跟踪过滤驱动,符号连接也是成功创建的,请各位指点迷津。 |
|
|
沙发#
发布于:2007-03-29 23:02
难道没有人实验过?我不断的改变CreateFile中的参数,依然返回失败
|
|
|
板凳#
发布于:2007-03-31 10:25
IRP_MJ_DEVICE_CONTROL需要处理IRP_MJ_CREATE,
sample code: switch(IrpStack->MajorFunction) case IRP_MJ_CREATE: // you need to handle irp_mj_create break; case IRP_MJ_DEVICE_CONTROL: |
|
地板#
发布于:2007-03-31 22:37
这个好像和处不处理IRP_MJ_CREATE没有多少关系啊 ,我加上了这个还是不行
|
|
|
地下室#
发布于:2007-04-01 10:09
CreateFile打开驱动句柄不就是发送IRP_MJ_CREATE吗 OSRONLINE有人问过这个问题 |
|
5楼#
发布于:2007-04-01 12:18
我看了IFS的帮助,已经可以了,谢谢你
|
|
|
6楼#
发布于:2007-06-04 20:47
请问shenhui
我也碰到一样的问题 感觉代码基本上已经和FileSpy一样了SfCreate等都搞了, 和你开始时碰到一样的问题 搞了好久 还没头绪,如何解决的? IFS帮助具体什么地方? |
|
7楼#
发布于:2007-06-05 20:06
你要在sfcreate例程中对DeviceObject == gSFilterControlDeviceObject的情况进行处理;
if (IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject))为真,那么要在这里完成IRP并返回STATUS_SUCCESS |
|
|
8楼#
发布于:2007-06-05 20:53
我的其实是由于粗心大意,在SfCreate中处理了,但是忘了return了,导致在下面被return invalid_device状态
费了好久时间才发现。 多谢楼主了 |
|
9楼#
发布于:2007-06-23 23:39
这种类似的问题常会把人给搞叉了!
|
|