注册表
Windows 注册表结构、常用键位置、reg 命令行操作及 PowerShell 访问方式。
结构概览
注册表是 Windows 的层级数据库,存储系统和应用配置。
根键(Hive)
| 根键 | 缩写 | 说明 |
|---|---|---|
HKEY_LOCAL_MACHINE | HKLM | 本机硬件和系统配置,对所有用户生效 |
HKEY_CURRENT_USER | HKCU | 当前登录用户的配置 |
HKEY_USERS | HKU | 所有用户配置的根,HKCU 是其子集 |
HKEY_CLASSES_ROOT | HKCR | 文件关联和 COM 对象(HKLM+HKCU 合并视图) |
HKEY_CURRENT_CONFIG | HKCC | 当前硬件配置文件 |
值类型
| 类型 | 说明 |
|---|---|
REG_SZ | 字符串 |
REG_EXPAND_SZ | 含环境变量的字符串(如 %SystemRoot%) |
REG_MULTI_SZ | 多字符串(换行分隔) |
REG_DWORD | 32 位整数 |
REG_QWORD | 64 位整数 |
REG_BINARY | 二进制数据 |
图形界面
regedit 打开注册表编辑器
Ctrl+F搜索键/值/数据- 收藏夹菜单可保存常用路径
- 右键键 → 导出,备份为
.reg文件
reg 命令
查询
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\SYSTEM\CurrentControlSet\Services /s :: 递归查询
reg query HKLM\SOFTWARE /f "Python" /s :: 搜索含 Python 的键名
reg query HKLM\SOFTWARE /f "7890" /s /d :: 搜索数据中含 7890 的值添加与修改
reg add "HKCU\Software\MyApp" /v "Setting" /t REG_SZ /d "value" /f
reg add "HKCU\Software\MyApp" /v "Enable" /t REG_DWORD /d 1 /f
reg add "HKCU\Software\MyApp" /v "Path" /t REG_EXPAND_SZ /d "%APPDATA%\MyApp" /f
reg add "HKCU\Software\MyApp\SubKey" /f :: 仅创建键(无值)
:: /f 强制覆盖,不提示删除
reg delete "HKCU\Software\MyApp" /v "Setting" /f :: 删除指定值
reg delete "HKCU\Software\MyApp" /f :: 删除整个键及子键备份与恢复
reg export HKCU\Software\MyApp C:\backup\myapp.reg :: 导出(备份)
reg export HKLM\SYSTEM C:\backup\system.reg
reg import C:\backup\myapp.reg :: 导入(恢复)远程操作
reg query \\RemotePC\HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
reg add \\RemotePC\HKCU\Software\MyApp /v "Key" /t REG_SZ /d "val" /fPowerShell 操作
PowerShell 将注册表根键映射为 PSDrive(HKLM: / HKCU:):
# 查看键和值
Get-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
Get-ChildItem "HKLM:\SOFTWARE" # 列出子键
# 读取单个值
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName
# 写入值
Set-ItemProperty "HKCU:\Software\MyApp" -Name "Setting" -Value "hello"
New-ItemProperty "HKCU:\Software\MyApp" -Name "Count" -Value 1 -PropertyType DWord
# 新建键
New-Item "HKCU:\Software\MyApp\SubKey" -Force
# 删除值
Remove-ItemProperty "HKCU:\Software\MyApp" -Name "Setting"
# 删除键(递归)
Remove-Item "HKCU:\Software\MyApp" -Recurse -Force常用键位置
自启动
HKCU\Software\Microsoft\Windows\CurrentVersion\Run 当前用户自启动
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce 当前用户一次性启动
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 所有用户自启动
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce 所有用户一次性启动
系统信息
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
ProductName, DisplayVersion, BuildLab, InstallDate
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0
ProcessorNameString
网络代理
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyEnable DWORD 1=启用, 0=禁用
ProxyServer SZ "127.0.0.1:7890"
ProxyOverride SZ "localhost;127.*;10.*;*.local"
文件关联
HKCR\.txt 默认 ProgID(如 txtfile)
HKCR\txtfile\shell\open\command 实际执行命令
(Get-ItemProperty "HKCR:\.txt")."(default)"服务
HKLM\SYSTEM\CurrentControlSet\Services\<服务名>
Start: 0=Boot 1=System 2=Auto 3=Manual 4=Disabled
ImagePath: 可执行文件路径
ObjectName: 运行账户
UAC
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA 1=启用 UAC, 0=禁用
ConsentPromptBehaviorAdmin 0=不提示, 2=同意提示(默认), 5=最高
环境变量
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 系统变量
HKCU\Environment 用户变量
.reg 文件格式
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\MyApp]
"StringVal"="hello world"
"DwordVal"=dword:00000001
"BinaryVal"=hex:01,02,03,04
@="default value"
; 删除键:[-HKEY_CURRENT_USER\Software\OldApp]
; 删除值:"OldValue"=-注册表权限
# 查看键权限
(Get-Acl "HKLM:\SOFTWARE\MyApp").Access | Format-Table
# 授予权限(需管理员)
$acl = Get-Acl "HKLM:\SOFTWARE\MyApp"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule(
"Users", "ReadKey", "ContainerInherit", "None", "Allow"
)
$acl.SetAccessRule($rule)
$acl | Set-Acl "HKLM:\SOFTWARE\MyApp"