Hive-based Registry Initialization (Windows CE 5.0)
The following steps show the process that Filesys.exe uses to initialize the hive-based registry.
Filesys.exe calls OEMIoControl with IOCTL_HAL_GETREGSECUREKEYS two times. The first call is a query to find out the required data buffer size. The second call is a query to get the buffer of secure key data. For more information, see Requesting Additional Secure Registry Keys.
Filesys.exe mounts the boot hive (Boot.hv) from ROM. The boot hive contains the information that Filesys.exe needs to determine where the registry is stored and to start the drivers that are required to access it.
Filesys.exe calls OEMIoControl with IOCTL IOCTL_HAL_INITREGISTRY, to give the OAL a chance to add data to the registry early in the boot process.
Filesys.exe creates named events for all event names in the HKEY_LOCAL_MACHINE\System\Events registry location in the boot hive. These events are set by the processes that own them. For more information, see Ready-Event Registration.
Filesys.exe loads the Storage Manager if HKEY_LOCAL_MACHINE\System\StorageManager points to a loadable DLL. Filesys.exe creates a thread to initialize the Storage Manager. The thread will exit when initialization is complete.
If the Flags value is set to 1 or 4, Filesys.exe starts boot phase 0. For more information about boot phases, see Boot Phases.
The system locale is initialized.
If the Flags value is set to 1 or 4, Filesys.exe starts boot phase 1. For more information about boot phases, see Boot Phases.
If the Flags value is set to 2 or 8, Filesys.exe starts Device.exe.
Filesys.exe creates an event called "SYSTEM/BootPhase2", which is triggered when the file system containing the system registry is loaded. For versions of Windows CE earlier that 5.0, this file system is identified by the
"MountFlags"=2
bitmask in its Storage Manager profile. For Windows CE 5.0 and later, this file system is identified by"MountAsBootable"=dword:1
in the Storage Manager profile.Filesys.exe waits for a file system to register as the storage location for registry hives.
If the registry hives are not being stored on a file system, Filesys.exe calls OEMIoControl with IOCTL_HAL_GET_HIVE_RAM_REGION to find out if the registry data should be stored in a reserved area of RAM, instead of in a file.
Filesys.exe mounts the ROM portion of the system registry, Default.hv.
Filesys.exe calls OEMIoControl with with IOCTL_HAL_GET_HIVE_CLEAN_FLAG and the HIVECLEANFLAG_SYSTEM flag to determine whether the OAL indicates that the system hive should be cleaned and recreated with data from ROM.
If a clean registry is not required, the system registry hive file (System.hv) is loaded from the file system that contains it. A signature in the system hive file is checked against a signature in the ROM portion of the system registry. If the signatures do not match, then a clean registry is required, even if this is not indicated by IOCTL_HAL_GET_HIVE_CLEAN_FLAG.
If a clean registry is required, the old registry hive file is deleted and a new hive file is created.
Filesys.exe invalidates any currently open system registry handles before swapping out the boot registry hive.
Filesys.exe migrates the changes from the boot registry hive to the system hive.
If the boot is not a clean boot, Filesys.exe sets the registry value RegPersisted under HKEY_LOCAL_MACHINE to 1. At this point, non-user specific registry data becomes available.
Filesys.exe determines where the user profiles are stored by looking at the registry value ProfileDir under HKEY_LOCAL_MACHINE\init\BootVars.
Filesys.exe calls OEMIoControl with IOCTL_HAL_GET_HIVE_CLEAN_FLAG and the HIVECLEANFLAG_USERS flag, to determine whether the OAL indicates that the user profiles should be cleaned. If so, all user profile directories are removed, along with their contents.
Filesys.exe determines if the default user profile should be loaded. If the registry value NoDefaultUser under HKEY_LOCAL_MACHINE\init\BootVars is set to 1, a call to SetCurrentUser is required to load a user profile. If NoDefaultUser is set to 0, the default user profile is loaded.
The name of the default user is determined by the value of DefaultUser, a REG_SZ value, in HKEY_LOCAL_MACHINE\init\BootVars. The DefaultUser is set to the name of the user to use as the default profile when the system boots. If it is an existing user, the appropriate user hive is loaded. If it is a new user, the user profile can be created. If DefaultUser is not set, a user by the name "default" is loaded. You can choose a default user name with the following registry key.
[HKEY_LOCAL_MACHINE\init\BootVars] "DefaultUser"=<username>
When Filesys.exe loads the user registry, it performs the following actions:
- Mounts the ROM portion of the user registry hive from the User.hv file in ROM.
- Mounts the remaining portion of the user registry hive from the User.hv file in the user profile directory on the persistent file system.
- A signature in the user hive file is checked against a signature in the ROM portion of the user registry. If the signatures do not match, then a clean registry is required. The User.hv file in the user profile directory is deleted and a new hive file is created. No other files in the user profile directory are affected.
- If the user registry is not clean, Filesys.exe sets the registry value RegPersisted under HKEY_CURRENT_USER to 1.
See Also
Filesys.exe Boot Process | RAM-based Registry Initialization
Send Feedback on this topic to the authors