20楼#
发布于:2005-03-24 13:10
关注.
|
|
21楼#
发布于:2005-03-24 09:00
如果如果确定比较没有问题,那就是你的程序逻辑问题,把完整代码发上来我帮你看看。
另外,你用的IFS 2004版本已经修正了SfGetFileName的Bug. 你能不能给我发个IFS 2004到我信箱。secosx@163.com谢谢!我正在找2004的。 补充一下,拒绝请求操作最好这么写。 Irp->IoStatus.Status = STATUS_ACCESS_DENIED; Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS;// 你原来写的是STATUS_ACCESS_DENIED [编辑 - 3/24/05 by paladinii] |
|
|
22楼#
发布于:2005-03-23 15:06
------------
if (_stricmp(fileName.Buffer, \"\\\\Device\\\\HarddiskVolume2\\\\office\") == 0) 你的_stricmp有问题,试试 _wcsicmp( fileName.Buffer, L\"\\\\Device\\\\HarddiskVolume2\\\\office\" ) 另外,不知道你用的sfilter使什么版本的?SfGetFileName函数有些Bug ----------------- 字符串比较没有问题,从DebugView中已经看到已经匹配, 使用的IFS 2004,应该从理论上没有问题,不知为什么 |
|
|
23楼#
发布于:2005-03-23 12:42
if (_stricmp(fileName.Buffer, \"\\\\Device\\\\HarddiskVolume2\\\\office\") == 0)
你的_stricmp有问题,试试 _wcsicmp( fileName.Buffer, L\"\\\\Device\\\\HarddiskVolume2\\\\office\" ) 另外,不知道你用的sfilter使什么版本的?SfGetFileName函数有些Bug |
|
|
24楼#
发布于:2005-03-22 09:05
我又精减了一下,请各位高手帮助一下啦 这种方法倒是没有用过,不过有一种方法是filemon的方法。 就是替换ZwOpenFile和 ZwCreateFile。 |
|
|
25楼#
发布于:2005-03-22 08:35
我又精减了一下,请各位高手帮助一下啦
请问,我要实现禁止访问D盘上的office文件夹的功能,依据sfilter,编写如下代码,其中的字符串匹配可以,但不能实现该功能,请问错在哪儿呢? NTSTATUS SfCreate ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { NTSTATUS status; PAGED_CODE(); if (IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject)) { Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Information = 0; IoCompleteRequest( Irp, IO_NO_INCREMENT ); return STATUS_INVALID_DEVICE_REQUEST; } ASSERT(IS_MY_DEVICE_OBJECT( DeviceObject )); Irp->IoStatus.Status = -1; { PIO_STACK_LOCATION irpSp; PUNICODE_STRING name; GET_NAME_CONTROL nameControl; ANSI_STRING fileName; NTSTATUS status; irpSp = IoGetCurrentIrpStackLocation( Irp ); name = SfGetFileName( irpSp->FileObject, Irp->IoStatus.Status, &nameControl ); status = RtlUnicodeStringToAnsiString( &fileName, name, TRUE ); DbgPrint(\"FileName: %s\\n\", fileName.Buffer); if (_stricmp(fileName.Buffer, \"\\\\Device\\\\HarddiskVolume2\\\\office\") == 0) { DbgPrint(\"matching...................\\n\"); Irp->IoStatus.Status = STATUS_ACCESS_DENIED; Irp->IoStatus.Information = 0; IoCompleteRequest( Irp, IO_NO_INCREMENT ); return STATUS_ACCESS_DENIED; } } ////////////////////////////////////////////////////////////////////////// IoCopyCurrentIrpStackLocationToNext( Irp ); IoSetCompletionRoutine( Irp, SfCreateCompletion, &waitEvent, TRUE, TRUE, TRUE ); status = IoCallDriver( ((PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension)->AttachedToDeviceObject, Irp ); status = Irp->IoStatus.Status; IoCompleteRequest( Irp, IO_NO_INCREMENT ); return status; } } |
|
|
上一页
下一页