注册表是window系统中非常重要的一部分,今天在网上查了一些文章学习了下,觉得其中有一句话总结的很经典:注册表是用来存储信息的。

这句话虽然有点废,但是说的没错。当然,注册表中包含的内容非常多,远没有单纯存储信息那么简单。

注册表的基础信息:

数据存储结构为树。

树的每一个节点就是一个键值。

每个节点都能包含N多子键。

一个键可以有很多键值。

每个键值都有一个名字,以及一种指定类型的数据。

我今天也是刚开始看注册表,知道的也很有限,就不接着献丑了,直接跳到注册表API。

常用的注册表函数:

RegOpenKeyEX

函数原型为:LONG RegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult);

hKey为主键句柄,也可以是预定义好的键值,比如:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS

lpSubKye为子键名称,简单的ANSI字符串。这个参数比较有趣的是,不必是当前主键的子键,即便是子键的子键也可以找到。

ulOptions 保留参数,必须是0.

samDesired 指定访问权限,比如最简单的读写操作。

phkResult 一个输出参数,返回被访问键的句柄值。

返回值,如果函数成功执行,那么返回ERROR_SUCCESS。如果失败,呵呵,详见MSDN。

RegCloseKey 这个我就不废话了,就是关闭句柄的。

RegCreateKey

函数原型:LONG RegCreateKey( HKEY hKey,  LPCTSTR lpSubKey,  PHKEY phkResult );

那个EX版的函数有好多参数,看的我眼花缭乱。

hKey 和RegOpenKeyEx函数中参数的功能是一样的,就是一个已经打开了的句柄。

lpSubKey也是一样的。

hpkResult 最后的这个,就是返回创建了的键的句柄。

RegGetValue

函数原型:

LONG WINAPI RegGetValue(HKEY hkey, LPCTSTR lpSubKey,LPCTSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData
);

好多参数,前两个就不解释了,都一样的。

lpValue是一个输入参数,输入的是键值名。如果是NULL或者空字符串,那么获取未命名键值或者默认键值。

dwFlags 类型限制,如果键值的数据类型和该参数指定的类型不匹配,那么执行失败。可以指定为RRF_RT_ANY参数,不做限制。

pdwType 输出参数,指定类型信息。

pvData 保存值的缓冲区

pcdData 输出,用于指定pvData缓冲区的大小,一字节为单位

返回值,和上面都一样。

RegSetValue

函数原型

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

这个函数功能和上面的GetValue正好相反,但是因为是设置值的,也因此而简单了很多。

前两个参数直接忽略。

dwType 就是指定数据类型的,类型有好多,详见MSDN。

lpData 缓冲区

csData 输出参数。输入的时候指定缓冲区大小,输出的时候,变成缓冲区写入大小。这风格见了不少了。

返回值,依旧如此。

然后还有两个函数,分别是删除键值和删除键的。函数功能都很简单,不介绍了。

接下来要讲的就是,如何通过修改注册表实现程序的开机自启动。

在windows的注册表中,有一个键专门负责开机自启动程序。这个键的地址如下:

HKEY_LOCAL_MACHINE/SOFTWARE/MICROSOFT/WINDOWS/CURRENTVERSION/RUN

截个图:

这个就是我的电脑上的启动程序列表了,不过有点我比较奇怪的就是,有道词典和杀毒软件的自启动在这里什么都没看到。应该是还有其他方法。

程序我就不写了~偷个懒,等会还要点名。

