最近终于搞明白了注册表,我们都知道注册表预定义的主键有五个,分别是
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIGH
KEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
其实注册表就是由一些hive文件组成的,查看注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist,我的是这样
其实五个主键只有HKEY_LOCAL_MACHINE和HKEY_USERS才是真实存在的,我们在注册表编辑器中在这两个主键上新建子项会发现根本不行,因为SAM、SECURITY、SOFTWARE、SYSTEM等子项都是从hive文件加载而来的。
HKEY_CLASSES_ROOT主键其实就是由“HKEY_LOCAL_MACHINE\SOFTWARE\Classes”映射而来,HKEY_CURRENT_CONFIGH是由“HKEY_USERS\当前用户的SID”映射而来,HKEY_CURRENT_CONFIGH主键是由“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\0001”映射而来。
比如我们在HKEY_CLASSES_ROOT新建子项,其实就是在“HKEY_LOCAL_MACHINE\SOFTWARE\Classes”新建子项,我们编辑HKEY_CLASSES_ROOT的内容其实就是在编辑“HKEY_LOCAL_MACHINE\SOFTWARE\Classes”的内容。
我们用注册表编辑器导出注册表其中一个子项,保存类型选择注册表配置单元文件,注册表配置单元文件其实就是hive文件,我们保存为C:\Demo.sav。现在我们想把Demo.sav加载到注册表中HKEY_LOCAL_MACHINE主键下,并且子项名叫做Demo,我们可以这样做。
RegLoadKey(HKEY_LOCAL_MACHINE, "Demo", "C:\\Demo.sav");//需要启用SE_RESTORE_NAME和SE_BACKUP_NAME特权
这样Demo.sav的内容就加载到“HKEY_LOCAL_MACHINE\Demo”下,我们可以像编辑SOFTWARE、SYSTEM子项一样编辑Demo子项,“C:\Demo.sav”的内容和大小将随Demo子项的内容而改变,然后我们想卸载该子项可以这样做。
RegUnLoadKey(HKEY_LOCAL_MACHINE, "Demo");//需要启用SE_RESTORE_NAME和SE_BACKUP_NAME特权
聪明的朋友肯定想到了,如果想让Demo从一开机就加载到HKEY_LOCAL_MACHINE下可以修改注册表,在“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist”下新建REG_SZ类型的值名为“\REGISTRY\MACHINE\Demo”或者“\REGISTRY\USER\Demo”(表示加载到HKEY_USERS主键下),值为“\Device\HarddiskVolume1\Demo.sav”(表示C盘下的Demo.sav文件)。