zoukankan      html  css  js  c++  java
  • 关于注册表


    注册表简介:
    注册表是Windows程序员建造的一个复杂的信息数据库,它是多层次式的。在不同系统上注册表的基本结构相同。其中的复杂数据会在不同方式上结合,从而产生出一个绝对唯一的注册表。

    注册表结构:
    注册表由键(或称“项”)、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。

    注册表中的数据类型:
    显示类型(在编辑器中)    数据类型            说明
    REG_SZ         字符串    文本字符串
    REG_MULTI_SZ      多字符串     含有多个文本值的字符串
    REG_BINARY       二进制数      二进制值,以十六进制显示。
    REG_DWORD         双字   一个32位的二进制值,显示为8位的十六进制值

    VC中使用需要添加头文件:
    #include
    #pragma comment (lib, "advapi32.lib")

    注册表操作
    1. RegClose()
    原形:LONG RegCloseKey(
      HKEY hKey // 释放已经打开的注册表句柄
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:关闭指定的主册表键,释放句柄当对一个或多个键或值操作完成以后,需要关闭其键来进行保存操作结果。关闭一个键后,句柄变为非法,以使其不可再次被使用。为系统重新使用而释放句柄。
    例子:if( bRet = ( ::RegCloseKey( m_hKey ) == ERROR_SUCCESS ) ) m_hKey = NULL;


    2. RegCreateKeyEx()和RegCreateKey()
    原形:LONG RegCreateKeyEx(
      HKEY hKey,     // 主键名称
      LPCTSTR lpSubKey,   // 子键名称或路径
      DWORD Reserved,   // 保留,为0
      LPTSTR lpClass,   // 没弄懂,我设为空也差不多
      DWORD dwOptions,  // 对你建立的键的一些选项,可以是这些值:REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE第一个是默认的了。一般用第一个就可以了
      REGSAM samDesired,   // 设置你对你建立的这个键的访问权限
      LPSECURITY_ATTRIBUTES lpSecurityAttributes, //不太明白
      PHKEY phkResult,   // 指向你建的句柄
      LPDWORD lpdwDisposition //用来查看是打开一个已经有的键,还是新建了键
     );
    原型:LONG RegCreateKey(
      HKEY hKey,     // 主键名称
      LPCTSTR lpSubKey,   // 子键名称或路径
      PHKEY phkResult,   // 指向你建的句柄
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS.
    解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。当在创建或打开注册表的键时,需要指定访问权限,而这些访问权限需要到一级。默认的权限是KEY_ALL_Access权限。还有KEY_CREATE_LINK创建字符链权限,KEY_CREATE_SUB_KEY创建子键权限,KEY_EXECUTE读取键权限,KEY_NOTIFY获得修改键通知的权限,KEY_QUERY_VALUE查询键值的权限,KEY_SET_VALUE设置数据值的权限。注意不能在根一级建键,在注册表的根一级仅可有预定义的键。具体使用,请查看联机手册。
    例子:
    HKEY m_hkey;
    DWORD dwDisposition;
    long ret0=(::RegCreateKeyEx
    (HKEY_CURRENT_USER,"REGD\\",0,NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&m_hkey,&dwDisposition));
    if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
    {
    MessageBox("错误: 无法打开有关的hKEY!");
    return;
    }
    if(dwDisposition==REG_OPENED_EXISTING_KEY)
    MessageBox("打开了一个已经存在的键");
    else
    {
    if(dwDisposition==REG_CREATED_NEW_KEY)
    MessageBox("建立一个新键");
    }
    RegClosekey(m_hkey);

    3. RegOpenKey()和RegOpenKeyEx()
    原形:LONG RegOpenKeyEx(
      HKEY hKey,    // 要打开主键名
      LPCTSTR lpSubKey,  // 子键或路径
      DWORD ulOptions,  // 保留,为0
      REGSAM samDesired,  // 操作权限标志
      PHKEY phkResult  // 指向你打开键的句柄
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS.
    解释:该函数负责打开指定的键或子键,如果不存在他不建立。其他和RegCreateKeyEx()和RegCreateKey()基本相同。

    4. RegDeleteKey()
    原形:LONG RegDeleteKey(
      HKEY hKey,    // 已打开的键的句柄
      LPCTSTR lpSubKey  // 要删除的子键或路径,传如""将删除key本身
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    该函数用来删除注册表中的一个键值的。在用此函数时需要注意98与NT的差异。在NT中在删除一个键之前,要求必须删除所有子键,需要从下向上递归删除所有子键,而Windows98没有他那么复杂,只要删除键及其所有子键就可以啦。

    5. RegQueryValue()和RegQueryValueEx()
    原形:LONG RegQueryValueEx(
      HKEY hKey,    // 已打开的键的句柄
      LPTSTR lpValueName, // 要查询值的名称,传如""为查询键下的默认值
      LPDWORD lpReserved, // 保留,为0
      LPDWORD lpType,  // 查询的类型
      LPBYTE lpData,   // 数据存放的地址
      LPDWORD lpcbData  // 数据长度
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:读取某子键下特定名称的值。
    例子
    CString m_strQ;//用来存放查询来的字符串值
    DWORD m_dwCount;//记录字符串的长度(包括NULL字符)
    ::RegQueryValueEx(m_hkey,"",0,NULL,NULL,&m_dwCount);//先查询出字节空间
    ret1=(::RegQueryValueEx(m_hkey,"",0,NULL,(unsigned char*)m_strQ.GetBuffer(m_dwCount),&m_dwCount));
    m_strQ.ReleaseBuffer();
    MessageBox(m_strQ);

    6. RegSetValue()和RegSetValueEX()
    原形:LONG RegSetValueEx(
      HKEY hKey,    // 已打开的键的句柄
      LPCTSTR lpValueName,// 要设置的值的名称,传如""为查询键下的默认值
      DWORD Reserved,  // 保留
      DWORD dwType,   // 变量的类型
      CONST BYTE *lpData, // 变量数据的地址
      DWORD cbData // 变量的长度
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:设置某子键下特定名称的值。

    7. RegEnumValue()
    原形:LONG RegEnumValue(
      HKEY hKey,     // 要查询的已打开的键的句柄
      DWORD dwIndex,    // 读取名称的索引号
      LPTSTR lpValueName,  // 返回所读取的名称
      LPDWORD lpcbValueName,  // 返回读取名称的长度,不含chr(0)
      LPDWORD lpReserved,  // 保留,为0
      LPDWORD lpType,   // 返回所读取的数据类型
      LPBYTE lpData,    // 返回所读取的数据
      LPDWORD lpcbData   // 返回所读取的数据长度
    );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:列出某Key的所有名称的值,变化索引即可遍历整个键下的名称和数据。

    8. RegDeleteValue()
    原形:LONG RegDeleteValue(
      HKEY hKey,    // 要删除的键的句柄
      LPCTSTR lpValueName // 要删除的名称
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:删除某Key的某一名称

    9. RegEnumKey()和RegEnumKeyEx()
    原形:LONG RegEnumKeyEx(
      HKEY hKey,    // 要列举的键的句柄
      DWORD dwIndex,   // 索引
      LPTSTR lpName,   // 子键的名称
      LPDWORD lpcbName,  // 子键名称的长度
      LPDWORD lpReserved, // 保留
      LPTSTR lpClass,  // address of buffer for class string
      LPDWORD lpcbClass,  // address for size of class buffer
      PFILETIME lpftLastWriteTime; // address for time key last written to
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:返回注册表键及其子键的详细信息。

    10. RegQueryInfoKey()
    原形:LONG RegQueryInfoKey(
      HKEY hKey,       // 已打开的键的句柄
      LPTSTR lpClass,     // 类型名称,仅使用于NT。若不使用则传入Null
      LPDWORD lpcbClass,     // 类型名称的长度
      LPDWORD lpReserved,    // 保留
      LPDWORD lpcSubKeys,    // 返回子键的数目
      LPDWORD lpcbMaxSubKeyLen,   // 返回最长的子键长度
      LPDWORD lpcbMaxClassLen,   // 返回最长的类长度
      LPDWORD lpcValues,     // 返回值的数目
      LPDWORD lpcbMaxValueNameLen,  // 返回最长的值项名称的长度
      LPDWORD lpcbMaxValueLen,   // 返回最长的值的长度
      LPDWORD lpcbSecurityDescriptor, //返回安全描述,仅适用于 NT
      PFILETIME lpftLastWriteTime  // 返回键最后被写入的时间,仅适用于 NT
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:返回注册表键的信息,包括类名、子键数量、最长子键名、值的数量、最长值数据、安全描述符的长度以及上一次写入的时间等。

    11. RegLoadKey()
    原形:LONG RegLoadKey(
      HKEY hKey,    // 打开的句柄
      LPCTSTR lpSubKey,  //子键的路径
      LPCTSTR lpFile   // 要写入注册表信息的文件
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:从指定的文件恢复注册表键的子键信息到注册表。

    12. RegReplaceKey()
    原形:LONG RegReplaceKey(
      HKEY hKey,    // 打开的句柄
      LPCTSTR lpSubKey,  // 子健的路径
      LPCTSTR lpNewFile,  // 在替换前生成新的备份文件
      LPCTSTR lpOldFile  // 需要覆盖上注册表的文件
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:从指定的文件恢复注册表键的子键信息到注册表并替换原有的值,并生成新的备份文件

    13. RegSaveKey()
    原形:LONG RegSaveKey(
      HKEY hKey,   // 要保存的句柄
      LPCTSTR lpFile, // 保存子键的文件
      LPSECURITY_ATTRIBUTES lpSecurityAttributes //不太懂
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:保存键及其子键信息到指定的文件

    14. RegConnectRegistry()
    原形:LONG RegConnectRegistry(
      LPTSTR lpMachineName,  //远程计算机的名称
      HKEY hKey,     // 预先注册的句柄
      PHKEY phkResult   // 远程计算机上的句柄
     );
    返回值:不成功返回非0,成功返回ERROR_SUCCESS
    解释:连接到远程系统的注册表。

  • 相关阅读:
    记一次性能优化经历
    把一个一中的字段更新另一个表中的t-sql
    Dapper 中使用sql in 关键字查询
    HTML5 学习笔记 应用程序缓存
    HTML5学习笔记 Web存储
    HTML5 学习笔记 表单属性
    HTML5学习笔记 Geolocation(地理定位)
    vim插件之delimitMate.vim
    vim 插件之 surround.vim
    vim 脚本之快速打印log
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2833807.html
Copyright © 2011-2022 走看看