注册表


六大根键


注册表中的信息, 可以分为HKEY_LOCAL_MACHINE和HKEY_USERS两大类:

HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的信息都是HKEY_LOCAL_MACHINE中存放的信息的一部分,

HKEY_CURRENT_USER中存放的信息只是HKEY_USERS存放的信息的一部分。


注册表采用“关键字”及其“键值”来描述登录项及其数据。所有的关键字都是以“HKEY”作为前缀开头。

  •  HKEY_LOCAL_MACHINE - 该计算机(对于任何用户)的配置信息(硬件和软件)

包括:Config配置、Driver驱动程序、Enum即插即用、Hardware硬件、Network网络、Security安全、Software软件、System系统。

  • HKEY_USERS - 用户设置(用户标识和密码等)

  包含计算机上所有用户的配置文件的根目录。HKEY_CURRENT_USER 是 HKEY_USERS 的子项。

  每个用户的预配置信息都存储在HKEY_USERS根键中。HKEY_USERS是远程计算机中访问的根键之一。其内容取决于计算机是否激活了用户配置文件:

  •  
    • 若未激活用户配置文件,则可以看到称为.DEFAULT的单一子键,该子键包括和所有用户相关的各种设置,并且和\Windows下的USER.DAT文件相配合。
    • 若激活了用户配置文件并且正确地执行了登录,则还有一个“用户名”的子键,该用户名为用户登录的名称。

 

  • HKEY_CURRENT_USER - 当前登录的用户信息

  下面有7个子关键字。其中除RemoteAccess”外,其余6个都为系统预定义。

AppEvents 这个子键里登记已注册的各种应用事件。

ControlPanel 它里面涉及到控制面板设置有关的内容。

InstallLocationsMRU windows安装路径的有关信息。

Keyboardlayout 关于键盘设置的信息。

Network 有关网络设置的信息。

RemoteAccess 安装IE 时建立的子关键字,包含该应用程序的有关信息。

Software 软件的有关信息。

  • HKEY_CURRENT_CONFIG - 在系统启动时所用的硬件配置文件信息

    存放着定义当前用户桌面配置(如显示器等)的数据,最后使用的文档列表(MRU)和其他有关当前用户的安装信息。

  • HKEY_CLASSES_ROOT

  HKEY_LOCAL_MACHINE\Software 的子项。此处存储的信息可以确保当使用 Windows 资源管理器打开文件时,将打开正确的程序

  多个子键组成,具体可分为两种:

一种是已经注册的各类文件的扩展名,另一种是各种文件类型的有关信息。左栏中的子键就是各种已经注册的文件扩展名。注册表内己经登记的文件扩展名中,有系统默认和应用程序自定义的扩展名。应用程序只有把自定义的扩展名在注册表中登记,系统才能识别和关联使用有关的文档,但只有经过注册的扩展名,系统才能自动关联。根据在Windows 98中文版中安装的应用程序的扩展名,该根键指明其文件类型的名称。

在第一次安装Windows 98中文版时,RTF(Rich TextFormat)文件与写字板(WordPad)联系起来,但在以后安装了中文Word6.0后,双击一个RTF文件时,将自动激活Word。存放在SYSTEM.DAT中的HKEY_CLASSES_ROOT,将替代WIN.INI文件中的[Extensions]小节中的设置项,它把应用程序与文件扩展名联系起来,它也替代了Windows3.x中的Reg.dat文件中的相似的设置项。

  • HKEY_DYN_DATA

  存放了系统在运行时动态数据,此数据在每次显示时都是变化的,因此,此根键下的信息没有放在注册表中。

 

注册表的角色

 

当你用用户模式的Win32API函数访问注册表时,可以用HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE等等的预定义句柄常量代表顶级注册表键。注册表编辑器REGEDIT.EXE也使用这些预定义常量。你还可以用缩写HKCR、HKCU、HKLM代替它们。即HKCR是HKLM\Software\Classes的别名,HKCU是HKEY_USER的某个子键的别名,这两个别名所代表的具体键值要取决于被处理的具体情况。

在内核模式中,你应使用另一种基于内核命名空间的命名方案。在这种命名方案中,顶级键命名为\Registry\User和\Registry\Machine。Machine分支就是用户模式中的HKLM分支,在这里你可以找到与设备驱动程序相关的所有信息。除非另有所指,否则你应该假定本文中所引用的注册表键都在\Registry\Machine中。

 

有三种注册表键负责配置。

