精华内容
下载资源
问答
  • windows注册表教程
    2021-03-02 23:24:02

    本文实例讲述了C#操作windows注册表的方法。分享给大家供大家参考。具体如下:

    此代码演示了如何读c#教程取和写入注册表

    读取注册表:

    private string GetRegistShellData(string RegistName)
    {
     try
     {
      string registData, SubregistData;
      RegistryKey hkml = Registry.LocalMachine;
      RegistryKey software = hkml.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
      registData = software.GetValue(RegistName).ToString();
      SubregistData = registData.Substring(0, 2);
      return SubregistData;
     }
     catch (Exception excp)
     {
      MessageBox.Show("GetRegistShellData错误" + excp.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     }
     return "";
    }
    

    写入注册表:

    private void RenameRegistData() 
    { 
     try
     { 
      string registData1; 
      RegistryKey hkml = Registry.LocalMachine; 
      RegistryKey software2 = hkml.OpenSubKey(@"SOFTWARE\"+ Shadowin + @"\SysToolSign", true); 
      registData1 = software2.GetValue("Sign").ToString(); 
      
      software2.SetValue("Sign", "1"); 
      registData1 = software2.GetValue("Sign").ToString(); 
     } 
     catch (Exception excp) 
     { 
      MessageBox.Show("RenameRegistData错误" + excp.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     } 
     return ; 
    }
    private void RenameRegistData() 
    { 
     try 
     { 
      string registData1; 
      RegistryKey hkml = Registry.LocalMachine; 
      RegistryKey software2 = hkml.OpenSubKey(@"SOFTWARE\"+ Shadowin + @"\SysToolSign", true); 
      registData1 = software2.GetValue("Sign").ToString(); 
     
      software2.SetValue("Sign", "1"); 
      registData1 = software2.GetValue("Sign").ToString(); 
     } 
     catch (Exception excp) 
     { 
      MessageBox.Show("RenameRegistData错误" + excp.ToString(), "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     } 
     return ; 
    }
    

    希望本文所述对大家的C#程序设python基础教程计有所帮助。

    更多相关内容
  • windows注册表教程合集.regedit
  • windows 注册表教程

    2009-07-27 22:12:23
    资料很基础 但是很全 很适合初学者和应急只用
  • Windows 注册表(Registry) 学习

    千次阅读 2022-01-07 10:56:00
    注册表(Registry)是 windows系统中的核心数据库。它储存了系统和应用程序的配置信息。 注册表有哪些作用呢? 记录安装信息 设置硬件 设置软件 定制windows 系统安全管理 自动运行程序 网络设置 …………...

    目录

    一、注册表(Registry)介绍

    1、注册表简介

    2、开启/禁用 注册表编辑器

    3、注册表位置

    二、注册表的结构

    三、修改注册表实现,应用程序开机自启动


    一、注册表(Registry)介绍

    1、注册表简介

            注册表是windows系统中具有层次结构的核心数据库,储存的数据对windows 和Windows上运行的应用程序和服务至关重要。注册表时帮助windows控制硬件、软件、用户环境和windows界面的一套数据文件。

    2、开启/禁用 注册表编辑器

    WIN+R 输入—> “regedit”或“regedit.exe”、“regedt32”或“regedt32.exe” —>回车  

    如果以上方法均不能打开数据库,那么说明你没有管理员权限,或者注册表被锁定。

    权限问题可联系管理员解决,若是注册表被锁定可以使用以下方法进行解锁

    1、创建一个文本文件,复制以下文字文本内容(注意开头之后第二行一定要是空行并且不可少),选择另存为,文件类型选择所有文件,文件名称为XX.reg,保存到桌面后,双击打开该文件,点击确定便可。

    REGEDIT4
    
    [HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\system]
    
    "DisableRegistryTools"=dword:00000000

    2、使用第三方工具进行解锁,推荐使用 “软媒魔方”

    ①、应用商店,搜索软媒魔方,并点击安装

     ②、点击设置大师

    ③、点击系统安全,找到禁止注册表编辑,此处为开启注册表编辑,勾选后为禁用注册表编辑

    3、锁定注册表编辑器的方法

    创建一个文本文件,复制以下文字文本内容(注意开头之后第二行一定要是空行并且不可少),选择另存为,文件类型选择所有文件,文件名称为SS.reg,保存到桌面后,双击打开该文件,点击确定便可。

    ​
    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
    
    "DisableRegistryTools"=dword:00000001

    3、注册表位置

    windows 注册表的位置:C:\Windows\System32\config 。

    以上红框中标注的就是注册表文件了,但是不能直接打开,只能使用注册表编辑器对这些文件进行操作。切记切记,不要轻易尝试删除注册表文件。

    二、注册表的结构

    注册表中,所有的数据都是通过一种树状结构以键和子键的方式组织起来的,就像磁盘文件系统的目录结构一样。

    每个键包含一组特定的信息,每个键的键名都是和它所包含的信息相关联的。注册表的根键共有5个,且全为大写。

     

    键值:

    键值由三部分组成: 名称、类型、数据。

    键值的类型:

    键值类型由常用的6种组成

    字符串值(REG_SZ)

    二进制值(REG_BINARY)

    32位值(4个字节)(REG_DWORD)

    64位值(5个字节)(REG_QWORD)

    多字符串值(REG_MULTI_SZ)

    可扩充字符串值(REG_EXPAND_SZ)

    三、修改注册表实现,应用程序开机自启动

    实现原理:windows 提供了专门的开机自启动注册表。每次开启时,它都会在这个注册表键下遍历键值,获取到键值中的程序路径,并创建进程启动程序。因此只需要将需要设置自启动的程序的路径添加到这个注册表中,便可以实现程序开启自启动功能。

    常见的开机自启动注册表路径:

    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

    注意:要修改 HKEY_LOCAL_MACHINE 主键的注册表需要管理员权限

    实例:将计算器添加入开机自启动注册表,实现开机自启

    ①、打开注册表编辑器,并复制上述的路径,回车后,跳转到自启动注册表

     ②、新建 键值类型为 REG_SZ的键值,修改名称为 calc

     ③、选中 “calc” 键值右键修改键值数据为   计算器程序“clac.exe”的 绝对路径,并点击确定。

     

    在此补充自启动技术用到的另外三种方法:(详细操作步骤留作下一篇文章介绍)

    • 快速启动目录
    • 计划任务
    • 系统服务

    相关资料:

    关于注册表 - Win32 apps | Microsoft Docs

    使用注册表 - Win32 apps | Microsoft Docs

    注册表背后的秘密 (小熊在线《软件论坛》精华区)

    展开全文
  • 通过Python操作注册表有两种方式,第一种是通过Python的内置模块 _winreg;另一种方式就是Win32 Extension For Python 的win32api模块,但是需要进行额外的安装。这里主要给出一些_winreg和win32api的Demo代码。   ...
  • windows注册表,用途十分的广泛,在权限维持中发挥了重要的作用,同时许多木马也是通过修改注册表信息,达到开机启动,隐藏进程。所以学习注册表知识十分有必要 什么是注册表 注册表本质上是一个数据库,储存了...

    前言

    windows注册表,用途十分的广泛,在权限维持中发挥了重要的作用,同时许多木马也是通过修改注册表信息,达到开机启动,隐藏进程。所以学习注册表知识十分有必要

    什么是注册表

    注册表本质上是一个数据库,储存了windows系统和应用程序的设置信息。

    注册表结构

    输入win+r打开cmd,输入regedit或者regedit.exe即可启动,启动后如图所示在这里插入图片描述
    注册表由键(也叫主键,项),子键(子项),项值构成,一个键就是分支中的一个文件夹,子键就是该文件夹下的子文件夹,项值就是键的定义,由名称,类型,数据构成,一个键可以有一个多个项值,如果一个相值为空就是默认值。话不多说上图
    在这里插入图片描述
    对于HKEY_CURRENT_USER这个键,他的子键为CLSID,项值有两个。
    在注册表中,有四种数据类型
    1.REG_SZ:字符串:文本字符串
    2.REG_MULTI_SZ:多字符串值:含有多个文本值的字符串
    3.REG_BINARY:二进制数:二进制值,以十六进制显示,
    4.REG_DWORD:双字值;一个32位的二进制值,显示为8位的十六进制值。
    可以在项值右键新建查看.

    注册表里根键基本介绍

    1.HKEY_USERS:HKEY_USERS仅包含了缺省用户设置和登录用户的信息。虽然它包含了所有独立用户的设置,但在用户未登录时用户的设置是不可用的。这些设置告诉系统哪些图标会被使用,什么组可用,哪个开始菜单可用,哪些颜色和字体可用,和控制面板上什么选项和设置可用。
    2.HKEY_CURRENT_USER:管理系统当前的用户信息。在这个根键中保存了本地计算机中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码。在用户登录Windows时,其信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。
    3.HKEY_CURRENT_CONFIG:允许软件和设备驱动程序员很方便的更新注册表,而不涉及到多个配置文件信息。 HKEY_LOCAL_MACHINE中同样的数据和任何注册表的变化都会同时的变化。HKEY_CURRENT_CONFIG包括了系统中现有的所有配置文件的细节。
    4.HKEY_LOCAL_MACHINE:是一个显示控制系统和软件的处理键。HKLM键保存着计算机的系统信息。它包括网络和硬件上所有的软件设置。(比如文件的位置,注册和未注册的状态,版本号等等)这些设置和用户无关,因为这些设置是针对使用这个系统的所有用户的
    5.HKEY_CLASSES_ROOT:是应用程序运行时必需的信息,和HKEY_LOCAL_MACHINE\SOFTWARE\Classes是一样的,但是在HKEY_CLASSES_ROOT窗编辑相对来说显得更容易和有条理

    常见攻防中利用

    1.远程桌面服务

    导航进入到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server,找到fDenyTSConnections,将其默认值从1改到0就可以开启远程桌面。
    在这里插入图片描述

    2.RID劫持(前文已经写过,具体可以参考前文,这里只做简单介绍)

    本地管理员组 RID 始终为 500,GUEST组501,标准用户或组通常以数字 1001 开头。这可以帮助渗透测试人员和红队操作员在 RID 枚举期间区分帐户是提升的还是标准的。发现可以在注册表中进行修改,以便通过劫持有效帐户的 RID 使访客帐户成为管理员。跳转到HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users,Guest 帐户的 RID 在“ 000001F5 ”键的值 F 中指定。偏移量30的十六进制值为“ 0xF501 ”,需要修改为“ 0xF401 ”(500)以劫持管理员帐户的 RID。偏移量38确定帐户是启用还是禁用(1502 禁用 - 1402 启用)

    3.自启动(木马,蠕虫常会利用)

    1.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run(这里用得最多),看见可疑地方删除即可.
    在这里插入图片描述
    2.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce,看见可疑地方删除即可
    在这里插入图片描述
    3.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run(与上面不同,这是对系统的操作,需要慎重)
    在这里插入图片描述
    4.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
    在这里插入图片描述

    4.隐藏账户检查

    我们创建的隐藏用户,一般方法是察看不了的,但我们可以通过注册表来查看,HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names在这个目录下可以查看到我们的所有用户,包括隐藏用户(注意,SAM子键默认无法打开,需要右键修改权限)下面是演示
    在这里插入图片描述
    可以看到创建完隐藏账户后,是察看不到的,但在注册表对应位置中
    在这里插入图片描述
    出现了我们创建的隐藏账户,删除即可.

    5.文件关联

    文件关联可以使我们打开一种文件时,默认打开另外一种文件,比如我们可以将txt文件与木马程序绑定,这样用户在运行txt文件的时候,就会自动运行我们的木马
    1、ini文件默认的打开方式。通过篡改该项可以导致打开ini 文件时自动运行恶意程序。
    对应注册表项:
    HKEY_ CLASSES_ RO0OT\inifile\shell\open\comnand
    2、. ini文件关联,指向ini 文件默认的打开方式。通过篡改该项可以导致打开ini 文件
    时自动运行恶意程序。.
    对应注册表项: .
    HKEY
    CLASSES_ R00T. ini
    3、cmd文件默认的打开方式。通过篡改该项可以导致打开bat文件时自动运行恶意程序。
    对应注册表项:
    HKEY_ CLASSES_ R0OT\cmdfile\shell\open\comnand
    4、.cmd文件关联,指向cmd文件默认的打开方式。通过篡改该项可以导致打开cmd文件
    时自动运行恶意程序。.
    对应注册表项:.
    HKEY
    CLASSES_ ROOT. cmd
    5、bat 文件默认的打开方式。通过篡改该项可以导致打开bat文件时自动运行恶意程序。
    对应注册表项:
    HKEY_ CLASSES_ _RO0OT\batfile\shell\open\command\

    6.mimikaz明文抓取

    在默认情况下,当系统为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,但可以通过修改注册表重新启动,实现抓取
    可以参考如下文章链接:https://www.pianshen.com/article/6839367076/
    ​​​​​​

    展开全文
  • 教程名称:Windows注册表初级系列学习文档打包下载课程目录:【】Windows系统注册表系列视频教程汇总【】一、注册表概述【】三、注册表备份恢复【】二、注册表的操作(1)-键值【】二、注册表的操作(2)-备份 ...
  • Windows 7注册表入门教程
  • windows_2003注册表教程

    2013-09-18 15:00:03
    非常全面的windows server 2003 注册表教程,里面内容很全面,每一个注册表项目都对应了其功能实现位置。
  • 注册表初级教程,详细说明注册表的历史和操作方法 适合于初级的windows用户
  • 该软件可以抓取当前时间的注册表信息,并生成文件,方便两次操作后的对比,简单易操作。已汉化,已查毒
  • 教程/操作系统 Windows XP注册表修改精粹下 19任意定制按钮颜色 尽管Windows XP本身带有多种窗口显示方案但用户想定义某一个部位的颜色比 如把按钮的颜色由黑色改为蓝色或红色 这时就需要修改注册表了 步骤如下打开...
  • 配置环境要求:1、操作系统:win7 32/64位         2、开发环境:Visual studio ... 授课特色:以实例讲解C#对Windows 注册表的操作,包括获取、写入、修改、删除注册表等操作
  • 教程/操作系统 Windows XP注册表修改精粹上 1隐藏回收站 隐藏回收站是指不会显示在桌面及资源管理器里隐藏并不等于停止这个功能 如使用登录文件更改者请先汇出有关登录文件作备份登录文件更改适用于 Windows XP 家用...
  • 本手册全称“注册表实用手册”,收录的是大量简单,通俗易懂而又确实实用的windows系列注册表修改技巧.经实践证明,不但对电脑初学者有很大的帮助,对"大哥级"的电脑爱好者也有很高的参考价值.毫不夸大的说,这是一本...
  • 【适合小白入门】深入掌握Windows操作系统原理,提升程序开发水平,为学习驱动开发,内核安全打下基础。学完本课程可以轻松的理解Windows内核,开阔思路,对没有底层开发基础的人起到有非常好的指导作用。在此基础上...
  • 资源名称:Windows程序设计视频教程 (18讲附源代码)资源目录:【】Win32_day01【】Win32_day02【】Win32_day03【】Win32_day04【】Win32_day05【】Win32_day06【】Win32_day07【】Win32_day08【】Win32_day09【IT ...
  • window注册表操作手册

    千次阅读 2020-03-13 18:04:43
    环境: window 10企业版 ...Windows注册表内容详解 C#操作注册表 一、window注册表简介 二、c#读写注册表 public class RegistryUtil { #region 内部使用 private static Dictionary<string, ...

    环境:

    • window 10企业版
    • .netcore 3.1
    • vs 2019 16.4.5
    • 控制台程序以管理员身份运行

    参照:

    一、window注册表简介

    1.1 什么是注册表

    注册表是window操作系统存储数据的地方,可以认为是window自身的一个小型数据库。所有window软件都可以在安装或运行的时候向注册表添加或读取数据。同时window操作系统也会读取里面的内容以决定自己的行为。
    举个例子:

    1. 迅雷软件安装后会在注册表中写入HKEY_CLASSES_ROOT\thunder,从而指示操作系统:当打开thunder://12345这样的地址的时候启动迅雷程序,如下图所示:
      在这里插入图片描述
      在这里插入图片描述
    2. 你可以修改注册表的值,以达到清除快捷方式箭头的目的
      删除HKEY_CLASSES_ROOT\lnkfile项下面的IsShortcut值,然后重启操作系统或者在任务管理器中重启window 资源管理器你就会发现桌面上的图标箭头消失了,如下:
      在这里插入图片描述
    3. 修改注册表项HKEY_CURRENT_USER\Control Panel\Desktop下PaintDesktopVersion的值为1,window桌面右下角将会显示window操作系统版本号:
      在这里插入图片描述
      在这里插入图片描述

    1.2 注册表的数据结构

    注册表是一个树状结构,它有五大根节点,这五大根节点有不同的作用。根节点下可以有很多子节点,每个子节点称之为“项”,而每个子节点又可以有自己的数据值,这些数据值按照数据类型划分为“字符串”、“扩展字符串”、“多行字符串”、“32位无符号整数”、“64位无符号整数”和“二进制数据”。
    在这里插入图片描述

    1.2.1 注册表的五大根节点

    • HKEY_CLASSES_ROOT:
      该根键包括启动应用程序所需的全部信息,包括扩展名,应用程序与文档之间的关系,驱动程序名,DDE和OLE信息,类ID编号和应用程序与文档的图标等。
    • HKEY_CURRENT_USER:
      该根键包括当前登录用户的配置信息,包括环境变量,个人程序以及桌面设置等
    • HKEY_LOCAL_MACHINE:
      该根键包括本地计算机的系统信息,包括硬件和操作系统信息,安全数据和计算机专用的各类软件设置信息
    • HKEY_USERS:
      该根键包括计算机的所有用户使用的配置数据,这些数据只有在用户登录系统时才能访问。这些信息告诉系统当前用户使用的图标,激活的程序组,开始菜单的内容以及颜色,字体。
    • HKEY_CURRENT_CONFIG:
      该根键包括当前硬件的配置信息,其中的信息是从KEY_LOCAL_MACHINE中映射出来的。

    1.2.2 数据值的数据类型

    • 字符串
      简单字符串:REG_SZ
      多行字符串:REG_MULTI_SZ,获取的是字符串数组,不能解析%windir%等变量
      扩展字符串:REG_EXPAND_SZ,简单字符串上增加解析%windir%等变量的功能
    • 数字(正整数)
      int32:REG_DWORD,双子节 0 - 4294967295(2^32-1)
      int64:REG_QWORD,四个字节 0 - (Math.Pow(2,64)-1)
    • 字节数组
      byte[]:REG_BINARY

    1.2.3 注册表项的默认值

    每个项都允许有一个默认值,它的以空字符串("")作为关键字的简单字符串(注意,不是扩展字符串),如果你设置了它就存在(可以遍历所有的数据,会发现""),没设置值的话它就不存在(遍历数据的时候不会看到"")

    二、c#读写注册表

    基于上面对注册表的分析,我们需要对注册表进行读写操作,主要应用RegistryKey对象,下面是我封装的注册表操作的帮助类,200多行,包含的判断、读取、写入等操作:

    using Microsoft.Win32;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    /* 注册表知识点:
     * 1. 注册表有5大根节点,所有的配置都在这5个下面,所以我们读写的path里都以5大根节点字符串开头(HKEY_LOCAL_MACHINE\\SOFTWARE\\FileZilla 3)
     * 2. 注册表中有项和值,项就像是文件夹、而值就像是一个Dictinary<string,byte[]/int32/int64/string/string[]>
     * 3. 注册表中值的类型
     *      字符串
     *          简单字符串:REG_SZ
     *          多行字符串:REG_MULTI_SZ,获取的是字符串数组,不能解析%windir%等变量
     *          扩展字符串:REG_EXPAND_SZ,简单字符串上增加解析%windir%等变量的功能
     *      数字(正整数)
     *          int32:REG_DWORD,双子节 0 - 4294967295(2^32-1)
     *          int64:REG_QWORD,四个字节 0 - (Math.Pow(2,64)-1)
     *      字节数组
     *          byte[]:REG_BINARY
     * 4. 注册表项的默认值
     *      每个项都允许有一个默认值,它的以空字符串("")作为关键字的简单字符串(注意,不是扩展字符串),如果你设置了它就存在(可以遍历所有的数据,会发现""),没设置值的话它就不存在(遍历数据的时候不会看到"")
     * 
     */
    
    namespace ConsoleApp24
    {
    
        public class RegistryUtil
        {
            #region 内部使用
            private static Dictionary<string, RegistryHive> roots = new Dictionary<string, RegistryHive>()
            {
                {"HKEY_CLASSES_ROOT",RegistryHive.ClassesRoot},
                {"HKEY_CURRENT_USER",RegistryHive.CurrentUser},
                {"HKEY_LOCAL_MACHINE",RegistryHive.LocalMachine},
                {"HKEY_USERS",RegistryHive.Users},
                {"HKEY_CURRENT_CONFIG",RegistryHive.CurrentConfig}
            };
            private RegistryKey GetRoot(string path)
            {
                if (string.IsNullOrWhiteSpace(path)) return null;
                path = path.Trim('\\', '/');
                foreach (var i in roots)
                {
                    if (path.StartsWith(i.Key))
                    {
                        return RegistryKey.OpenBaseKey(i.Value,
                                               Environment.Is64BitOperatingSystem
                                                   ? RegistryView.Registry64
                                                   : RegistryView.Registry32);
                    }
                }
                return null;
            }
            private static ValueTuple<string, RegistryKey> PrunePath(string path)
            {
                path = path.Trim('\\', '/').Replace('/', '\\');
                RegistryKey baseKey = null;
                foreach (var i in roots)
                {
                    if (path.StartsWith(i.Key))
                    {
                        baseKey = RegistryKey.OpenBaseKey(i.Value,
                                               Environment.Is64BitOperatingSystem
                                                   ? RegistryView.Registry64
                                                   : RegistryView.Registry32);
                        path = path.Substring(i.Key.Length).Trim('\\');
                        break;
                    }
                }
                if (baseKey == null)
                {
                    baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
                                               Environment.Is64BitOperatingSystem
                                                   ? RegistryView.Registry64
                                                   : RegistryView.Registry32);
                }
                return new ValueTuple<string, RegistryKey>(path, baseKey);
            }
            #endregion
    
            #region 判断、列出数据值的关键字、删除项或数据值
            /// <summary>
            /// 判断注册表项或值是否存在
            /// </summary>
            /// <param name="path">项路径</param>
            /// <param name="keyname">值的名称</param>
            /// <returns></returns>
            public static bool Exists(string path, string keyname = null)
            {
                var res = PrunePath(path);
                var root = res.Item2;
                path = res.Item1;
                RegistryKey key = root.OpenSubKey(path);
                if (key == null) return false;
                if (keyname == null) return true;
                return key.GetValueNames().ToList().Contains(keyname);
            }
    
            /// <summary>
            /// 返回注册项下的所有数据值名称,如果不存在这个项就返回null
            /// </summary>
            /// <param name="path">注册项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <returns></returns>
            public static List<string> ListDataKeys(string path)
            {
                var res = PrunePath(path);
                var root = res.Item2;
                path = res.Item1;
                RegistryKey key = root.OpenSubKey(path);
                if (key == null) return null;
                return key.GetValueNames().ToList();
            }
    
            /// <summary>
            /// 删除指定的项(包括子项和数据值)
            /// </summary>
            /// <param name="path">注册项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            public static void DeletePath(string path)
            {
                if (Exists(path))
                {
    
                    ValueTuple<string, RegistryKey> res = PrunePath(path);
                    path = res.Item1;
                    RegistryKey root = res.Item2;
                    root.DeleteSubKeyTree(path);
                }
            }
    
            /// <summary>
            /// 删除指定项下的指定数据值
            /// </summary>
            /// <param name="path">注册项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param keyname="keyname">注册项下的数据值关键字,如:teststring</param>
            public static void DeleteValue(string path, string keyname)
            {
                if (Exists(path, keyname))
                {
    
                    ValueTuple<string, RegistryKey> res = PrunePath(path);
                    path = res.Item1;
                    RegistryKey root = res.Item2;
                    RegistryKey key = root.OpenSubKey(path, true);
                    key.DeleteValue(keyname);
                }
            }
            #endregion
    
            #region 读取注册表的值
            private static object GetValue(string path, string keyname = "")
            {
                var res = PrunePath(path);
                var root = res.Item2;
                path = res.Item1;
                RegistryKey key = root.OpenSubKey(path);
                if (key == null) return null;
                var obj = key.GetValue(keyname);
                return obj;
            }
    
            /// <summary>
            /// 读取注册项下的字符串数据(REG_SZ和REG_EXPAND_SZ),如果keyname为空就是读取默认值
            /// </summary>
            /// <param name="path">项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据值名称,如:string_a</param>
            /// <returns></returns>
            public static string GetString(string path, string keyname = "")
            {
                var obj = GetValue(path, keyname);
                if (obj == null) return null;
                return obj as string;
            }
    
            /// <summary>
            /// 读取注册项下的字节数据(REG_BINARY)
            /// </summary>
            /// <param name="path">项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据值名称,如:binary_123456789</param>
            /// <returns></returns>
            public static byte[] GetByteArray(string path, string keyname)
            {
                var obj = GetValue(path, keyname);
                if (obj == null) return null;
                return obj as byte[];
            }
    
            /// <summary>
            /// 读取注册项下的字节数据(REG_DWORD)
            /// </summary>
            /// <param name="path">项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据值名称,如:dword</param>
            /// <returns></returns>
            public static Int32? GetInt32(string path, string keyname)
            {
                var obj = GetValue(path, keyname);
                if (obj == null) return null;
                return (Int32)obj;
            }
    
            /// <summary>
            /// 读取注册项下的字节数据(REG_QWORD)
            /// </summary>
            /// <param name="path">项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据值名称,如:qword</param>
            /// <returns></returns>
            public static Int64? GetInt64(string path, string keyname)
            {
                var obj = GetValue(path, keyname);
                if (obj == null) return null;
                return (Int64)obj;
            }
    
            /// <summary>
            /// 综合GetInt32和GetInt64方法,可以取出REG_DWORD和REG_QWORD类型的数据
            /// </summary>
            /// <param name="path">项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据值名称,如:testint</param>
            /// <returns></returns>
            public static int? GetInt(string path, string keyname)
            {
                var obj = GetValue(path, keyname);
                if (obj == null) return null;
                if (obj is Int32) return (int)obj;
                if (obj is Int64) return (int)(long)obj;
                return null;
            }
    
            /// <summary>
            /// 读取注册项下的字节数据(REG_MULTI_SZ)
            /// </summary>
            /// <param name="path">项路径,如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据值名称,如:string_multi</param>
            /// <returns></returns>
            public static string[] GetStringArray(string path, string keyname)
            {
                var obj = GetValue(path, keyname);
                if (obj == null) return null;
                return obj as string[];
            }
            #endregion
    
            #region 设置注册项的数据值
    
            private static void SetValue(string path, string keyname, object value, RegistryValueKind dataKind)
            {
                var res = PrunePath(path);
                var root = res.Item2;
                path = res.Item1;
                RegistryKey key = root.CreateSubKey(path, true);
                key.SetValue(keyname, value, dataKind);
            }
            /// <summary>
            /// 设置注册项的默认值,注意:如果指定的path不存在则会新建
            /// </summary>
            /// <param name="path">注册项路径,比如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="value">字符串,类型为REG_SZ</param>
            public static void SetDefault(string path, string value)
            {
                SetValue(path, "", value, RegistryValueKind.String);
            }
    
            /// <summary>
            /// 给指定注册项设置键值对(REG_SZ),注意:如果指定的path不存在则会新建
            /// </summary>
            /// <param name="path">注册项路径,比如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据的名称</param>
            /// <param name="value">数据值</param>
            public static void SetString(string path, string keyname, string value = "")
            {
                if (string.IsNullOrWhiteSpace(keyname)) throw new Exception("必须指定数据值的关键字,如果想设置【(默认)】,那么调用SetDefault(string path,string value)方法");
                SetValue(path, keyname, value, RegistryValueKind.String);
            }
    
            /// <summary>
            /// 给指定注册项设置键值对(REG_EXPAND_SZ),注意:如果指定的path不存在则会新建
            /// </summary>
            /// <param name="path">注册项路径,比如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据的名称</param>
            /// <param name="value">数据值,如:xiao%windir%ming</param>
            public static void SetStringExpand(string path, string keyname, string value = "")
            {
                if (string.IsNullOrWhiteSpace(keyname)) throw new Exception("必须指定数据值的关键字,如果想设置【(默认)】,那么调用SetDefault(string path,string value)方法");
                SetValue(path, keyname, value, RegistryValueKind.ExpandString);
            }
    
            /// <summary>
            /// 给指定注册项设置键值对(REG_MULTI_SZ),注意:如果指定的path不存在则会新建
            /// </summary>
            /// <param name="path">注册项路径,比如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据的名称</param>
            /// <param name="value">数据值,如:new string[2] { "xiaoming", "xi" }</param>
            public static void SetStringArray(string path, string keyname, string[] value)
            {
                if (string.IsNullOrWhiteSpace(keyname)) throw new Exception("必须指定数据值的关键字,如果想设置【(默认)】,那么调用SetDefault(string path,string value)方法");
                if (value == null) throw new Exception("必须指定一个数组!");
                SetValue(path, keyname, value, RegistryValueKind.MultiString);
            }
    
            /// <summary>
            /// 给指定注册项设置键值对(REG_DWORD),注意:如果指定的path不存在则会新建
            /// </summary>
            /// <param name="path">注册项路径,比如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据的名称</param>
            /// <param name="value">数据值,如:456</param>
            public static void SetInt32(string path, string keyname, Int32 value)
            {
                if (string.IsNullOrWhiteSpace(keyname)) throw new Exception("必须指定数据值的关键字,如果想设置【(默认)】,那么调用SetDefault(string path,string value)方法");
                SetValue(path, keyname, value, RegistryValueKind.DWord);
            }
    
            /// <summary>
            /// 给指定注册项设置键值对(REG_QWORD),注意:如果指定的path不存在则会新建
            /// </summary>
            /// <param name="path">注册项路径,比如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据的名称</param>
            /// <param name="value">数据值,如:789</param>
            public static void SetInt64(string path, string keyname, Int64 value)
            {
                if (string.IsNullOrWhiteSpace(keyname)) throw new Exception("必须指定数据值的关键字,如果想设置【(默认)】,那么调用SetDefault(string path,string value)方法");
                SetValue(path, keyname, value, RegistryValueKind.QWord);
            }
    
            /// <summary>
            /// 综合SetInt32和SetInt64,存储的是RED_DWORD类型,注意:如果指定的path不存在则会新建
            /// </summary>
            /// <param name="path">注册项路径,比如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据的名称</param>
            /// <param name="value">数据值,如:789</param>
            public static void SetInt(string path, string keyname, int value)
            {
                if (string.IsNullOrWhiteSpace(keyname)) throw new Exception("必须指定数据值的关键字,如果想设置【(默认)】,那么调用SetDefault(string path,string value)方法");
                SetValue(path, keyname, value, RegistryValueKind.DWord);
            }
    
            /// <summary>
            /// 给指定注册项设置键值对(REG_BINARY),注意:如果指定的path不存在则会新建
            /// </summary>
            /// <param name="path">注册项路径,比如:HKEY_CURRENT_CONFIG\test\test1</param>
            /// <param name="keyname">数据的名称</param>
            /// <param name="value">数据值,如:new byte[2] { 0x20, 0x45 }</param>
            public static void SetByteArray(string path, string keyname, byte[] value)
            {
                if (string.IsNullOrWhiteSpace(keyname)) throw new Exception("必须指定数据值的关键字,如果想设置【(默认)】,那么调用SetDefault(string path,string value)方法");
                SetValue(path, keyname, value, RegistryValueKind.Binary);
            }
            #endregion
        }
    }
    
    展开全文
  • windows设置自启动
  • windows注册表有什么用?

    万次阅读 多人点赞 2019-09-21 16:42:50
    什么是注册表注册表有什么用?
  • 教程名称:完完全全学习注册表系列视频课程课程目录:【】利用Reg.exe编写批处理【】剖析注册表文件体系【】实战修改备份注册表(20例)【】控制台注册表编辑【】注册表概念介绍【】系统安全设置及注册表工具的使用...
  • C#对Windows注册表的操作 二十多年的企业管理软件开发经历,熟知管理软...
  • Windows XP注册表修改精粹,教程注册表的操作。@编程图文资料。
  • 注册表出错时你是否为没有成套的注册表工具而痛苦?从今天起,你的一切烦恼与...从这里将向您介绍本站精心收集和整理的一些有关 WINDOWS 9X/ME/NT/2000/XP 的资料、工具,和实例详解。 希望能对您的学习和使用有些帮助
  • windows注册表学习应用教程...
  • WPTweaker 这是Windows Phone 8.1和Windows 10 Mobile的第一个基于XML模板的注册表调节器。 您可以通过修改XML数据文件轻松添加新的hack。 此应用只能在互锁的Lumias和Samsung手机上使用。 WPTweaker的用户界面非常...
  • 第5篇 电脑管家 第5篇 电脑管家注册表与BIOS设置 第19 第19章 Windows XP/7注册表设置经典案例 PAGE 298 PAGE 299 第 19章 Windows XP/7注册表设置 经典案例 注册表是操作系统中功能强大的数据库它对系统起着...
  • 本文实例讲述了Python实现操纵控制windows注册表的方法。分享给大家供大家参考,具体如下:使用_winreg模块的话基本概念:KEY 键Value 值函数和作用:CloseKey() - 关闭一个KeyConnectRegistry() - 链接到其他机器的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,609
精华内容 6,243
关键字:

windows注册表教程