windows驱动开发 磁盘的虚拟问题

细粉条 2014-08-04 05:36:18
看寒江独钓的windows内核安全编程第5章 磁盘的虚拟,示例代码RamDiskFormatDisk中有:
//由于根目录入口点只使用32字节,但是最少占用一个扇区,这里为了充分利用空间,在用户指定的数目不合适时,会修正这个数目,以使扇区空间得到充分利用。
if (rootDirEntries & (DIR_ENTRIES_PER_SECTOR - 1)) {
rootDirEntries = (rootDirEntries + (DIR_ENTRIES_PER_SECTOR - 1)) &
~ (DIR_ENTRIES_PER_SECTOR - 1);
}
不知道上面两句话是什么意思,不理解。

另外还有一处:
if (fatEntries > 4087) {
fatType = 16;
fatSectorCnt = (fatEntries * 2 + 511) / 512;
fatEntries = fatEntries + fatSectorCnt;
fatSectorCnt = (fatEntries * 2 + 511) / 512;
}
else {
fatType = 12;
fatSectorCnt = (((fatEntries * 3 + 1) / 2) + 511) / 512;
fatEntries = fatEntries + fatSectorCnt;
fatSectorCnt = (((fatEntries * 3 + 1) / 2) + 511) / 512;

}
这是区分FAT12和FAT16,但是红色部分不知道是什么意思。

...全文
143 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lydiadly 2014-08-08
  • 打赏
  • 举报
回复
fatSectorCnt = (fatEntries * 2 + 511) / 512; fatEntries = fatEntries + fatSectorCnt; fatSectorCnt = (fatEntries * 2 + 511) / 512; fatEntries是FAT的表项数目,FAT16表项用16位表示索引值,是2个字节,fatSectorCnt 是FAT所用的扇区数,一个扇区是512字节,+511再 /512就是向上取整,不满一个扇区也算一个扇区 FAT12是同样道理,不过用12位表示索引
orpheus19890425 2014-08-07
  • 打赏
  • 举报
回复
赞一个。。。。。。。。。。。。
细粉条 2014-08-05
  • 打赏
  • 举报
回复
up.................
赵4老师 2014-08-05
  • 打赏
  • 举报
回复
FAT16:*2,fatEntries每项占两个字节,(...+511)/512除512向上取整 FAT12:(...*3+1)/2,fatEntries每项占3/2=1.5个字节,*3除2向上取整,(...+511)/512除512向上取整 计算fatEntries在第 fatSectorCnt 扇区(每扇区512字节)
细粉条 2014-08-05
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
FAT的分配表项就是这么约定的。
那这句话什么意思? if (rootDirEntries & (DIR_ENTRIES_PER_SECTOR - 1)) { rootDirEntries = (rootDirEntries + (DIR_ENTRIES_PER_SECTOR - 1)) & ~ (DIR_ENTRIES_PER_SECTOR - 1); } 另外 if (fatEntries > 4087) { fatType = 16; fatSectorCnt = (fatEntries * 2 + 511) / 512; fatEntries = fatEntries + fatSectorCnt; fatSectorCnt = (fatEntries * 2 + 511) / 512; } else { fatType = 12; fatSectorCnt = (((fatEntries * 3 + 1) / 2) + 511) / 512; fatEntries = fatEntries + fatSectorCnt; fatSectorCnt = (((fatEntries * 3 + 1) / 2) + 511) / 512; } 这是计算什么呢,什么乘以2啊,乘以3啊,不懂啊
赵4老师 2014-08-05
  • 打赏
  • 举报
回复
FAT的分配表项就是这么约定的。
loong0306 2014-08-04
  • 打赏
  • 举报
回复
红色的看起来像精确度。 个人想法,不知道对否。
本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与Windows客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从32位到64位,从Windows XP到Windows 8都有涉及,大部分程序不经过修改即可在Windows 10上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。 本书共分三篇,基础篇囊括了驱动开发的基础知识,降低了入门的难度;开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘虚拟磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows过滤平台、NDIS协议驱动、NDIS小端口驱动、NDIS中间层驱动、IA-32汇编基础、IA-32体系中的内存地址、处理器权限级别切换、IA-32体系结构中的中断和Windows内核挂钩;高级篇包含了汇编语言、操作系统原理、处理器体系架构相关的内容。本书是由长期从事这个行业的工程师自己写的,所以处处以实用为准。对细节的考究主要体现在对实际问题的解决,而不是知识的详尽程度上。 本书适合计算机安全软件从业人员、计算机相关专业院校学生以及有一定C语言和操作系统基础知识的编程爱好者阅读。
本书的前身是《天书夜读——从汇编语言到Windows内核编程》和《寒江独钓——Windows内核安全编程》。与Windows客户端安全软件开发相关的驱动程序开发是本书的主题。书中的程序使用环境从32位到64位,从Windows XP到Windows 8都有涉及,大部分程序不经过修改即可在Windows 10上运行。同时本书也深入浅出地介绍了进行内核安全编程所需要的操作系统、汇编等基础知识。 本书共分三篇,基础篇囊括了驱动开发的基础知识,降低了入门的难度;开发篇介绍了在实际工作中可能遇到的各种开发需求的技术实现,包括:串口的过滤、键盘的过滤、磁盘虚拟磁盘的过滤、文件系统的过滤与监控、文件系统透明加密、文件系统微过滤驱动、网络传输层过滤、Windows过滤平台、NDIS协议驱动、NDIS小端口驱动、NDIS中间层驱动、IA-32汇编基础、IA-32体系中的内存地址、处理器权限级别切换、IA-32体系结构中的中断和Windows内核挂钩;高级篇包含了汇编语言、操作系统原理、处理器体系架构相关的内容。本书是由长期从事这个行业的工程师自己写的,所以处处以实用为准。对细节的考究主要体现在对实际问题的解决,而不是知识的详尽程度上。 本书适合计算机安全软件从业人员、计算机相关专业院校学生以及有一定C语言和操作系统基础知识的编程爱好者阅读。

18,124

社区成员

发帖
与我相关
我的任务
社区描述
Windows客户端使用相关问题交流社区
社区管理员
  • Windows客户端使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