欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

HKLM\SOFTWARE\ 与 HKLM\SOFTWARE\Wow6432Node 区别 deepseek chatgpt 有大用 有大大用

在Windows注册表中,HKLM\SOFTWARE 和 HKLM\SOFTWARE\Wow6432Node 的区别主要在于32位和64位应用程序的注册表重定向。

  • HKLM\SOFTWARE:在64位Windows系统中,64位应用程序的注册表项存储在此处。32位应用程序的注册表项也会有一部分存储在这里,但为了兼容性,32位应用程序的注册表项会被重定向到Wow6432Node。

  • HKLM\SOFTWARE\Wow6432Node:这是为了在64位系统上运行32位应用程序而设计的。当32位应用程序尝试访问HKLM\SOFTWARE时,系统会将其重定向到HKLM\SOFTWARE\Wow6432Node。这样,32位应用程序就可以在不修改代码的情况下在64位系统上运行,并且与64位应用程序的注册表设置隔离开。

因此,如果一个应用程序是32位的,那么它通常会将注册表信息存储在HKLM\SOFTWARE\Wow6432Node下。而64位应用程序则直接存储在HKLM\SOFTWARE下。

在查询亚信安全软件的注册表信息时,我们需要同时检查这两个位置,因为不确定它安装的是32位还是64位版本。通常,如果安装在“C:\Program Files (x86)”目录下,那么它很可能是32位应用程序,因此其注册表信息可能存储在Wow6432Node下。但是,有些应用程序可能会同时在两个位置存储信息,或者根据安装方式不同而不同。

所以,在编写脚本时,我们应该同时检查这两个注册表路径,以确保能够获取到病毒码版本信息。

HKLM\SOFTWARE 与 HKLM\SOFTWARE\Wow6432Node 的区别

这两个注册表路径是Windows注册表在64位系统中的重要区分,主要区别如下:

基本概念

特征HKLM\SOFTWAREHKLM\SOFTWARE\Wow6432Node
目标应用64位应用程序32位应用程序
物理位置真实64位注册表32位注册表重定向区域
系统类型64位和32位系统都存在仅在64位系统中存在
访问方式64位进程直接访问32位进程访问SOFTWARE时重定向至此

详细解释

1. 架构背景

  • 64位Windows系统需要同时支持64位和32位应用程序

  • 为了防止冲突,32位应用程序的注册表被重定向到Wow6432Node

  • Wow6432 = Windows oWindows 64-32(在64位Windows上运行32位Windows程序)

2. 访问规则

32位进程访问注册表时:

text
应用程序请求: HKLM\SOFTWARE\MyApp
实际被重定向到: HKLM\SOFTWARE\Wow6432Node\MyApp

64位进程访问注册表时:

text
应用程序请求: HKLM\SOFTWARE\MyApp
实际访问: HKLM\SOFTWARE\MyApp(不重定向)

3. 实际示例

假设安装了两个版本的软件:

batch
# 64位应用程序的注册表位置
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyApp64

# 32位应用程序的注册表位置  
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\MyApp32

在脚本中的应用

由于亚信安装在 C:\Program Files (x86)(32位程序目录),因此注册表信息很可能在 Wow6432Node 中:

batch
@echo off
echo 查询亚信安全软件注册表信息...
echo.

:: 优先检查Wow6432Node(因为是32位程序)
echo [1. 检查32位注册表区域]
reg query "HKLM\SOFTWARE\Wow6432Node\Asiainfo Security" /s 2>nul
if %errorlevel% equ 0 (
    echo 在Wow6432Node中找到亚信注册表信息
) else (
    echo 未在Wow6432Node中找到信息
)

echo.
echo [2. 检查64位注册表区域]
reg query "HKLM\SOFTWARE\Asiainfo Security" /s 2>nul
if %errorlevel% equ 0 (
    echo 在SOFTWARE中找到亚信注册表信息
) else (
    echo 未在SOFTWARE中找到信息
)

:: 专门查询病毒码版本
echo.
echo [3. 查询病毒码版本]
for /f "tokens=2,*" %%i in ('reg query "HKLM\SOFTWARE\Wow6432Node\Asiainfo Security\Update" /v "EngineVersion" 2^>nul') do (
    echo 病毒码版本(32): %%j
)

for /f "tokens=2,*" %%i in ('reg query "HKLM\SOFTWARE\Asiainfo Security\Update" /v "EngineVersion" 2^>nul') do (
    echo 病毒码版本(64): %%j
)

检测脚本:判断注册表位置

batch
@echo off
echo 检测亚信安全软件的注册表位置...
echo.

set "APP_NAME=Asiainfo Security"
set "FOUND=0"

echo 检查可能的注册表路径:

:: 检查32位区域
reg query "HKLM\SOFTWARE\Wow6432Node\%APP_NAME%" >nul 2>&1
if %errorlevel% equ 0 (
    echo ✓ 找到 32位 注册表: HKLM\SOFTWARE\Wow6432Node\%APP_NAME%
    set "FOUND=1"
) else (
    echo ✗ 未找到 32位 注册表
)

:: 检查64位区域  
reg query "HKLM\SOFTWARE\%APP_NAME%" >nul 2>&1
if %errorlevel% equ 0 (
    echo ✓ 找到 64位 注册表: HKLM\SOFTWARE\%APP_NAME%
    set "FOUND=1"
) else (
    echo ✗ 未找到 64位 注册表
)

:: 如果没有找到,尝试其他可能的名称
if %FOUND% equ 0 (
    echo.
    echo 尝试其他可能的名称...
    for %%a in (AhnLab "Ahn Lab" Asiainfo "Asia Info") do (
        reg query "HKLM\SOFTWARE\Wow6432Node\%%a" >nul 2>&1
        if !errorlevel! equ 0 echo 可能的相关注册表: HKLM\SOFTWARE\Wow6432Node\%%a
        reg query "HKLM\SOFTWARE\%%a" >nul 2>&1
        if !errorlevel! equ 0 echo 可能的相关注册表: HKLM\SOFTWARE\%%a
    )
)

echo.
pause

总结

  • 32位程序 → 优先检查 HKLM\SOFTWARE\Wow6432Node

  • 64位程序 → 优先检查 HKLM\SOFTWARE

  • 不确定时 → 两个位置都检查

  • 亚信安全软件(安装在Program Files (x86))→ 极大概率在 Wow6432Node 中

这就是为什么在查询亚信病毒码版本时,需要同时检查两个注册表路径的原因。


普通分类: