windows@注册表介绍@注册表的查看和编辑操作

news2024/12/25 12:18:03

文章目录

    • abstract
    • refs
    • 注册表的主要组件包括
      • 根键极其缩写名称👺
      • 子键
      • 特性
    • 查看注册表👺
      • 使用powershell查看路径下的子路径
        • 声明概念
        • Get-ChildItem查看注册表路径下的项
        • Set-Location进入注册表路径
        • 举例说明
          • 查看文件系统某个路径下的项
          • 查看某个注册表路径的项
        • cd进注册表路径
      • 查看指定路径下的属性或键值对
        • Get-ItemProperty
        • Get-ItemPropertyValue
        • 联系
        • 小结
      • 使用CMD命令提示符查看
    • 修改注册表👺
    • 拓展和补充
      • 注册表结构
        • 注册表值类型的列表👺
        • 键的命名
      • 两个结构相似的键
        • 常用键的特点和用途
      • hive

abstract

  • Windows注册表是Microsoft Windows操作系统中的一个核心数据库,用于存储系统和应用程序的设置信息。
    • 早在Windows 3.0推出OLE技术时,注册表就已经出现,但直到Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用。
    • 注册表在整个系统中起着核心作用,直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行。
  • 本文介绍注册表的基本信息和查看操作,修改注册表的方法详见参考文档
  • 声明:作为一个学习者的初步学习记录,本文可能出现许多不准确的地方

refs

主要来自Microsoft官方文档和wikipedia,前者建明扼要,后者介绍了其他一些相关信息

  • Windows registry for advanced users - Windows Server | Microsoft Learn
  • Windows Registry - Wikipedia

注册表的主要组件包括

根键极其缩写名称👺

  1. 根键(Root Keys):注册表的顶级层次

    1. HKEY_CLASSES_ROOT (HKCR):包含文件扩展名与相应应用程序之间的关联信息,以及系统中注册的COM组件和类的信息。
    2. HKEY_CURRENT_USER (HKCU):存储当前用户的个人配置信息,如桌面背景、文件夹选项等。
    3. HKEY_LOCAL_MACHINE (HKLM):存储计算机的全局配置信息,如硬件、操作系统设置等。
    4. HKEY_USERS (HKU):存储每个用户的配置信息,每个用户都有一个对应的子键。
    5. HKEY_CURRENT_CONFIG (HKCC):存储当前计算机的硬件配置信息。
  2. 相关路径:

    • Windows注册表的文件通常存储在“C:\Windows\System32\config”文件夹中

      • 利用管理员权限,可以看到

      • PS C:\Windows\System32> Get-ChildItem .\config\
        
            Directory: C:\Windows\System32\config
        
        Mode                 LastWriteTime         Length Name
        ----                 -------------         ------ ----
        d----            2024/4/5    11:06                BFS
        d----            2022/5/7    13:24                Journal
        d----            2022/5/7    13:24                RegBack
        d----            2022/5/7    13:24                systemprofile
        d----            2024/4/5    11:22                TxR
        -a---           2024/5/10    23:05         786432 BBI
        -a---            2024/4/5    12:05          28672 BCD-Template
        -a---           2024/5/11     9:35       35651584 COMPONENTS
        -a---           2024/5/10    23:05        1310720 DEFAULT
        -a---           2024/5/11     9:30        8232960 DRIVERS
        -a---            2024/4/5    11:13          32768 ELAM
        -a---           2024/5/10    23:05         131072 SAM
        -a---           2024/5/10    23:05          65536 SECURITY
        -a---           2024/5/10    23:05      105119744 SOFTWARE
        -a---           2024/5/10    23:05       18612224 SYSTEM
        -a---            2024/4/4    20:00           8192 userdiff
        -a---            2024/5/3    21:19           1623 VSMIDK
        
    • 包含的条目中部分和使用regedit看到的Computer\HKEY_LOCAL_MACHINE的条目是一样的

子键

  1. 子键和值:每个键可以有多个子键,形成一个树状结构。每个键或子键下可以有多个值项,每个值项由名称、类型和数据组成,用于具体存储配置信息。

特性

  1. 安全性:注册表支持访问控制列表(ACLs),允许管理员对不同用户或组设定访问权限,以增强系统的安全性。
  2. 备份与恢复:由于注册表对于系统运行至关重要,定期备份注册表以及在出现问题时能够恢复是非常重要的。Windows提供了如regedit这样的工具来进行手动备份和编辑操作。
  3. 注册表在Windows操作中的作用:从决定系统启动时加载哪些驱动程序,到控制用户界面的外观和行为,再到保存应用程序的设置信息,注册表几乎涉及Windows操作的每一个方面。

尽管注册表是一个强大的配置工具,但由于其复杂性,现代应用程序和系统越来越多地采用更易于管理和故障排查的配置文件和API,以减少对注册表的依赖。

查看注册表👺

为了便于说明,以注册表路径computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\profileList为例

  • 查看注册表分为两层含义
    • 一个是查看注册表某个路径下的键值对
    • 另一个是查看注册表某个路径下的子路径或子键

使用powershell查看路径下的子路径

声明概念
  • 注册表中,某个路径下可能有子路径键值对(Key-Value pair)(或者称为属性值对(Property-value pair)),可分别类比文件管理中的子目录和文件
  • 为了方便讨论注册表的路径(地址),我们不妨约定以下称呼
    • 不能再创建或打开下一层的路径称为键值对(或称为叶子路径)
    • 否则称为非叶路径
Get-ChildItem查看注册表路径下的项

Get-ChildItem(简写为ls)功能简介是:获取一个或多个指定位置中的项和子项。

  • 这里的指定位置不仅可以是文件系统的位置,也可以是注册表的位置(路径)

  • 在这里插入图片描述

  • 使用regedit注册表编辑器,打开示例路径Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print,我们也可以用简写HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print粘贴到regedit 界面的地址栏,回车跳转到该注册表路径

Set-Location进入注册表路径

使用Set-Location(简写为cd)命令也不仅可以切换当前工作目录为某个磁盘路径,也可以还注册表路径

举例说明
查看文件系统某个路径下的项
PS[BAT:84%][MEM:32.49% (10.30/31.70)GB][22:11:45]
# [~\Desktop]
PS> ls

        Directory: C:\Users\cxxu\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---         2024/1/17     10:31           1411   blogs_home.lnk
-a---          2024/5/6     23:49          16879 󰈬  clipboard.docx
-a---         2024/4/30     12:08            700   DCIM.lnk
-a---         2024/4/16     12:10           1453   EM.lnk
-a---         2024/4/28     12:04           1007   linux_blogs.lnk
-a---         2024/4/16     12:10           1439   Math.lnk
-a---         2024/5/11     18:21        1304087   README.pdf
-a---          2024/5/7     22:02           8063   scratch@bugs.md
-a---         2024/3/22     16:35           1421   Todo.lnk


PS[BAT:84%][MEM:32.46% (10.29/31.70)GB][22:11:46]
# [~\Desktop]
PS> ls $env:USERPROFILE/desktop

        Directory: C:\Users\cxxu\Desktop


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---         2024/1/17     10:31           1411   blogs_home.lnk
-a---          2024/5/6     23:49          16879 󰈬  clipboard.docx
-a---         2024/4/30     12:08            700   DCIM.lnk
-a---         2024/4/16     12:10           1453   EM.lnk
-a---         2024/4/28     12:04           1007   linux_blogs.lnk
-a---         2024/4/16     12:10           1439   Math.lnk
-a---         2024/5/11     18:21        1304087   README.pdf
-a---          2024/5/7     22:02           8063   scratch@bugs.md
-a---         2024/3/22     16:35           1421   Todo.lnk

查看某个注册表路径的项
PS> ls -Path 'registry::\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'

    Hive: \HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

Name                           Property
----                           --------
S-1-5-18                       Flags            : 12
                               ProfileImagePath : C:\WINDOWS\system32\config\systemprofile
                               RefCount         : 1
                               Sid              : {1, 1, 0, 0…}
                               State            : 0
S-1-5-19                       Flags            : 0
                               ProfileImagePath : C:\WINDOWS\ServiceProfiles\LocalService
                               State            : 0
S-1-5-20                       Flags            : 0
                               ProfileImagePath : C:\WINDOWS\ServiceProfiles\NetworkService
                               State            : 0
S-1-5-21-1150093504-2233723087 ProfileImagePath                        : C:\Users\cxxu
-916622917-1001                Flags                                   : 0
                               State                                   : 0
                               Sid                                     : {1, 5, 0, 0…}
                               FullProfile                             : 1
                               Migrated                                : {112, 102, 234, 92…}
                               LocalProfileLoadTimeLow                 : 1937225814
                               LocalProfileLoadTimeHigh                : 31105858
                               ProfileAttemptedProfileDownloadTimeLow  : 0
                               ProfileAttemptedProfileDownloadTimeHigh : 0
                               ProfileLoadTimeLow                      : 0
                               ProfileLoadTimeHigh                     : 0
                               RunLogonScriptSync                      : 0
                               LocalProfileUnloadTimeLow               : 2347813882
                               LocalProfileUnloadTimeHigh              : 31105771
  • 这个例子中,还可以写成:ls -path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
  • 这里的路径同样是注册表路径,ls能够认出来HKLM等根键开头并以冒号引出的路径,就是一个注册表的路径
  • 这和常见的C盘路径类似:ls C:\...,只不过路径的开头是磁盘驱动器分区盘符,而不是注册表或注册表的某个根键名(简写)
