failno
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2006-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1461回复:1

有人用xpifs中的sfilter做文件隐藏的么?

楼主#
更多 发布于:2004-07-23 11:03
我在修改sfilter.用的是和大家一样的方法。在IRP_MN_QUERY_DIRECTORY处理例程中设 KEVENT waitEvent,KeInitializeEvent( &waitEvent, NotificationEvent, FALSE )后,IoSetCompletionRoutine(Irp, SfDRControlCompletion, &waitEvent, TRUE, TRUE, TRUE);
在SfDRControlCompletion中,KeSetEvent(event, IO_NO_INCREMENT, FALSE)。
在IRP_MN_QUERY_DIRECTORY处理例程中KeWaitForSingleObject(&waitEvent, Executive, KernelMode, FALSE, NULL),随后调用
HideSpecificFiles( Irp )。

VOID HideSpecificFiles(
      PIRP Irp
      )
{
ULONG len;
ULONG newlen;
PFILE_BOTH_DIR_INFORMATION QueryBuffer = NULL;
PFILE_BOTH_DIR_INFORMATION PreQueryBuffer  = NULL;
PIO_STACK_LOCATION currentIrpStack = NULL;

ULONG offset = 0;

currentIrpStack = IoGetCurrentIrpStackLocation(Irp);
len = currentIrpStack->Parameters.QueryFile.Length;
newlen = len;

QueryBuffer = (PFILE_BOTH_DIR_INFORMATION) Irp->UserBuffer;
PreQueryBuffer = QueryBuffer;

if( !QueryBuffer )
return;

if( QueryBuffer->NextEntryOffset > len )
return;

if( QueryBuffer->NextEntryOffset == 0 )
return;

/* do
{
offset = QueryBuffer->NextEntryOffset;
                     //文件隐藏代码,目前未加入
QueryBuffer = (PFILE_BOTH_DIR_INFORMATION) ( (PUCHAR)QueryBuffer+offset );

}while( 0 != offset );
*/
Irp->IoStatus.Information = newlen;

}
我发现,如果把do...while注释掉,没有问题。
如果do.....while不注释掉,即使不加入文件隐藏代码的部分,
系统能启动,但是用户一旦登陆就会蓝屏。
出错类型是PAGE_FAULT_IN_NONPAGED_AREA(0x50)
不知道有没有人遇到过这种情况。
或者用xpifs中的sfilter做文件隐藏的仁兄们能不能介绍一下你们的情况。
先谢谢!

[编辑 -  7/23/04 by  failno]

[编辑 -  7/23/04 by  failno]

最新喜欢:

lsq77lsq77
failno
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2006-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-27 10:50
问题已解决,
在调用HideFiles之前价格判断:
if( NT_SUCCESS( Irp->IoStatus.Status ) )
{
    //Do something You Would Like Here!
    HideSpecificFiles( Irp );
    //Done
}
else
    break;
游客

返回顶部