首先来认识一下键,项,值吧:

左边有五个根键

HKEY_CLASSES_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USER

HKEY_CURRENT_CONFIG

根键展开后可以看到子健:像 "SOFTWARE, Microsoft, Windows, CurrentVersion 等都是子健。

而最后一级便不是子健了,而是项:Run。

“名称栏” 下方的都称为 键值项

“类型栏” 下方的都称为 键值项的类型

“数据栏” 下方的都称为 键值项的键值

 

RegCreateKeyEx() 介绍:

功能:创建或打开注册表键。

函数原型:LONG RegCreateKeyEx(
              HKEY hKey,        // 键的句柄 (RegCreateKey, RegCreateKey() 的返回值) 或者 预定义的值( 即五个根键)。
              LPCTSTR lpSubKey,   // 指向 要创建或要打开的子健名称。
              DWORD Reserved,     // 保留值必须为 0,
              LPTSTR lpClass,     // 指向一个字符串,该字符串定义了该键的类型。可以为空。
              DWORD dwOptions,  //  新创建的键的属性。
              REGSAM samDesired,   // 键的访问权限。
              LPSECURITY_ATTRIBUTES lpSecurityAttributes,   // 指向 SECURITY_ATTRIBUTES 结构的指针。

// 定义返回的句柄是否可以被子进程继承,为 NULL 表示不继承。
              PHKEY phkResult,                 // 指向新创建或打开的键的句柄的指针,保存返回的句柄。
              LPDWORD lpdwDisposition  //  指明键是被创建还是被打开的
              );

(入参,即输入的参数。出参,即输出的参数)

参数:dwOptions

REG_OPTION_NON_VOLATILE 新创建的键为一个非短暂性的键 (数据信息保存在文件中,当系统重新启动时,数据信息恢复)
    REG_OPTION_VOLATILE 新创建的键为一个短暂性的键(数据信息保存在内存中)。
    REG_OPTION_BACKUP_RESTORE 仅在WINNT中支持,可以提供优先级支持。

参数:samDesired

KEY_CREATE_LINK 准许生成符号键
  KEY_CREATE_SUB_KEY 准许生成子键
  KEY_ENUMERATE_SUB_KEYS 准许生成枚举子键
  KEY_EXECUTE 准许进行读操作
  KEY_NOTIFY 准许更换通告
  KEY_QUERY_VALUE 准许查询子键
  KEY_ALL_ACCESS 提供完全访问,是上面数值的组合
  KEY_READ 是下面数值的组合:
  KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY
  KEY_SET_VALUE 准许设置子键的数值
  KEY_WRITE 是下面数值的组合:
  KEY_SET_VALUE、KEY_CREATE_SUB_KEY

参数:lpdwDisposition (出参)

REG_CREATED_NEW_KEY 键先前不存在,现在被创建。
  REG_OPENED_EXISTING_KEY 键先前已存在,现在被打开。

返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。

RegOpenKeyEx() 介绍:

功能:打开一个已经存在的子健。

函数原型:LSTATUS RegOpenKeyEx(
                  HKEY   hKey,
                  LPCSTR lpSubKey,
                  DWORD  ulOptions,   // 保留值必须为 0。
                  REGSAM samDesired,
                  PHKEY  phkResult
                  );

参数:同 RegCreateKeyEx()。

返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。

RegCloseKey() 介绍:
功能:关闭注册表。

函数原型:LONG RegCloseKey(

                  HKEY hKey // 释放键的句柄。
                  );
返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
 
RegDeleteKey() 介绍:
功能:删除注册表键值。(不能删除含有子健的子健)
函数原型:LSTATUS RegDeleteKey(
                  HKEY   hKey,
                  LPCSTR lpSubKey,
                  REGSAM samDesired,
                  DWORD  Reserved   // 保留值必须为 0。
                  );
返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
 
