abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:3818回复:3

MiniFilter中 precleanup 中FltCreateFile , FltWriteFile 死锁 (tooflat大牛来看下)

楼主#
更多 发布于:2008-11-19 09:32
我把Sfilter的加密代码移植到MiniFilter框架上. 现在在加尾的地方卡住了.

1. precleanup中 或 postclose中 FltCreateFile 在vista系统发生死锁. xp系统下正常.

2. precleanup中 FltWritedfile   NoCache写尾时,在vista系统发生死锁. xp系统下正常.

3. precleanup中 PagintIo写尾 FltSetFileInformatione 时,在vista系统发生死锁.

4. 想通过发IRP的方法,但无法得到下层设备.

要如何解决这个死锁问题呢?
驱网无线,快乐无限
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2008-11-19 09:35
{
NTSTATUS status;
PDEVICE_OBJECT pFltDevObj=NULL,pFsdDevObj=NULL;
LARGE_INTEGER off,len;
status=FltGetDeviceObject(FltObjects->Volume,&pFltDevObj);
if (NT_SUCCESS(status))
{
    pFsdDevObj=IoGetDeviceAttachmentBaseRef(pFltDevObj);
    if (pFsdDevObj!=NULL)
    {
        off.LowPart=0x0;
        off.HighPart=0x40000000;
        len.LowPart=0x100;
        len.HighPart=0x0;
        status = HelpFunc_Lock(IRP_MJ_LOCK_CONTROL,IRP_MN_LOCK,
                        FltObjects->FileObject,pFsdDevObj,off,len);
            ObDereferenceObject(pFsdDevObj);
        }
        else
        {
            status=STATUS_UNSUCCESSFUL;
        }
        ObDereferenceObject(pFltDevObj);
    }
    return status;
}

使用底层的 DeviceObject可以发irp请求到文件长度,但无法发irp 读取数据..
驱网无线,快乐无限
abc13271552
驱动小牛
驱动小牛
  • 注册日期2007-08-13
  • 最后登录2023-12-05
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望552点
  • 贡献值0点
  • 好评度160点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2008-11-19 09:37
我在网上看到将 FltWriteFile 同步写形式改写成异步形式写. 不过这样安全吗?
驱网无线,快乐无限
fefrsh
驱动牛犊
驱动牛犊
  • 注册日期2009-03-24
  • 最后登录2011-09-06
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-11-16 14:49
弄了半天是老帖,编辑了
游客

返回顶部