注册表编程浅解析

来源:互联网 发布:8位数据奇偶校验算法 编辑:程序博客网 时间:2024/05/08 03:58

什么是注册表?注册表本质上就是windows里的一个数据库。支撑其实现的结构是树形结构。注册表里面存储的就是一些乱七八糟的什么配置信息啊,用户信息啊等,具体的自己google去吧!

既然注册表是用树形结构保存的,那么我就按照树的结构来剖析吧。

<一>注册表结构

键:键是注册表特有名称之一,你可以把键理解成文件夹,理解成一个表的表项(注册表本身也可以理解成一个表)。但是在这里,键其实就是这棵树的非叶子节点。

从根节点开始,这棵树主要可以分为五大分支,分别记录五大类信息,具体如下(参考MSDN)

根项名称描述

HKEY_LOCAL_MACHINE

包含关于本地计算机系统的信息,包括硬件和操作系统数据,如总线类型、系统内存、设备驱动程序和启动控制数据。

HKEY_CLASSES_ROOT

包含用于各种 OLE 技术和文件类关联数据的信息。如果 HKEY_LOCAL_MACHINE\SOFTWARE\Classes 或HKEY_CURRENT_USER\SOFTWARE\Classes 中存在相应的项或值,则在 HKEY_CLASSES_ROOT 中会存在某个特定的项或值。如果两处均存在项或值,则 HKEY_CURRENT_USER 版本将是出现在 HKEY_CLASSES_ROOT 中的那一个。

HKEY_CURRENT_USER

包含当前以交互方式(与远程方式相反)登录的用户的用户配置文件,包括环境变量、桌面设置、网络连接、打印机和程序首选项。该子树是HKEY_USERS 子树的别名,它指向 HKEY_USERS\当前用户的安全 ID

HKEY_USERS

包含关于动态加载的用户配置文件和默认配置文件的信息。它包含同时出现在 HKEY_CURRENT_USER 中的信息。正在远程访问服务器的用户在服务器上的该项下没有配置文件;他们的配置文件将加载到自己计算机的注册表中。

HKEY_CURRENT_CONFIG

包含在启动时由本地计算机系统使用的硬件配置文件的相关信息。该信息用于配置一些设置,如要加载的设备驱动程序、显示时要使用的分辨率。该子树属于 HKEY_LOCAL_MACHINE 子树,它指向 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current

每个根项名均以 HKEY_ 开头,以便向软件开发人员指出这是可以由程序使用的句柄。句柄是一个值,用于识别资源。有了句柄,程序就能对资源进行访问。

值:值就是注册表里存储的信息。值包括三个部分:值名称(name)、值类型(type)和值本身(value)。在这颗树里,值就是叶子节点。每个叶子节点都包含这三个部分,记录着系统或用户的某一个配置信息。

.

<二>操作注册

注册表的操作无非就是依据注册表的结构来的。比如创建键:就是给这棵树添个树枝。打开键:这个还不太好比喻,暂且想象是爬到这个树枝上玩吧。写入值:找到某个页节点然后写入信息。最后就是读取值。基本的操作就这四种。其实win32 API提供了大量的函数来方便程序员管理注册表,最基本的也就这些。如果编程中想用其他的,自己MSDN吧。

给一个思路:只要你能想到的合理的操作,就大胆MSDN,windows不会让你失望的。

1)创建键:

LONG RegCreateKey(HKEY hkey,LPCTSTR lpSubKey,PHKEY phkResult);

函数的具体参数含义和用法并不是讲解的重点,也不是应该掌握的重点,这些完全可以顺手MSDN到,理解原理才是关键。

2)打开键:

LONG RegOpenKey(HKEY hkey,LPCTSTR lpSubKey,PHKEY phkResult);

3)写入值:

LONG RegSetValue(HKEY hkey,LPCTSTR lpSubKey,DWORD dwType,LPCTSTR lpData,DWORD cbData);

4)读取值:

LONG RegQueryValue(HKEY hkey,LPCTSTR lpSubKey,LPTSTR lpValue,PLONG lpcbValue);

<三>简单demo(请include<Windows.h>)

void RegWrite(){HKEY hKey;RegCreateKeyA(HKEY_LOCAL_MACHINE,"SOFTWARE\\XIAYONG",&hKey);RegSetValueA(hKey,NULL,REG_SZ,"XIAYONG",strlen("xiayong"));RegCloseKey(hKey);}int main()  {  RegWrite();system("pause");return 0;  } 



原创粉丝点击