驱动牛犊
![]() |
阅读:1561回复:8
请教一问题,关于做虚拟加密的盘的
这样一种情况,做一个盘,设盘符加载后为H: 实际对应的文件是C:\image.xyz
那么复制C:\abc.txt 到H:中, 实际写文件时会用到什么函数? 读取H:\abc.txt呢? 删除H:\abc.txt呢?对应的image.xyz怎么可以缩小的? 主要是想了解实际image.xyz在整个过程中是如何变化的,假如我们设一开始创建的image.xyz为0KB. 谁能说出最最细节的东西? |
驱动牛犊
![]() |
沙发#
发布于:2008-03-14 00:22
实际上我就是对一个问题不太理解,就是应用层(也就是用户看到的显示层),我们的驱动,实际对应的镜像文件三者之间的关系。
你看, 1.应用层要显示出文件目录来, 2.那么他去向我们的驱动要, 3.我们的驱动去读实际的比如iso文件。 1->2 这一步发了一个irp请求, 2->3 是不是也发一个irp请求? 反过来想, 3->2 我们应该取到最最原始的字节,没有文件与目录之分?2->1 因为有加密,我们先进行解密,传给显示层,显示层根据情况显示出相应的文件图标和名称等等。问题是,是不是这样进行的?filedisk中好象没有针对iso文件的实际操作呀,但好象各项操作都正常了呀,难道对iso文件和管理的所有细节节不都是我们应该管理的吗,除了我们知道该干什么,系统也不知道呀,但好像没见有针对iso文件组织管理的代码?有点晕 大侠们能帮我理一下思路吗? |
板凳#
发布于:2008-03-14 11:01
建议你取读读filedisk代码,里面写的很清楚
|
|
驱动牛犊
![]() |
地板#
发布于:2008-03-14 13:35
filedisk编译出错
-------------------------------------------------- c:\WINDDK\2600\inc\ddk\wxp\ntddk.h(10603): error C2061: syntax error : identifier 'PCONTEXT' c:\WINDDK\2600\inc\ddk\wxp\ntddk.h(10604): error C2059: syntax error : '}' c:\WINDDK\2600\inc\ddk\wxp\ntddk.h(11546): fatal error C1189: #error : "no target architecture" |
驱动牛犊
![]() |
地下室#
发布于:2008-03-14 14:43
到此我已经看到filedisk读写文件的操作了,他用了ZwReadFile来操作,指定了偏移量和长度,比如打开一个H:/Abc/abc.txt的文件,那么倒是可以理解能读到abc.txt,但是目录结构的信息没有暴露出来,那怎么知道应该读abc.img的那个位置开始是abc.txt呢?本段代码中 device_extension->file_handle, 是指abc.img还是指abc.txt?
switch (io_stack->MajorFunction) { case IRP_MJ_READ: // 对于读,我直接读文件即可 ZwReadFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority), io_stack->Parameters.Read.Length, &io_stack->Parameters.Read.ByteOffset, NULL ); break; case IRP_MJ_WRITE: // 写也是与之类似的。 if ((io_stack->Parameters.Write.ByteOffset.QuadPart + io_stack->Parameters.Write.Length) > device_extension->file_information.AllocationSize.QuadPart) { irp->IoStatus.Status = STATUS_INVALID_PARAMETER; irp->IoStatus.Information = 0; } ZwWriteFile( device_extension->file_handle, NULL, NULL, NULL, &irp->IoStatus, MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority), io_stack->Parameters.Write.Length, &io_stack->Parameters.Write.ByteOffset, NULL ); break; }; |
5楼#
发布于:2008-03-16 00:16
你的理解错了,上面代码是filedisk核心层代码。 它所涉及到的读写是对你的img文件的读写。是底层的东西。 device_extension->file_handle是对img而言的
真正虚拟过程是应用层代码。 |
|
驱动牛犊
![]() |
6楼#
发布于:2008-03-16 00:58
非常非常感谢,应用层代码我也有读了,但可能还没有消化,所以发生了读了前面忘了后面的问题。现在有点进展,换了一个window2000的DDK,差不多能编译过去,但又报链接错误,
filedisk error LNK2019: unresolved external symbol __imp__KeSetEvent referenced in function _FileDiskCreateDevice 但这个函数明明是在C:\NTDDK\libchk\i386\wdm.lib中的,我也加入到工程中去了,但还是不行 |
驱动牛犊
![]() |
7楼#
发布于:2008-03-16 01:00
请求高手加我,MSN:ChineseAlexander@hotmail.com QQ:59339639 实在是不行了
|
驱动牛犊
![]() |
8楼#
发布于:2008-03-16 01:03
|