为什么从WinRAR SFX执行的批处理文件无法访问主机文件



此批处理代码用于直接运行批处理文件:

set %windir%system32driversetchosts
attrib -r %hosts%
pause

但它并没有像预期的那样将这个批处理文件打包到WinRAR自解压档案中,并在解压过程中自动运行它。

您正在创建一个32位RAR自解压存档。因此,批处理文件由32位cmd.exe处理,根据Microsoft的文件系统重定向器文档,这将导致访问%SystemRoot%SysWOW64而不是%SystemRoot%System32。您还应该查看WOW64实现细节和受WOW64影响的注册表项。

目录%SystemRoot%SysWOW64不包含driversetchostshosts文件在64位Windows上仅存在于64位应用程序的System32的子目录中。

仅适用于在64位Windows上运行的32位应用程序的Sysnative重定向器可用于确定批处理文件在哪个环境中运行以访问hosts文件,该文件通常只有恶意软件修改,但没有安装有RAR自解压存档的友好应用程序。

@echo off
set "SystemPath=%SystemRoot%System32"
if exist "%SystemRoot%Sysnativecmd.exe" set "SystemPath=%SystemRoot%Sysnative"
set "HostsFile=%SystemPath%driversetchosts"
%SystemPath%attrib.exe -r %HostsFile%
pause

请注意,%SystemRoot%Sysnative在文件系统中既不是目录,也不是链接。它是64位Windows上32位应用程序的重定向程序。因此,对于默认在64位Windows或任何其他64位应用程序上启动的64位Windows资源管理器,%SystemRoot%Sysnative根本不存在。32位应用程序只能检查%SystemRoot%Sysnative中是否有任何文件,但不能检查目录%SystemRoot%Sysnative是否存在。

相关内容

  • 没有找到相关文章

最新更新