huangyehui
驱动牛犊
驱动牛犊
  • 注册日期2008-03-13
  • 最后登录2008-05-12
  • 粉丝0
  • 关注0
  • 积分270分
  • 威望28点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
阅读:1624回复:1

求助:基于filedisk数据流的加解密问题

楼主#
更多 发布于:2008-04-20 23:04
  实现目的:对filedisk虚拟出的磁盘写入数据加一。
  源代码如下:
     case IRP_MJ_WRITE:
               。。。。。。。。。。。。。。
               ///////////////开始加密/////////////////////
            
                    buffertest = (PUCHAR) ExAllocatePool(PagedPool, io_stack->Parameters.Read.Length);
                    memcpy(buffertest,
                          (PUCHAR)MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority),  io_stack->Parameters.Read.Length);
                    tarray=buffertest;
                    for(i=0;i<io_stack->Parameters.Read.Length;i++)
                    {
                        tarray=tarray+1;
                    }                              
RtlCopyMemory((PUCHAR)MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority),tarray,io_stack->Parameters.Read.Length);
                ZwWriteFile(
                    device_extension->file_handle,
                    NULL,
                    NULL,
                    NULL,
                    &irp->IoStatus,                   (PUCHAR)MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority),
                    io_stack->Parameters.Write.Length,
                    &io_stack->Parameters.Write.ByteOffset,
                    NULL
                    );




   改了之后,打开虚拟磁盘,新建文本文件,写入保存。就会出现很多乱七八糟的文件。写入的数字也没加一。如果把io_stack->Parameters.Read.Length改成8,就不会出现上述情况,写入数据后自动加了一。不过会生成一个.com文件,文件名也是乱码。
     请教各位大侠,到底什么哪个地方出了问题? 是否MDL中还带有文件的信息,并不单纯是数据,是不是应该修改Mdladress->StartVa?
  
hunter10
驱动牛犊
驱动牛犊
  • 注册日期2009-03-27
  • 最后登录2010-03-29
  • 粉丝2
  • 关注0
  • 积分26分
  • 威望251点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-10-28 20:04
修改Mdladress->StartVa试一下
游客

返回顶部