flywithlove
驱动小牛
驱动小牛
  • 注册日期2002-11-05
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望18点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
阅读:1682回复:5

vcmfc斑竹请进!

楼主#
更多 发布于:2003-05-04 21:40
Hi,vcmfc!
想和你聊一下驱动开发技术
最近正在做虚拟磁盘的加密解密,基于filedisk程序的。  

case IRP_MJ_READ:
CurrentAddress = MmGetSystemAddressForMdlSafe(irp-  >  MdlAddress, NormalPagePriority);
buf=ExAllocatePool(NonPagedPool,io_stack->Parameters.Read.Length);

        ZwReadFile(
                    device_extension->file_handle,
                    NULL,
                    NULL,
                    NULL,
                    &irp->IoStatus,
                    buf,
                    io_stack->Parameters.Read.Length,
                    &io_stack->Parameters.Read.ByteOffset,
                    NULL
                    );

iModel = io_stack->Parameters.Read.Length%8; //求余数
iOK = io_stack->Parameters.Read.Length/8; //求整除

tmp = buf;
for(i=0;i<iOK;i++)
{
   for(j=0;j<4;j++)
{
tmpchar = tmp[j];
tmp[j] = tmp[7-j];
tmp[7-j] = tmpchar;
}
tmp += 8;
}

//lRet = Is_DesDecrypt(buf,
io_stack->Parameters.Read.Length, tmp, keybits);

RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Read.Length);

ExFreePool(buf);
break;



case IRP_MJ_WRITE:
if ((io_stack->Parameters.Write.ByteOffset.QuadPart +
                     io_stack->Parameters.Write.Length) >
                     device_extension->file_size.QuadPart)
{
 
irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
 irp->IoStatus.Information = 0;
}

CurrentAddress = MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority);


buf=ExAllocatePool(NonPagedPool,io_stack->Parameters.Write.Length);

RtlCopyMemory(buf,CurrentAddress,io_stack->Parameters.Write.Length);

iModel = io_stack->Parameters.Write.Length%8; //求余数
iOK = io_stack->Parameters.Write.Length/8; //求整除

tmp = buf;

for(i=0;i<iOK;i++)
{
  for(j=0;j<4;j++)
  {
   tmpchar = tmp[j];
   tmp[j] = tmp[7-j];
   tmp[7-j] = tmpchar;
  }
  tmp += 8;
}

//lRet = Is_DesEncrypt(buf, io_stack->Parameters.Write.Length, tmp, keybits);


       ZwWriteFile(
                    device_extension->file_handle,
                    NULL,
                    NULL,
                    NULL,
                    &irp->IoStatus,
                    buf,
                    io_stack->Parameters.Write.Length,
                    &io_stack->Parameters.Write.ByteOffset,
                    NULL
                    );
ExFreePool(buf);
break;


我一开始是用很简单的加密方法(调换位置),然后就用函数Is_DesEncrypt进行加密(被注释掉了,基于des算法,在其它地方使用一切正常),这时候系统就崩溃了,想请问一下是不是des算法不能直接嵌入到驱动层(应用层没有问题)。

最新喜欢:

cyliucyliu
痛并快乐着!
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-05 05:03


一般加密算法是不需要太多的修改,有的可能要调整一下。如果内核能行的话,该没有问题呀!!!


声明:本人非版主................... :D


现在还有人在线????
fuq_dddd
驱动老牛
驱动老牛
  • 注册日期2002-10-15
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分331分
  • 威望57点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-03 02:28
问题解决很简单,就是在写入数据的时候,
数据在写入之前加密,执行Write后,数据要解密

但为什么一直没有搞明白,如果你弄明白了讲解一下

不知道能给多少分
星星之火 可以燎原 每一个光亮 都可能是黎明 [img]http://joke.tom.com/img/assets/1/gaoxiao_80_910.gif[/img]
flywithlove
驱动小牛
驱动小牛
  • 注册日期2002-11-05
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望18点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-03 09:20
很奇怪,最后换了加密解密算法就ok了 :)
痛并快乐着!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-06 17:03
des太慢
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
wang1203
驱动牛犊
驱动牛犊
  • 注册日期2004-08-06
  • 最后登录2004-09-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-06 18:31
很奇怪,最后换了加密解密算法就ok了 :)


请问你最后用的什么算法?
我也在做这个,能给代码参考一下子吗
my mail: wangdaokou@163.com
游客

返回顶部