ronaldo
驱动小牛
驱动小牛
  • 注册日期2004-12-17
  • 最后登录2011-08-02
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望277点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
阅读:2810回复:5

MINIFILTER中为什么不能在preRead中读写文件

楼主#
更多 发布于:2010-03-02 17:38
我在swapbuffer的preread例程中想读一个文件,为什么总是失败?有人知道吗?
WCHAR                   PipeName[] = L"\\Device\\HarddiskVolume1\\a.txt";
UNICODE_STRING        FullFileName;

RtlInitUnicodeString( &FullFileName, PipeName );
        

        InitializeObjectAttributes ( &ObjectAttributes,
            &FullFileName,
            OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
            NULL,
            NULL );

        ntStatus = FltCreateFile( FltObjects->Filter,
            FltObjects->Instance,
            &f_handle,
            GENERIC_READ|GENERIC_WRITE|SYNCHRONIZE,
            &ObjectAttributes,
            &IoStatus,
            NULL,
            FILE_ATTRIBUTE_NORMAL,
            FILE_SHARE_READ|FILE_SHARE_WRITE,
            FILE_OPEN,
            FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_ALERT,
            NULL,
            0,
            IO_IGNORE_SHARE_ACCESS_CHECK
            );

        if(!NT_SUCCESS(ntStatus))
        {
            sprintf(dbgstr,"FltCreateFile fail status = %X",ntStatus);
            DbgPrint(dbgstr);
            return retValue;
        }
        else
        {
            DbgPrint("open a.txt success");
        }

        ntStatus = ObReferenceObjectByHandle(
            f_handle,                 //Handle
            0,                      //DesiredAccess
            NULL,                   //ObjectType
            KernelMode,             //AccessMode
            &handleFileObject,      //Object
            NULL);                  //HandleInformation


        if(!NT_SUCCESS(ntStatus))
        {
            DbgPrint("ObReferenceObjectByHandle fail");
            return retValue;
        }
        else
        {
            DbgPrint("ObReferenceObjectByHandle success");
        }

        ntStatus = FltReadFile( FltObjects->Instance,
            &handleFileObject,
            &byteOffset,
            256,
            buf,
            FLTFL_IO_OPERATION_DO_NOT_UPDATE_BYTE_OFFSET,
            NULL,
            NULL,
            NULL
            );
        if(NT_SUCCESS(ntStatus))
        {
            sprintf(dbgstr,"read file content = %s",buf);


        }
        else
        {
            DbgPrint("read fail");

        }


        FltClose(f_handle);
space061
驱动牛犊
驱动牛犊
  • 注册日期2005-08-03
  • 最后登录2013-05-29
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望272点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-03-03 09:13
FltCreateFile中把输入参数  FltObjects->Instance 改成 NULL。
ronaldo
驱动小牛
驱动小牛
  • 注册日期2004-12-17
  • 最后登录2011-08-02
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望277点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-03-03 18:02
仍然不行啊
space061
驱动牛犊
驱动牛犊
  • 注册日期2005-08-03
  • 最后登录2013-05-29
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望272点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-03-04 09:20
查查msdn中对FltCreateFile返回值的描述吧
ronaldo
驱动小牛
驱动小牛
  • 注册日期2004-12-17
  • 最后登录2011-08-02
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望277点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-03-04 10:38
返回值是成功的,就是FLTREADFILE总是失败
space061
驱动牛犊
驱动牛犊
  • 注册日期2005-08-03
  • 最后登录2013-05-29
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望272点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-03-05 08:45
改用ZwReadFile
游客

返回顶部