硬件(hardware)键 - 包含单个设备的信息

类(class)键 - 涉及所有相同类型设备的共同信息;

服务(service)键 - 包含驱动程序信息;

 硬件(hardware)键 - 包含单个设备的信息

出现在注册表local machine分支的\System\CurrentControlSet\Enum子键上。通常你不能查看到该键的内部信息,系统只允许拥有系统帐号的用户访问该键。即只有内核模式程序和运行在系统帐号下的用户模式服务可以读写Enum键和其子键。

Enum键下的第一级子键与系统中的各种总线枚举器相对应。例如,\Enum\USB子键中包含了所有以前用过和现在存在的USB设备的描述。

硬件键中的某些键值提供的描述性信息可以被象设备管理器这样的用户模式部件所使用。

从用户模式中访问设备键

应用程序经常需要访问注册表中关于硬件设备的信息。为了使这成为可能而同时又不暴露重要的Enum键,Microsoft提供了一组SetupDiXxx函数。

假设你的驱动程序使用IoRegisterDeviceInterface函数寄存了一个设备接口,并且你有一个该接口的符号连接名(通过枚举该接口GUID的所有实例或者从WM_DEVICECHANGE消息的参数中获得这个名字)。为了从硬件键中获得Manufacturer名字,你可以使用下面代码:

ContractedBlock.gifExpandedBlockStart.gifCode
#include <setupapi.h>
dot.gif
LPTSTR lpszDeviceName;
HDEVINFO info 
= SetupDiCreateDeviceInfoList(NULL, NULL);
SP_DEVICE_INTERFACE_DATA ifdata 
= {sizeof(SP_DEVICE_INTERFACE_DATA)};
SetupDiOpenDeviceInterface(info, lpszDeviceName, 
0&ifdata);
SP_DEVINFO_DATA did 
= {sizeof(SP_DEVINFO_DATA)};
SetupDiGetDeviceInterfaceDetail(info, 
&ifdata, NULL, 0, NULL, &did);
TCHAR buffer[
256];
SetupDiGetDeviceRegistryProperty(info,
                 
&did,
                 SPDRP_MFG,
                 NULL,
                 (PBYTE) mfgname,
                 
sizeof(mfgname),
                 NULL);
SetupDiDestroyDeviceInfoList(info);

 

lpszDeviceName是一个象“USB\Vid_0547&Pid_102A\7&2”一样的串。

硬件键还包含几个标识设备所属类和驱动程序的值。

ClassGUID是设备类GUID(全局唯一标识符)的ASCII形式;在效果上,它是一个指向该设备类键的指针。

Service指向服务键。可选值LowerFiltersUpperFilters分别标识低层过滤器和高层过滤器的服务名。

还可以有名为SecurityExclusiveDeviceType、和DeviceCharacteristics的超越值,这四种值强制驱动程序创建有某种属性的设备对象。

硬件键中的大部分值是在安装过程中自动填入的,或者在安装开始后的某个时刻,系统识别出了新硬件(或者经由硬件安装向导)并由系统自动填入的。有些值是由于INF(硬件安装文件)中曾指明要放入这里的。

 类(class)键 - 涉及所有相同类型设备的共同信息

在HKLM\System\CurrentControlSet\Control\Class键中。它们的键名是由Microsoft赋予的GUID值。

每个设备还可以,在所属类键下拥有自己的子键。该键的键名就是设备硬件键中的Driver值。这个子键的作用是把所有这些注册表项与安装设备使用的INF文件相关联。

 服务(service)键 - 包含驱动程序信息

 位于HKLM\System\CurrentControlSet\Services键中。它指出驱动程序执行文件的位置,以及控制驱动程序装入的一些参数。

 服务键的内容在平台SDK的“Service Install”中有详尽描述,因此我不想再重述。例如可能有下面的值:

  • ImagePath 指出驱动程序执行文件为USB42.SYS,路径为%SystemRoot%\system32\drivers,注意这个路径名起始于系统根目录。
  • Type(1) 指出该表项描述一个内核模式驱动程序。
  • Start(3) 指出系统应动态装入这个驱动程序。(该值与CreateService中的SERVICE_DEMAND_START常量对应,用于内核模式驱动程序时它代表不必明确调用StartService函数或发出NET START命令来启动驱动程序)
  • ErrorControl(1) 指出如果装入该驱动程序失败,系统应登记该错误并显示一个消息框。

转载于:https://www.cnblogs.com/dubingsky/archive/2009/06/29/1513096.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值