每次修改PE或者系统,导入的注册表总是需要手动挂载,经过几天的研究,研究出一个程序
共两个程序,有个是PE下导入,一个是挂载的系统
另外一个:
共两个程序,有个是PE下导入,一个是挂载的系统
#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.16.1 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <MsgBoxConstants.au3> #include <FileConstants.au3> #include <WinAPIFiles.au3> ; 检查 sed.exe 是否存在 Global $sed = @ScriptDir & "\sed.exe" If Not FileExists($sed) Then Exit EndIf ; 自动检测系统盘,在PE下导入修改的注册表 Global $systemDrive = "" For $i = Asc("A") To Asc("Z") Local $drive = Chr($i) & ":" If FileExists($drive & "\Windows\System32\config\SYSTEM") And _ (FileExists($drive & "\bootmgr") Or FileExists($drive & "\Windows\System32\winload.efi")) Then $systemDrive = $drive ExitLoop EndIf Next If $systemDrive = "" Then Exit EndIf ; 加载注册表 Global $regSystem = $systemDrive & "\Windows\System32\config\SYSTEM" Global $regSoftware = $systemDrive & "\Windows\System32\config\SOFTWARE" Global $regDefault = $systemDrive & "\Windows\System32\config\DEFAULT" Global $regUserDat = $systemDrive & "\Users\Default\NTUSER.DAT" RunWait('reg load HKLM\TempSystem "' & $regSystem & '"') RunWait('reg load HKLM\TempSoftware "' & $regSoftware & '"') RunWait('reg load HKU\TempDefault "' & $regDefault & '"') RunWait('reg load HKU\TempUser "' & $regUserDat & '"') ; 创建临时目录存储处理后的 .reg 文件 Global $tmpDir = @TempDir & "\regtemp" If FileExists($tmpDir) Then DirRemove($tmpDir, 1) DirCreate($tmpDir) ; 处理注册表文件导入 _RegProcess("system.reg", "s/HKEY_LOCAL_MACHINE\\SYSTEM/HKEY_LOCAL_MACHINE\\TempSystem/g") _RegProcess("software.reg", "s/HKEY_LOCAL_MACHINE\\SOFTWARE/HKEY_LOCAL_MACHINE\\TempSoftware/g") _RegProcess("default_user.reg", "s/HKEY_USERS\\.DEFAULT/HKEY_USERS\\TempDefault/g") _RegProcess("default_user.reg", "s/HKEY_CURRENT_USER/HKEY_USERS\\TempUser/g") _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_LOCAL_MACHINE\\TempSoftware\\Classes/g") _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempDefault\\Software\\Classes/g") _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempUser\\Software\\Classes/g") ; 卸载临时注册表 RunWait("reg unload HKLM\TempSystem") RunWait("reg unload HKLM\TempSoftware") RunWait("reg unload HKU\TempDefault") RunWait("reg unload HKU\TempUser") ; 如果 NTUSER.DAT 存在且不是 NTUSER.MAN,则重命名 If FileExists($regUserDat) And Not FileExists($systemDrive & "\Users\Default\NTUSER.MAN") Then FileMove($regUserDat, $systemDrive & "\Users\Default\NTUSER.MAN", $FC_OVERWRITE) EndIf ; 注册表处理函数 Func _RegProcess($filename, $sedPattern) Local $srcFile = @ScriptDir & "" & $filename If Not FileExists($srcFile) Then Return Local $outFile = $tmpDir & "" & $filename RunWait('"' & $sed & '" "' & $sedPattern & '" "' & $srcFile & '" > "' & $outFile & '"', "", @SW_HIDE) RunWait('regedit /s "' & $outFile & '"', "", @SW_HIDE) EndFunc |
另外一个:
#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.16.1 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <MsgBoxConstants.au3> #include <FileConstants.au3> #include <WinAPIFiles.au3> #include <File.au3> ; 检查 sed.exe 是否存在 Global $sed = @ScriptDir & "\sed.exe" If Not FileExists($sed) Then Exit ; 选择挂载系统所在的根目录(如 D:\MountedWindows) Global $systemFolder = FileSelectFolder("请选择挂载系统的根目录(含 Windows 文件夹)", "", 2) If @error Or $systemFolder = "" Then Exit ; 构建注册表文件路径 Global $regSystem = $systemFolder & "\Windows\System32\config\SYSTEM" Global $regSoftware = $systemFolder & "\Windows\System32\config\SOFTWARE" Global $regDefault = $systemFolder & "\Windows\System32\config\DEFAULT" ; 允许 NTUSER.DAT 或 NTUSER.MAN 任意一个存在 Global $regUserDat = "" If FileExists($systemFolder & "\Users\Default\NTUSER.DAT") Then $regUserDat = $systemFolder & "\Users\Default\NTUSER.DAT" ElseIf FileExists($systemFolder & "\Users\Default\NTUSER.MAN") Then $regUserDat = $systemFolder & "\Users\Default\NTUSER.MAN" Else Exit EndIf ; 加载脱机注册表 RunWait('reg load HKLM\TempSystem "' & $regSystem & '"') RunWait('reg load HKLM\TempSoftware "' & $regSoftware & '"') RunWait('reg load HKU\TempDefault "' & $regDefault & '"') RunWait('reg load HKU\TempUser "' & $regUserDat & '"') ; 创建临时目录处理 .reg 文件 Global $tmpDir = @TempDir & "\regtemp" If FileExists($tmpDir) Then DirRemove($tmpDir, 1) DirCreate($tmpDir) ; 注册表导入映射 _RegProcess("system.reg", "s/HKEY_LOCAL_MACHINE\\SYSTEM/HKEY_LOCAL_MACHINE\\TempSystem/g") _RegProcess("software.reg", "s/HKEY_LOCAL_MACHINE\\SOFTWARE/HKEY_LOCAL_MACHINE\\TempSoftware/g") _RegProcess("default_user.reg", "s/HKEY_USERS\\.DEFAULT/HKEY_USERS\\TempDefault/g") _RegProcess("default_user.reg", "s/HKEY_CURRENT_USER/HKEY_USERS\\TempUser/g") _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_LOCAL_MACHINE\\TempSoftware\\Classes/g") _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempDefault\\Software\\Classes/g") _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempUser\\Software\\Classes/g") ; 卸载注册表 RunWait("reg unload HKLM\TempSystem") RunWait("reg unload HKLM\TempSoftware") RunWait("reg unload HKU\TempDefault") RunWait("reg unload HKU\TempUser") ; 如果使用的是 NTUSER.DAT,重命名为 NTUSER.MAN(仅当 MAN 不存在) If StringInStr($regUserDat, "NTUSER.DAT") And Not FileExists($systemFolder & "\Users\Default\NTUSER.MAN") Then FileMove($regUserDat, $systemFolder & "\Users\Default\NTUSER.MAN", $FC_OVERWRITE) EndIf ; 注册表导入处理函数 Func _RegProcess($filename, $sedPattern) Local $srcFile = @ScriptDir & "" & $filename If Not FileExists($srcFile) Then Return Local $outFile = $tmpDir & "" & $filename RunWait('"' & $sed & '" "' & $sedPattern & '" "' & $srcFile & '" > "' & $outFile & '"', "", @SW_HIDE) RunWait('regedit /s "' & $outFile & '"', "", @SW_HIDE) EndFunc |
文章来源:
网络小编D
版权声明:
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站立刻删除。