cd进注册表路径
  • PS[BAT:84%][MEM:32.28% (10.23/31.70)GB][22:25:12]
    # [~]
    PS> cd -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
    
    PS[BAT:84%][MEM:32.28% (10.23/31.70)GB][22:25:14]
    # [HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList]
    PS>
    

    可以看到,路径从磁盘上的家目录~跳转到了注册表的路径HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

  • 在注册表路径中也可以用ls来执行文件系统上许多类似的操作,例如查看路径下有哪些子路径,可以指定是否显示绝对路径

    PS[BAT:84%][MEM:32.31% (10.24/31.70)GB][22:23:38]
    # [HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList]
    PS> ls |select pschildName
    
    PSChildName
    -----------
    S-1-5-18
    S-1-5-19
    S-1-5-20
    S-1-5-21-1150093504-2233723087-916622917-1001
    S-1-5-21-1150093504-2233723087-916622917-1003
    
    
    PS[BAT:84%][MEM:32.29% (10.23/31.70)GB][22:24:13]
    # [HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList]
    PS> ls |select name
    
    Name
    ----
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-18
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-19
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-20
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1150093504-2233723087-916622917-1001
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1150093504-2233723087-916622917-1003
    

查看指定路径下的属性或键值对

  • Get-ItemPropertyValue (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn

  • Get-ItemProperty (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn

  • 在PowerShell中,Get-ItemPropertyGet-ItemPropertyValue 都是用于获取项的属性值,但它们之间存在一些差异

Get-ItemProperty
  • 功能:此cmdlet用于获取指定路径下项的所有属性及其对应的值。当你需要查看某个路径下对象(如文件、注册表项)的所有属性时,它非常有用。
  • 返回类型:它返回的是一个包含多个属性名称和其对应值的对象(通常是一个哈希表或PSObject)。这意味着,如果你只关心某个特定属性,你还需进一步处理返回的结果来提取该属性的值。
  • 使用场景:适用于当你想要获取并可能进一步操作或筛选一个项的多个属性时。

示例:

# 获取一个文件的属性
New-Item demofile
Get-ItemProperty -Path "./demofile"
# 获取注册表项的属性
Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'

创建一个文件并获取其属性

PS> New-Item demofile

        Directory: C:\Users\cxxu\AppData\Roaming\Typora\themes


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---         2024/5/11     18:36              0   demofile

PS>$fileProperties=Get-ItemProperty -Path "./demofile"
#默认不会显示所有属性(数量较多时)
PS>$fileProperties

        Directory: C:\Users\cxxu\AppData\Roaming\Typora\themes


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---         2024/5/11     18:36              0   demofile

获取所有属性

PS> $fileProperties|select *

PSPath              : Microsoft.PowerShell.Core\FileSystem::C:\Users\cxxu\AppData\Roaming\Typora\themes\demofile
PSParentPath        : Microsoft.PowerShell.Core\FileSystem::C:\Users\cxxu\AppData\Roaming\Typora\themes
PSChildName         : demofile
....
ppData\Roaming\Typora\themes\demofile
Extension           :
CreationTime        : 2024/5/11 18:36:35
CreationTimeUtc     : 2024/5/11 10:36:35
LastAccessTime      : 2024/5/11 18:36:35
LastAccessTimeUtc   : 2024/5/11 10:36:35
LastWriteTime       : 2024/5/11 18:36:35
LastWriteTimeUtc    : 2024/5/11 10:36:35
LinkTarget          :
UnixFileMode        : -1
Attributes          : Archive
PS> Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'

SystemRoot                : C:\WINDOWS
BaseBuildRevisionNumber   : 1
BuildBranch               : ni_release
BuildGUID                 : ffffffff-ffff-ffff-ffff-ffffffffffff
BuildLab                  : 22621.ni_release.220506-1250
BuildLabEx                : 22621.1.amd64fre.ni_release.220506-1250
...

PSParentPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT
PSChildName               : CurrentVersion
PSDrive                   : HKLM
PSProvider                : Microsoft.PowerShell.Core\Registry

Get-ItemPropertyValue
  • 功能:此cmdlet设计用于直接获取指定路径下项的特定属性值。相比Get-ItemProperty,它更加专注于单一属性的快速检索。
  • 返回类型:它直接返回所请求属性的值,而不是一个包含多个属性的哈希表或对象。这使得代码更简洁,特别是在只需要某一个属性值的场合。
  • 使用场景:当你确切知道要获取哪个属性,并且只需要那个属性的值时,使用这个cmdlet更加高效。

示例:

# 获取文件的“CreationTime”属性值
$fileCreationTime = Get-ItemPropertyValue -Path "C:\path\to\file.txt" -Name CreationTime
# 获取注册表项的“CurrentVersion”属性值
$registryVersion = Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name CurrentVersion

问题在于如何知道Name参数可以接受哪些值(属性名称),我们可以用Get-ItemProperty检查路径,然后对返回的结果使用|select *来获取所有属性;从而得知可用的属性名字,作为Get-ItemPropertyValue的Name参数

总结来说,选择使用哪个cmdlet取决于你的具体需求:如果你需要查看或操作多项属性,应使用Get-ItemProperty;如果你的目标明确,只需获取一个特定属性的值,则Get-ItemPropertyValue更为直接和方便。

联系

从结果上看,Get-ItemPropertyValue可以看作是Get-ItemProperty 传递给管道符|select Property的结果

但是后者会有一个Format-Table格式化输出的显示效果

#使用Get-ItempropertyValue获取某个路径的某个属性的值
PS> Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' -Name ProfilesDirectory

C:\Users

#效果类似于
PS> $property=Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'
PS> $property.ProfilesDirectory
C:\Users

#或者使用管道符过滤select Property
PS> Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' |select ProfilesDirectory

ProfilesDirectory
-----------------
C:\Users
小结
  • 使用powershell中的gp,gpv命令时,使用HKLM:\...的格式来输入注册表的路径(Path参数)

    • 例如HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion
  • 如果要在regedit中的地址栏输入,则需要去掉:,即输入HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,否则无法跳转

  • 对于命令行工具reg,也和regedit一样需要去掉:,并且还要加上引号(为了防止路径中有空格,导致错误的解析),例如

    • PS> reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v currentversion
      
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
          currentversion    REG_SZ    6.3
      
      

使用CMD命令提示符查看

  • 如果为了兼容老系统,你可以使用reg query命令来查询注册表:

    • reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"	
      
  • 这条命令会显示指定注册表路径下的子项和值。以我的机器为例,输出为:

    • PS> reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
      
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
          Default    REG_EXPAND_SZ    %SystemDrive%\Users\Default
          ProfilesDirectory    REG_EXPAND_SZ    %SystemDrive%\Users
          ProgramData    REG_EXPAND_SZ    %SystemDrive%\ProgramData
          Public    REG_EXPAND_SZ    %SystemDrive%\Users\Public
      
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-18
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-19
      ...
      
  • 请确保你在执行这些命令时拥有足够的权限,因为访问某些注册表键可能需要管理员权限。如果遇到权限问题,你可能需要以管理员身份运行PowerShell或CMD。

修改注册表👺

  • 操作注册表时应当慎重,因为不当的修改可能会导致系统故障。如果不熟悉注册表的操作,建议尽量不要随意修改。

  • 如果需要修改注册表,可以使用Windows操作系统自带的注册表编辑器(regedit),或者通过一些系统辅助软件来进行。

  • 也可以用系统自带的命令行工具reg来修改,通过reg /?来获取使用帮助,或则在线搜索

  • 详情查看文档:Windows registry for advanced users - Windows Server | Microsoft Learn

  • 相关的powershell函数:Set-ItemProperty (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn

拓展和补充

  • 主要来自于wikipedia

注册表结构

  • 注册表值是存储在键内的名称/数据对。注册表值与注册表键分开引用。存储在注册表键中的每个注册表值都有一个唯一的名称,其字母大小写不显著。查询和操作注册表值的 Windows API 函数将值名称与标识父键的键路径或句柄分开。
  • 注册表值的名称中可能包含反斜杠,但这样做会使它们在使用某些旧版 Windows 注册表 API 函数时难以与它们的键路径区分开来(这些函数的使用在 Win32 中已弃用)。
  • 术语有点误导,因为每个注册表键类似于一个关联数组,标准术语会将每个注册表值的名称部分称为“键”。这些术语是从 Windows 3 的 16 位注册表延续下来的,在 Windows 3 中,注册表键不能包含任意名称/数据对,而是只包含一个未命名的值(必须是字符串)。在这个意义上,Windows 3 注册表就像是一个单一的关联数组,其中键(在“注册表键”和“关联数组键”的意义上)形成了一个层次结构,注册表值都是字符串。当创建 32 位注册表时,也增加了为每个键创建多个命名值的能力,并且名称的含义有些扭曲。
  • 每个值可以存储任意数据,长度可变,并且编码可变,但与一个符号类型相关联(定义为一个数值常量),该类型定义了如何解析这些数据。标准类型为:
注册表值类型的列表👺

以下表格来自官方文档,可以结合wikipedia查看

NameData typeDescription
Binary ValueREG_BINARYRaw binary data. Most hardware component information is stored as binary data and is displayed in Registry Editor in hexadecimal format.
DWORD ValueREG_DWORDData represented by a number that is 4 bytes long (a 32-bit integer). Many parameters for device drivers and services are this type and are displayed in Registry Editor in binary, hexadecimal, or decimal format. Related values are DWORD_LITTLE_ENDIAN (least significant byte is at the lowest address) and REG_DWORD_BIG_ENDIAN (least significant byte is at the highest address).
Expandable String ValueREG_EXPAND_SZA variable-length data string. This data type includes variables that are resolved when a program or service uses the data.
Multi-String ValueREG_MULTI_SZA multiple string. Values that contain lists or multiple values in a form that people can read are generally this type. Entries are separated by spaces, commas, or other marks.
String ValueREG_SZA fixed-length text string.
Binary ValueREG_RESOURCE_LISTA series of nested arrays that is designed to store a resource list that is used by a hardware device driver or one of the physical devices it controls. This data is detected and written in the \ResourceMap tree by the system and is displayed in Registry Editor in hexadecimal format as a Binary Value.
Binary ValueREG_RESOURCE_REQUIREMENTS_LISTA series of nested arrays that is designed to store a device driver’s list of possible hardware resources the driver or one of the physical devices it controls can use. The system writes a subset of this list in the \ResourceMap tree. This data is detected by the system and is displayed in Registry Editor in hexadecimal format as a Binary Value.
Binary ValueREG_FULL_RESOURCE_DESCRIPTORA series of nested arrays that is designed to store a resource list that is used by a physical hardware device. This data is detected and written in the \HardwareDescription tree by the system and is displayed in Registry Editor in hexadecimal format as a Binary Value.
NoneREG_NONEData without any particular type. This data is written to the registry by the system or applications and is displayed in Registry Editor in hexadecimal format as a Binary Value
LinkREG_LINKA Unicode string naming a symbolic link.
QWORD ValueREG_QWORDData represented by a number that is a 64-bit integer. This data is displayed in Registry Editor as a Binary Value and was introduced in Windows 2000.

类型 ID 符号类型名称 存储在注册表值中的数据的含义和编码

  • 0 REG_NONE 无类型(存储的值,如果有的话)
  • 1 REG_SZ 一个字符串值,通常以 UTF-16LE 存储和公开(当使用 Win32 API 函数的 Unicode 版本时),通常以 NUL 字符终止
  • 2 REG_EXPAND_SZ 一个“可扩展的”字符串值,可以包含环境变量,通常以 UTF-16LE 存储和公开,通常以 NUL 字符终止
  • 3 REG_BINARY 二进制数据(任何任意数据)
  • 4 REG_DWORD / REG_DWORD_LITTLE_ENDIAN 一个 DWORD 值,一个 32 位无符号整数(数字在 0 到 4,294,967,295 [2^32 – 1] 之间)(小端)
  • 5 REG_DWORD_BIG_ENDIAN 一个 DWORD 值,一个 32 位无符号整数(数字在 0 到 4,294,967,295 [2^32 – 1] 之间)(大端)
  • 6 REG_LINK 到另一个注册表键的符号链接(UNICODE),指定一个根键和目标键的路径
  • 7 REG_MULTI_SZ 一个多字符串值,这是一个非空字符串的有序列表,通常以 Unicode 存储和公开,每个字符串以 null 字符终止,列表通常以第二个 null 字符终止。
  • 8 REG_RESOURCE_LIST 一个资源列表(由即插即用硬件枚举和配置使用)
  • 9 REG_FULL_RESOURCE_DESCRIPTOR 一个资源描述符(由即插即用硬件枚举和配置使用)
  • 10 REG_RESOURCE_REQUIREMENTS_LIST 一个资源需求列表(由即插即用硬件枚举和配置使用)
  • 11 REG_QWORD / REG_QWORD_LITTLE_ENDIAN 一个 QWORD 值,一个 64 位整数(大端或小端,或未指定)(在 Windows 2000 中引入)
键的命名
  • 在注册表的根级别键通常以其 Windows API 定义的名称命名,所有名称都以“HKEY”开头。 它们经常被缩写为以“HK”开头的三到四个字母的短名称(例如 HKCU 和 HKLM)。
  • 技术上,它们是特定键的预定义句柄(具有已知的常数值),这些键要么在内存中维护,要么存储在本地文件系统中的文件中,并在系统启动时由系统内核加载,然后在本地系统上运行的所有进程之间共享(具有各种访问权限),或在用户登录系统时在所有进程中加载和映射。

两个结构相似的键

  • HKEY_LOCAL_MACHINE(本地计算机特定配置数据)和 HKEY_CURRENT_USER(用户特定配置数据)节点具有彼此相似的结构;
    • 用户应用程序通常首先在“HKEY_CURRENT_USER\Software\Vendor’s name\Application’s name\Version\Setting name”下查找它们的设置,如果找不到设置,则改为在 HKEY_LOCAL_MACHINE 键下的相同位置查找。
    • 然而,对于管理员强制执行的策略设置,HKLM 可能优先于 HKCU。Windows Logo 程序对不同类型的用户数据可能存储的位置有特定要求,并遵循最小权限的概念,以便使用应用程序不需要管理员级别的访问。
常用键的特点和用途
  1. 缩写为 HKLM 的 HKEY_LOCAL_MACHINE 存储特定于本地计算机的设置。
    • 由 HKLM 定位的键实际上并不存储在磁盘上,而是由系统内核在内存中维护,以映射所有其他子键
    • 应用程序不能创建任何额外的子键。
    • 在 Windows NT 上,此键包含在启动时加载的四个子键,“SAM”、“SECURITY”、“SYSTEM”和“SOFTWARE”,它们分别位于 %SystemRoot%\System32\config 文件夹中的各自文件中。
    • 第五个子键“HARDWARE”是易变的,是动态创建的,因此不存储在文件中(它暴露了所有当前检测到的即插即用设备)。
    • 在 Windows Vista 及更高版本上,第六个和第七个子键“COMPONENTS”和“BCD”由内核按需在内存中映射,并从 %SystemRoot%\system32\config\COMPONENTS 或系统分区上的启动配置数据 \boot\BCD 加载。
    • “HKLM\SAM”键对大多数用户来说通常看起来是空的(除非他们被本地系统的管理员或管理本地系统的域的管理员授予访问权限)。它用于引用所有“安全帐户管理器”(SAM)数据库,本地系统已经获得或配置了行政授权的所有域(包括运行系统的本地域,其 SAM 数据库存储在也命名为“SAM”的子键中:将根据需要创建其他子键,每个子键对应一个辅助域)。
    • 每个 SAM 数据库包含所有内置帐户(主要是组别名)和配置帐户(用户、组及其别名,包括来宾帐户和管理员帐户),在相应域上创建和配置的每个帐户,它显著地包含可用于登录该域的用户名,该域内的唯一内部用户标识符,每个用户密码的每个启用的身份验证协议的密码的加密哈希函数的加密哈希,他们用户注册表hive的存储位置,各种状态标志(例如,如果帐户可以枚举并在登录提示屏幕上可见),以及帐户配置的域列表(包括本地域)。
    • “HKLM\SECURITY”键对大多数用户来说通常看起来是空的(除非他们被具有管理特权的用户授予访问权限),并且与当前用户登录的域的安全数据库相关联(如果用户登录到本地系统域,该键将链接到由本地机器管理和由本地系统管理员或内置的“系统”帐户和 Windows 安装程序管理的存储在本地机器上的注册表hive)。内核将访问它以读取和强制适用于当前用户和所有由该用户执行的应用程序或操作的安全策略。它还包含一个动态链接到当前用户登录的域的 SAM 数据库的“SAM”子键。
    • “HKLM\SYSTEM”键通常只能由本地系统上的具有管理特权的用户编写。它包含有关 Windows 系统设置的信息,安全随机数生成器(RNG)的数据,包含文件系统的当前安装设备的列表,几个编号的“HKLM\SYSTEM\Control Sets”包含本地系统上运行的系统硬件驱动程序和服务的备用配置(包括当前使用的和备份的),一个包含这些 Control Sets 状态的“HKLM\SYSTEM\Select”子键,以及在启动时动态链接到本地系统上当前使用的 Control Set 的“HKLM\SYSTEM\CurrentControlSet”。每个配置的 Control Set 包含:
      • 一个“Enum”子键,它枚举所有已知的即插即用设备并将它们与安装的系统驱动程序关联(并存储这些驱动程序的设备特定配置),
      • 一个“Services”子键,列出所有安装的系统驱动程序(带有非设备特定的配置,以及它们实例化的设备的枚举)以及所有作为服务运行的程序(它们如何以及何时可以被自动启动),
      • 一个“Control”子键,用于组织各种硬件驱动程序和作为服务运行的程序以及所有其他系统范围的配置,
      • 一个“Hardware Profiles”子键,枚举已经调整的各种配置文件(每个配置文件都有“System”或“Software”设置,用于修改默认配置文件,无论是在系统驱动程序和服务还是在应用程序中)以及“Hardware Profiles\Current”子键,该子键动态链接到这些配置文件中的一个。
    • “HKLM\SOFTWARE”子键包含软件和 Windows 设置(在默认硬件配置文件中)。它主要由应用程序和系统安装程序修改。它按软件供应商组织(每个供应商都有一个子键),但也包含一些 Windows 用户界面设置的“Windows”子键,一个包含所有从文件扩展名、MIME 类型、对象类 ID 和接口 ID(用于 OLE、COM/DCOM 和 ActiveX)到可以处理这些类型的本地机器上安装的应用程序或 DLL 的注册关联的“Classes”子键,以及一个用于在应用程序和服务上强制执行一般使用策略的“Policies”子键(也按供应商组织,包括用于认证、授权或禁止远程系统或服务的中央证书存储,这些系统或服务在本地网络域之外运行)。“HKLM\SOFTWARE\Wow6432Node”键由 64 位 Windows OS 上的 32 位应用程序使用,并且等同于但与“HKLM\SOFTWARE”分开。对于 32 位应用程序,WoW64 将键路径透明地呈现为 HKLM\SOFTWARE(类似于 32 位应用程序将 %SystemRoot%\Syswow64 视为 %SystemRoot%\System32 的方式)。
  2. 缩写为 HKCR 的 HKEY_CLASSES_ROOT 包含有关注册应用程序的信息,例如文件关联和 OLE 对象类 ID,将它们与用于处理这些项目的应用程序联系起来。在 Windows 2000 及以上版本中,HKCR 是基于用户的 HKCU\Software\Classes 和基于机器的 HKLM\Software\Classes 的编译。如果给定值在上述两个子键中都存在,则 HKCU\Software\Classes 中的值优先。 该设计允许对 COM 对象进行机器或用户特定的注册。
  3. 缩写为 HKU 的 HKEY_USERS 包含对应于机器上积极加载的每个用户配置文件的 HKEY_CURRENT_USER 键的子键,尽管用户 hive 文件通常只在当前登录的用户中加载。
  4. 缩写为 HKCU 的 HKEY_CURRENT_USER 存储特定于当前登录用户设置。 HKEY_CURRENT_USER 键是指向 HKEY_USERS 中对应于用户的子键的链接;相同的信息可以在两个位置访问。
    • 引用的特定子键是“(HKU)\(SID)\…”,其中 (SID) 对应于 Windows SID;如果“(HKCU)”键具有后缀“(HKCU)\Software\Classes\…”,则它对应于“(HKU)\(SID)_CLASSES\…”,即后缀字符串“_CLASSES”附加到 (SID)。
    • 在 Windows NT 系统上,每个用户的设置存储在他们自己的文件中,称为 NTUSER.DAT 和 USRCLASS.DAT,位于他们自己的文档和设置子文件夹中(或在 Windows Vista 及以上版本中他们自己的用户子文件夹中)。设置在此 hive 中的用户将随着漫游配置文件从一台机器移动到另一台机器。
  5. HKEY_PERFORMANCE_DATA:此键提供由 NT 内核本身或提供性能数据的正在运行的系统驱动程序、程序和服务提供的性能数据的运行时信息。此键不存储在任何 hive 中,也不显示在注册表编辑器中,但可以通过 Windows API 中的注册表函数或通过任务管理器的性能选项卡(仅限本地系统上的一些性能数据)或通过更高级的控制面板(例如性能监视器或性能分析器,允许收集和记录这些数据,包括来自远程系统的数据)以简化视图查看。
  6. HKEY_DYN_DATA:此键仅在 Windows 95、Windows 98 和 Windows ME 中使用。 它包含有关硬件设备的信息,包括即插即用和网络性能统计信息。此 hive 中的信息也不存储在硬盘上;即插即用信息在启动时收集和配置,并存储在内存中。

hive

  1. 尽管注册表呈现为一个集成的分层数据库,但注册表的分支实际上存储在称为hive的几个磁盘文件中。(“hive”这个词构成了一个内部玩笑。)

  2. 一些hive是易变的,根本不存储在磁盘上。一个例子是 HKLM\HARDWARE 开始的分支的hive。该 hive 记录有关系统硬件的信息,并在每次系统启动并执行硬件检测时创建。

  3. 系统上用户的个别设置存储在每个用户的hive(磁盘文件)中。在用户登录期间,系统加载用户 hive 并在 HKEY_USERS 键下设置 HKCU(HKEY_CURRENT_USER)符号引用,以指向当前用户。这允许应用程序在 HKCU 键下隐式地为当前用户存储/检索设置。

  4. 并非所有hive都会在任何时候加载。在启动时,只加载最小集的hive,之后,随着操作系统初始化和用户登录或应用程序显式加载hive,hive将被加载。

每个用户的hive(磁盘文件)中。在用户登录期间,系统加载用户 hive 并在 HKEY_USERS 键下设置 HKCU(HKEY_CURRENT_USER)符号引用,以指向当前用户。这允许应用程序在 HKCU 键下隐式地为当前用户存储/检索设置

每个用户的hive(磁盘文件)中。在用户登录期间,系统加载用户 hive 并在 HKEY_USERS 键下设置 HKCU(HKEY_CURRENT_USER)符号引用,以指向当前用户。这允许应用程序在 HKCU 键下隐式地为当前用户存储/检索设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1665843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统分析师论文——论软件需求分析方法和工具的选用

现已临近2024年软考,周围一些报名参加系统分析师考试的“小伙伴”还未准备论文,我分享早年写的一些内容(包括参加继续教育准备的论文),仅供大家结合最新考纲要求酌情参考,希望予人玫瑰,手有余香…

【CTF MISC】XCTF GFSJ0513 pdf Writeup(PDF隐写)

pdf 菜猫给了菜狗一张图,说图下面什么都没有 解法 打开 pdf,只看见一张图片。 用浏览器搜索 flag,发现图片中间藏了一行字。 复制出来,得到 flag。 Flag flag{security_through_obscurity}声明 本博客上发布的所有关于网络攻…

Arduino-ILI9341驱动开发TFT屏显示任意内容三

Arduino-ILI9341驱动开发TFT屏显示任意内容三 1.概述 这篇文章介绍使用ILI9341驱动提供的函数控制TFT屏显示字符串、图形、符号等等内容的编辑和展示。 2.硬件 2.1.硬件列表 名称数量Arduino Uno12.8" TFT彩色液晶触摸屏模块(ILI9431)110K 电阻…

从JSON数据到Pandas DataFrame:如何解析出所需字段

目录 一、引言 二、JSON数据的基本结构 三、使用Pandas从JSON数据中读取数据 四、从DataFrame中解析出所需字段 解析对象字段 解析嵌套对象字段 解析数组字段 五、案例与代码示例 六、总结 一、引言 在数据分析和处理的日常工作中,我们经常需要从各种…

基于单片机的空气质量检测系统设计(51+4G版)-设计说明书

设计摘要: 本设计是基于单片机的空气质量检测系统设计涉及以下主要功能,旨在监测甲烷和一氧化碳的浓度,并在浓度过高时采取相应措施,以确保室内空气质量的安全。该系统使用传感器对甲烷和一氧化碳的浓度进行检测。传感器将收集到…

大数据Scala教程从入门到精通第七篇:Scala在IDEA中编写Hello World

一:Scala在IDEA中编写Hello World 想让我们的idea支持scala的编写,需要安装一个插件。

kdb 调试内核-延迟驱动加载

说明: 系统在启动过程中,一些要调试的驱动在 "进入kdb 之前" 就已经加载了, 那么,我们就需要延迟 "加载驱动" #define XX_module_platform_driver(__platform_driver) \XX_module_driver(__platform_driver, platform_d…

以太ETH链市值机器人

在数字资产交易市场的浪潮中,如何高效地管理市值、提升交易流动性并保障资金安全,一直是交易所和项目方关注的焦点。市值管理机器人飞机//aishutuyu以太ETH链市值机器人凭借其卓越的功能和强大的安全保障,为数字资产交易市场带来了革命性的变…

python视频转码脚本

今天有一个临时的需求,就是需要将一个wmv的初步转码成mp4的格式。找了一圈,免费的工具少,即使有免费的工具,在功能上也是有所限制,或者会给你塞广告或者附带安装其它流氓小游戏或者杀毒程序。 我并非不支持正版&#…

矩阵稀疏扫描 - 矩阵

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、Java代码五、测试用例提示 前言 本人最近再练习算法,所以会发布一些解题思路,希望大家多指教 一、题目描述 如果矩阵中的许多系数都为零,那么该矩阵就是稀…

【Spring】初识 Spring AOP(面向切面编程)

目录 1、介绍AOP 1.1、AOP的定义 1.2、AOP的作用 1.3、AOP的核心概念及术语 2、AOP实现示例 3、EnableAspectJAutoProxy注解 1、介绍AOP 1.1、AOP的定义 AOP(Aspect Orient Programming),直译过来就是面向切面编程,AOP 是一…

windows使用Docker-Desktop部署lobe-chat

文章目录 window安装docker-desktop下载和启动lobe-chatAI大语言模型的选择lobe-chat设置大模型连接 window安装docker-desktop docker-desktop下载地址 正常安装应用,然后启动应用,注意启动docker引擎 打开右上角的设置,进入Docker Engine设…

wangEditor富文本编辑器与layui图片上传

记录&#xff1a;js 显示默认的wangEditor富文本编辑器内容和图片 <style>body {background-color: #ffffff;}.layui-form-select dl{z-index:100000;} </style> <div class"layui-form layuimini-form"><div class"layui-form-item"…

【IC前端虚拟项目】验证环境env与base_teat思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 上一篇里解决了最难搞的axi_ram_model,接下来呢就会简单又常规一些了,比如这一篇要说的env和base_test的搭建。在这里我用了gen_uvm_tb脚本: 【前端验证】验证自动化脚本的最后一块拼图补全——gen_t…

一个全栈SpringBoot项目-Book Social Network

一个全栈SpringBoot项目-Book Social Network BSN是一个会员之间交换图书的社交网络平台。图书社交网络是一个全栈应用程序&#xff0c;使用户能够管理他们的图书收藏并与图书爱好者社区互动。它提供的功能包括用户注册、安全电子邮件验证、图书管理&#xff08;包括创建、更新…

使用SPI驱动串行LCD的驱动实现(STM32F4)

目录 概述 1. 硬件介绍 1.1 ST7796-LCD 1.2 MCU IO与LCD PIN对应关系 2 功能实现 2.1 使用STM32Cube配置Project 2.2 STM32Cube生成工程 3 代码实现 3.1 SPI接口实现 3.2 LCD驱动程序实现 3.3 测试程序实现 4 测试 源代码下载地址&#xff1a; https://gitee.com/mf…

[蓝桥杯]真题讲解:AB路线(BFS+分层图)

[蓝桥杯]真题讲解&#xff1a;AB路线&#xff08;BFS分层图&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;AB路线&#xff08;BFS分层图&#xff09; 二、正解代码 1、C #include<bits/stdc.h> #define INF …

大数据Scala教程从入门到精通第八篇:Scala在IDEA中编写Hello World

一&#xff1a;Scala在IDEA中编写Hello World object HelloWorld {def main(args: Array[String]): Unit {println("hello world")}}这个对象也单例的。 特殊的Java类库需要import

【Java 查询树结构列表,递归删除子节点】

Java 获取列表树结构&#xff0c;递归删除子节点 数据库表结构ModelVO查询树结构列表递归删除子节点 数据库表结构 Model Data AllArgsConstructor NoArgsConstructor public class TBaseDept {/** ID */private String id;/** 单位名称 */private String fdName;/** 部门编码…

Python | Leetcode Python题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; class Solution:def largestRectangleArea(self, heights: List[int]) -> int:n len(heights)left, right [0] * n, [n] * nmono_stack list()for i in range(n):while mono_stack and heights[mono_stack[-1]] > heights[i]:righ…