What Happens to File Systems During System Boot
系统引导过程中,文件系统被初始化;特别是在I/O系统初始化过程中。I/O manager建立global file system queue以及初始化被OS loader和PnP Manager加载的文件系统filter driver。
system (OS) loader and the PnP Manager.
Following is a summary of selected portions of the system boot process that are of interest to file system and filter driver developers.
1 系统boot过程中,OS loader在其转换 控制 到内核之前加载boot file system、RAW file system、以及所有SERVICE_BOOT_START类型的驱动程序,当内核获得控制权的时候这些driver已在内存当中了。
Driver被按照在load order groups中被指定的顺序加载。在文件系统filter中,那些被一个新的文件系统filter driver load order groups指定的filter被先于其他的filter driver加载。关于这些load order groups详细描述,见File System Filter Driver Load Order Groups。
接下来(then),所有在load order group中指定的filter 被load。 注意:“filter” groups还包括storage filter而不仅仅是文件系统filter,而且,还包括第三方的filter driver而不仅仅指build-in(内建)的filter driver。
2 IO Manager 创建一个有4个segment的全局文件系统队列:CD-ROM,disk,tape以及network file system各一个。以后,当每个文件系统被注册时,他们的Controld device object被添加到相应的队列的segment中。然而,至此,还没有文件系统被注册,所以这个对列是空的。PnP Manager呼叫所有SERVICE_BOOT_START类型drivers和RAW file system的DriverEntry例程。如果有SERVICE_BOOT_START 类型的driver需要依赖其他的drivers,最好是这些被依赖的drivers已经被加载并启动了。
3 PnP manager通过呼叫boot device driver的AddDevice例程来启动boot device,如果一个boot device还有子device的话,这些子device会被枚举。假如这些子devices是boot-start类型driver的,他们也会被配置并启动。如果一个设备的驱动程序并不是所有都是boot-start类型的,PnP Manager就会为这个设备创建一个devnode,但并不启动它.
至此,所有的boot driver被加载,boot device被启动。
4 PnP manager检查PnP device tree 发现并加载每个与 devnode 相关联但还没有运行的driver,当每个PnP Device启动后,PnP manager枚举该设备的子设备。PnP Manager配置这些子设备,configures the child devices, 加载他们的设备驱动程序,并启动他们。
PnP Manager加载每个设备的驱动程序并不去管这些driver的Starttype,loadordergroup或者依赖的values。在这一步骤中,PnP manager只配置和启动能被枚举到的device。如果一个设备不能被枚举,PnP Manager将忽略这些设备而且不会再去枚举他们的子设备,尽管他们的子设备能够被PnP枚举到。
5 PnP Manager加载并初始化那些至此还没被加载的SERVICE_SYSTEM_START类型的驱动程序。FsRec就是在此时被加载的。注意,尽管FsRec是在“boot file system”load order group中, FsRec却不是boot file system,实际的引导文件系统是被mounted到boot volume的文件系统。该文件系统在引导过程中被加载。
以后,在SERVICE_SYSTEM_START阶段,那些在”file system“load order group中的文件系统被load,他们包括命名管道文件系统(NPFS)和邮槽文件系统(MSFS),但不包括任何介质类型的文件系统,诸如NTFS,FAT,CDFS,UDFS.
网络文件系统处于“netword” load order group中,也是在这个阶段被load。
6 在所有引导时被加载的驱动程序被初始化后,IO Manager呼叫所有driver都拥有的reinitialization 例程。reinitialization 例程是一个被boot driver注册的callback例程,一个需要在引导过程中的这个地方被附加的处理. Reinitialization通过调用 IoRegisterBootDriverReinitialization or IoRegisterDriverReinitialization来注册。
7 The service Control Manager加载已经被加载的SERVICE_AUTO_START类型的驱动程序。
File System Recognizer(文件系统识别器)
系统引导后,所有被attach到系统的volume的storage device driver被加载并启动,然而,并不是所有的内建的文件系统被加载了,也不是所
有的文件系统volume被mounted了。FsRec执行这些任务还需要处理IRP_MJ_CREATE请求。FsRec在系统启动过程中的SERVICE_SYSTEM_START被加
载,注意,虽然FsRec是在“Boot File System”load order group中,然而,FsRec并不是boot File system,实际的boot file system却是
在引导过程中被加载的文件系统mounted的boot file ststem