RegQueryValueEx() 介绍:
功能:检索一个已打开的注册表句柄中,指定的注册表键的类型和设置值。
函数原型:LSTATUS RegQueryValueExA(
                  HKEY  hKey,  // 已打开项的句柄,或者指定一个标准项名。
                  LPCSTR  lpValueName,  // 要查询注册表键值的名字字符串,注册表键的名字,以空字符结束。
                  LPDWORD  lpReserved,  // 保留值必须为 0。
                  LPDWORD  lpType,  //用于装载取回数据类型的一个指针变量。
                  LPBYTE  lpData,  //用于装载指定值的一个缓冲区,可以为空。
                  LPDWORD  lpcbData  //用于装载 lpData 缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字节数。
                                                    // 若 lpData 为 NULL, 则也为 NULL。
                  );
参数:lpType为一个指向数据类型的指针,数据类型为下列类型之一:
  REG_BINARY 二进制数据
  REG_DWORD 32位整数
  REG_DWORD_LITTLE_ENDIAN little-endian格式的数据,例如0X12345678以(0X78 0X56 0X34 0X12)方式保存
  REG_DWORD_BIG_ENDIAN big-endian格式的数据,例如0X12345678以(0X12 0X34 0X56 0X78)方式保存
  REG_EXPAND_SZ 一个包含未扩展环境变量的字符串
  REG_LINK 一个Unicode类型的链接
  REG_MULIT_SZ 以两个零结尾的字符串
  REG_NONE 无类型数值
  REG_RESOURCE_LIST 设备驱动资源列表
  REG_SZ 一个以零结尾的字符串根据函数使用的字符集类型的不同而设置为Unicode或ANSI类型的字符串。
返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
 
RegSetValueEx() 介绍:
功能:在注册表项下设置指定值的数据和类型。
函数原型:LONG RegSetValueEx(
             HKEY hKey,
             LPCTSTR lpValueName,
             DWORD Reserved,// 保留值必须为0。
             DWORD dwType,
             CONST BYTE *lpData,
             DWORD cbData
               );
参数:同 RegQueryValueEx()。
返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
 
RegDeleteValue() 介绍:
功能:删除指定项下方的一个值。
函数原型:LSTATUS RegDeleteValue(
                  HKEY   hKey,
                  LPCSTR lpValueName  // 指向要删除的值名。
                  );
返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
 
DEMO CODE:(注意:能修改成功的注册表一般都在 HKEY_CURRENT_USER 这个根键里)
#include<stdio.h>
#include<Windows.h>
int main(void)
{
LONG Long, Long0;
HKEY hKey = NULL;
char Buffer[] = "www.baidu.com";
Long = RegOpenKeyEx(HKEY_CURRENT_USER,
"SOFTWARE\\Microsoft\\Internet Explorer\\Main",
,
KEY_ALL_ACCESS,
&hKey);
if (Long != ERROR_SUCCESS)
{
printf("Open Error!\n");
system("pause");
exit();
} Long0 = RegSetValueEx(hKey,
"Start Page",
,
REG_SZ,
(CONST BYTE *)Buffer,
strlen(Buffer)); if (Long0 != ERROR_SUCCESS)
{
printf("Set Value Error!\n");
system("pause");
exit();
} printf("Modify Succeed!\n");
system("pause");
return ;
}
 

