zhjie374
驱动小牛
驱动小牛
  • 注册日期2004-10-27
  • 最后登录2012-01-17
  • 粉丝2
  • 关注1
  • 积分17分
  • 威望144点
  • 贡献值1点
  • 好评度21点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2005-03-24 13:10
关注.
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
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]
Ideas for life!
hasis
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2006-04-03
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
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,应该从理论上没有问题,不知为什么
大学课程加上语文吧,否则在驱网里都不会提问题:)
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
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
Ideas for life!
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
24楼#
发布于:2005-03-22 09:05
我又精减了一下,请各位高手帮助一下啦

请问,我要实现禁止访问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;
}
}
 


这种方法倒是没有用过,不过有一种方法是filemon的方法。
就是替换ZwOpenFile和
ZwCreateFile。
琢磨悟真知
hasis
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2006-04-03
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
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;
}
}
大学课程加上语文吧,否则在驱网里都不会提问题:)
上一页 下一页
游客

返回顶部