阅读:1958回复:7
filedisk加上加密(else wowocock是否可以回答一下,谢谢)
我按照大师们指导修改了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 ); //lRet = Is_DesDecrypt(buf, //io_stack->Parameters.Read.Length, tmp, keybits); decrypt(buf,io_stack->Parameters.Read.Length); 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); //lRet = Is_DesEncrypt(buf, io_stack->Parameters.Write.Length, tmp, keybits); decrypt(buf,io_stack->Parameters.Write.Length); ZwWriteFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, buf, io_stack->Parameters.Write.Length, &io_stack->Parameters.Write.ByteOffset, NULL ); decrypt(buf,io_stack->Parameters.Write.Length); RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Write.Length); ExFreePool(buf); break; [编辑 - 1/10/04 by strongdisk] |
|
最新喜欢:![]() |
沙发#
发布于:2004-01-13 09:20
我按照大师们指导修改了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 ); //lRet = Is_DesDecrypt(buf, //io_stack->Parameters.Read.Length, tmp, keybits); decrypt(buf,io_stack->Parameters.Read.Length); 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); //lRet = Is_DesEncrypt(buf, io_stack->Parameters.Write.Length, tmp, keybits); decrypt(buf,io_stack->Parameters.Write.Length); ZwWriteFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, buf, io_stack->Parameters.Write.Length, &io_stack->Parameters.Write.ByteOffset, NULL ); decrypt(buf,io_stack->Parameters.Write.Length); RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Write.Length); ExFreePool(buf); break; 这段代码没有什么问题,可能还是你的加密函数有问题,我的驱动也是这么写的,你最好先不要加解密(直接屏蔽掉decrypt函数),看是否出现这种问题,如果没有,你再将你的decrypt改成简单的加密函数,如将每个字符加1的简单加密试一试,如过都没问题,那说明问题就出在你的decrypt函数上,试一试吧 你把写里面的decrypt(buf,io_stack->Parameters.Write.Length); RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Write.Length);代码删掉试一试。 [编辑 - 1/13/04 by li_jie] |
|
板凳#
发布于:2004-01-12 11:34
你把decrypt(pBuf,Len); 用一个空函数替换着试一下,如果没有问题那就是你加密算法的问题了
|
|
地板#
发布于:2004-01-12 11:09
rc4与des不同,加解密是一样的。
第一次调用是加密,第二次调用是解密。 |
|
地下室#
发布于:2004-01-12 09:44
你读写都是decrypt(pBuf,Len); ???
|
|
|
5楼#
发布于:2004-01-12 09:21
如果使用des,如何解决输入数据和输出数据长度不同呢?
rc4 是完全一样的,算法我编写了程序测试过的,一点问题也没有。 |
|
6楼#
发布于:2004-01-12 08:43
你的方法可以,可能是你的加密算法有问题,测试下DES的
|
|
|
7楼#
发布于:2004-01-10 14:27
实在是不知道什么原因。我按照以前else 的员码修改了还是不行
不知道rc4是否可以,我在应用程序中测试过,他加解密是一个函数 第一次调用是加密,第二次是解密。 可是格式化后只有4K可用,我分配了10M,其他显示已经使用了。 大侠是否可以回答一下。是否其他地方还有问题。 case IRP_MJ_READ: pBuf = MmGetSystemAddressForMdl(irp->MdlAddress); Len = io_stack->Parameters.Read.Length; ZwReadFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, pBuf, Len, &io_stack->Parameters.Read.ByteOffset, NULL ); decrypt(pBuf,Len); break; case IRP_MJ_WRITE: pBuf = MmGetSystemAddressForMdl(irp->MdlAddress); Len = io_stack->Parameters.Write.Length; decrypt(pBuf,Len); ZwWriteFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, pBuf, Len, &io_stack->Parameters.Write.ByteOffset, NULL ); decrypt(pBuf,Len); break; decrypt(PVOID pBuf,ULONG Len) { PVOID buf; RC4_KEY key; buf=ExAllocatePool(NonPagedPool,Len); RC4_set_key(&key,16,szKey); RC4(&key,Len,(const unsigned char *)pBuf,(unsigned char *)buf); RtlCopyMemory(pBuf,buf,Len); ExFreePool(buf); } |
|