API---注册表编程的更多相关文章

  1. 【API】注册表编程基础-RegCreateKeyEx、RegSetValueEx

    1.环境: 操作系统:Windows 10 x64 编译器:VS2015 2.关键函数 LONG WINAPI RegCreateKeyEx( _In_ HKEY hKey, _In_ LPCTSTR ...

  2. C++ 注册表编程

    原文 C++ 注册表编程 1.基础知识 注册表的组织方式跟文件目录比较相似,主要分为根键.子键和键值项三部分,与文件目录对应的话就是根目录.子目录和文件.分别介绍一下这三部分: (1)根键.分为5个, ...

  3. windows 注册表编程

    例子:将本地计算机的Monitor ID写入到注册表中 (1)获取MonitorID BOOLEAN DeviceMonitorService::EnumClassDevice(const GUID ...

  4. WIN7/XP用注册表关联指定后缀名和打开程序(手动【图文】和C编程两种实现)

    前言: 本文是基本原理介绍和手动的操作.程序实现该功能在http://blog.csdn.net/arvon2012/article/details/7839556,同时里面有完整代码的下载. 今天在 ...

  5. Win.ini和注册表的读取写入

    最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的16位操作系统下,配置信息放在Win.ini文件中.下面介绍一下Win.ini文件的读写方法和注册表的编程. 先介绍下Win.i ...

  6. C#注册表操作类--完整优化版

    using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; namespace ...

  7. 10#Windows注册表的那些事儿

    引言 用了多年的Windows系统,其实并没有对Windows系统进行过深入的了解,也正是由于Windows系统不用深入了解就可以简单上手所以才有这么多人去使用.笔者是做软件开发的,使用的基本都是Wi ...

  8. C#注册表读写完整操作类

    1.注册表基项静态域 /// <summary> /// 注册表基项静态域 ///1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT 主键 ///2.R ...

  9. C#注册表操作类(完整版) 整理完整

    /// <summary> /// 注册表基项静态域 /// /// 主要包括: /// 1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键 /// ...

  10. 《天书夜读:从汇编语言到windows内核编程》八 文件操作与注册表操作

    1)Windows运用程序的文件与注册表操作进入R0层之后,都有对应的内核函数实现.在windows内核中,无论打开的是文件.注册表或者设备,都需要使用InitializeObjectAttribut ...

随机推荐

  1. Git客户端下载

    链接:http://pan.baidu.com/s/1eRXsITO 密码:4i6e

  2. 003:CSS三大重点之一:盒子模型

    目录 1:盒子模型 2:边框: 2.1:合写 2.2:适用于:table系元素.边框合并 3:内边距 4:外边距: 4.1:盒子居中三大条件 4.2:外边距合并.外边距塌陷(父子嵌套)解决方法三种 前 ...

  3. 14 (OC)* UIView和UILayer

    总接来说就是如下几点: 1:每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供.两者都有树状层级结构,layer ...

  4. Android开发中常用Dialog(普通弹窗&时间选择器&日历选择器)

    引言 开发中,我们会有很多地方使用 Dialog 来展示一些提示信息或设置信息.如:用户提示.进度展示.时间设置.日期设置等. 下面我和大家一些学习下Android中常用的几种Dialog吧~ * 首 ...

  5. Windows server 2008 快速搭建域环境

    之前根据网上的教程搭建,然后出现了很多问题,最后摸索出了一个比较稳妥一点的方法. 对于选系统这里,虽然上一篇文章已经说过了,这里也再强调一下,我使用的是08的系统,使用其他系统的暂不做评价,使用08系 ...

  6. jmeter入门(环境搭建&运行&初识)

    最近了解了一些性能测试的基础知识和原理决定动手实践下,比较选择了jmeter 一.什么是jmeter Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试 ...

  7. SUSE Storage6 环境搭建详细步骤 - Win10 + VMware WorkStation

    学习 SUSE Storage 系列文章 (1)SUSE Storage6 实验环境搭建详细步骤 - Win10 + VMware WorkStation (2)SUSE Linux Enterpri ...

  8. python 列表,集合,字典,字符串的使用

    PY PY基础 append 在末尾添加元素 pop 删除末尾元素 insert(i,item)在i位插入元素 pop(i)删除i位元素 只有1个元素的tuple定义时必须加一个逗号,,来消除歧义 i ...

  9. 向net core 3.0进击——Swagger的改变

    目录 前言 引入 测试 小结 前言 十一小长假在不知不觉间可都没了,在这个小尾巴的空隙,把这两天鼓捣的net core 3.0升级过程记录一下,首先还是根据之前的顺序一个个补充进来,先从Swagger ...

  10. 〈四〉ElasticSearch的认识:基础原理的补充

    目录 想想我们漏了什么 回顾 补回 集群的建立 集群发现机制 配置文件 健康状态 补充: 小节总结 分片的管理 梳理 分片的均衡分配 主副分片的排斥 容错性: 数据路由 对于集群健康状态的影响 小节总 ...