《Windows内核安全与驱动编程》-第九章-磁盘的虚拟-day-3.md

磁盘的虚拟

9.5 FAT12/16 磁盘卷初始化

9.5.2 Ramdisk 对磁盘的初始化

​ 在上一节中说到,在 Ramdisk 驱动中的 EvtDriverDeviceAdd 类函数里会调用 RamDiskFormatDisk 函数对所分配的用于做磁盘镜像的内存空间进行初始化。上一小节介绍了磁盘卷结构,接下来学习如何初始化这个空间。

​ 首先看一下这个函数的本地变量声名。

//一个指向磁盘启动扇区的指针
PBOOT_SECTOR bootSector = (PBOOT_SECTOR) devExt->DiskImage;
//指向FAT第一个FAT表的指针
PUCHAR		firstFatSector;
//用于记录有多少个根目录日寇点
ULONG rootDirEntries;
//用于记录每个簇由多少扇区组成
ULONG sectorsPerCluster;
//用于记录FAT文件系统的类型,是FAT12 还是16
USHORT fatType;
//用于记录在FAT表里一共有多少个表项
USHORT fatEntries;
//用于记录一个FAT表需要占用多少个扇区来存储
USHORT fatSectorCnt;
//用于指向第一个根目录入口点
PDIR_ENTRY rootDir;
//用于确定这个函数是可以存取分页内存的
PAGED_CODE();
//用于确定这个盘的引导扇区的大小确实是一个扇区大小
ASSERT(sizeof(BOOT_SECTOR)) == 512);
//用于确定我们操作的磁盘不是一个不可用的指针
ASSERT(devExt->DiskImage != NULL);
//清空磁盘镜像
RtlZeroMemory(devExt->DiskImage,devExt->DiskRegInfo.DiskSize);

​ 接下来格式化磁盘设备的设备扩展里的数据结构 DiskGeometry 。它保存着与磁盘物理结构相关的信息。这个数据结构是 WinDDK 所定义好的,几乎适用于所有磁盘。

typedef struce _DISK_GEOMETRY{
   
    //有多少个柱面
    LARGE_INTEGER Cylinders;
    //磁盘介质的类型
    MEDIA_TYPE MediaType;
    //每个柱面有多少磁道,也就是有多少个盘片
    ULONG TracksPerCylinder;
    //每个磁道有多少扇区
    ULONG SectorsPerTrack;
    //每个扇区有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值