注册表 API 以及开机自启动的更多相关文章

  1. C# Winform打包部署时添加注册表信息实现开机自启动

    1.原理:需要开机自启动的程序,需要将其启动程序的路径写到注册表中指定的文件夹下 2. 写入注册表的方式有两种 a.在生成安装程序时配置 b.在程序运行时,动态配置 方法一:使用VS2010自带的打包 ...

  2. advapi32.dll kernel32.dll 中的两套注册表API

    日前遇到一件事:WebBrowser中的网页会用到一个“大众”ActiveX控件,为了保证兼容性以及和其它程序互不干扰,我们采用这样一种方案: 1. 我们的软件会自带该控件: 2. 如果系统中已注册有 ...

  3. 【API】开机自启动- ActiveX启动

    一 学习目标 这是一段远程控制木马开机启动的代码,主要使用了ActiveX方式启动.结合自己的理解重新整理了笔记.而作为编程新手入门的自己决定要开始梳理学习目的和订下学习的目标.从今天开始要坚持做到 ...

  4. C# Winform打包部署时添加注册表信息实现开机启动

    使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件.具体实现如下: 1.添加安装部署项目后,鼠标右键安装项目->视图->注册表,HK ...

  5. 【转】C# Winform打包部署时添加注册表信息实现开机启动

    使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件.具体实现如下: 1.添加安装部署项目后,鼠标右键安装项目->视图->注册表,HK ...

  6. 安全之路 —— C/C++实现利用添加注册表项实现文件自启动

    简介 添加注册表项是实现文件自启动的经典方法之一,但因为操作注册表项是一个敏感操作,被报毒可能性较大,但即便如此,这个方法还是值得一学的,因为后期大部分编程都涉及到注册表操作. 最常使用到的注册表项有 ...

  7. C# WPF打包部署时添加注册表信息实现开机启动

    使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件.具体实现如下: 创建安装部署这部分就不用说了,添加安装部署项目后,鼠标右键安装项目-> ...

  8. C# Winform打包部署时添加注册表信息实现开机启动(转载)

    使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件.具体实现如下:    1.添加安装部署项目后,鼠标右键安装项目->视图->注册表 ...

  9. 如何将Nginx注册为系统服务,开机自启动

    亲测有效! 一般程序员在实际工作中,除了敲代码,很少有机会实际接触操作其它东西,例如服务器环境搭建,项目部署等等,不是领导信任或项目组核心成员,应该是没有机会实际接触的,只能通过网上资料稍微了解一下. ...

随机推荐

  1. 8.read读取控制台输入

    read(选项)(参数)选项:-p:指定读取值时的提示符-t:指定读取时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了参数:变量:指定读取时的变量名

  2. jQuery中操作样式

    操作行间样式 // 获取div的样式 $("div").css("width"); $("div").css("color&quo ...

  3. Selenium2+python自动化28-table定位【转载】

    前言 在web页面中经常会遇到table表格,特别是后台操作页面比较常见.本篇详细讲解table表格如何定位. 一.认识table 1.首先看下table长什么样,如下图,这种网状表格的都是table ...

  4. 自动监控tomcat脚本并且执行重启操作

    #!/bin/sh # func:自动监控tomcat脚本并且执行重启操作 # author:reed # date:// # 定义环境变量 MYPATH=/usr/local/jdk/bin exp ...

  5. Spring ClassPathXmlApplicationContext和FileSystemXmlApplicationContext读取配置文件的方法

    先说:ClassPathXmlApplicationContext 这个类,默认获取的是WEB-INF/classes/下的路径,也就是在myeclipse的src下的路径,所以用这个是获取不到WEB ...

  6. MyEclipse10.7安装反编译插件

    jad是一个使用比较广泛的Java反编译软件,jadClipse是jad在eclipse下的插件,下面像大家介绍下如何将jadclipse加入到MyEclipse10.X,9.X,8.X当中: htt ...

  7. AC日记——Andryusha and Colored Balloons codeforces 780c

    C - Andryusha and Colored Balloons 思路: 水题: 代码: #include <cstdio> #include <cstring> #inc ...

  8. mysql 文本搜索

    全文本搜索 MySQL支持几种基本的数据库引擎,但并非所有的引擎都支持全文本搜索.两个最常使用的引擎为MyISAM和InnoDB,前者支持全文本搜索,后者就不支持. 理解全文本搜索 在前面的学习中,我 ...

  9. 13、Django实战第13天:分页列表功能

    我们看课程 机构列表页是需要分页的 为了完成分页功能,我们需要用到Django的一个开源开发库django-pure-pagination workon mxonline pip install dj ...

  10. ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室

    这是一个极其简陋的聊天室! 这个例子只是在官方的例子上加了 Group 的用法而已,主要是官方给的 Group 的例子就两行代码,看不出效果. 第一步:修改 chat.js "use str ...