没有环境,自行测试。Global $SYS = "fancyrd.sys"
Global $RegKey = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{94B97E1E-9B67-4012-A126-6319E211A298}_is1"
Global $DRV = ""
Global $SYS32DRVS = @WindowsDir & "\System32\drivers"
Global $BAK = $SYS32DRVS & "" & $SYS & ".bak"
; 检查安装位置
Local $INSTALLLOCATION = RegRead($RegKey, "InstallLocation")
ConsoleWrite($INSTALLLOCATION & @CRLF)
If Not FileExists($INSTALLLOCATION & "drv" & $SYS) Then Exit ConsoleWrite('系统中没有正常安装Primo Ramdisk。' & @CRLF)
; 显示版本
Local $DISPLAYVERSION = RegRead($RegKey, "DisplayVersion")
Local $EDITION = RegRead("HKLM\SOFTWARE\Romex Software\FancyRd", "Edition")
If $DISPLAYVERSION <> "6.6.0" Or $EDITION <> "0x6" Then Exit ConsoleWrite('不支持的Primo Ramdisk版本。本补丁针对服务器版6.6.0,系统中安装的不是对应版本。' & @CRLF)
; 检查完整性
Local $Ret = DllCall('NTDLL.DLL', 'NONE', 'RtlGetNtVersionNumbers', 'dword*', 0, 'dword*', 0, 'dword*', 0)
Local $OSVER = Number($Ret[1] & '.' & $Ret[2])
Local $OSBLD = Mod($Ret[3], 0x10000)
If $OSVER >= 10 Then
If $OSBLD >= 17763 Then
$DRV = "drv10"
Else
$DRV = "drv10L"
EndIf
Else
$DRV = "drv7"
EndIf
If Not FileExists($DRV & "" & $SYS) Then Exit ConsoleWrite('补丁可能已被反病毒软件误报并破坏。请暂时禁用反病毒软件,重新解压缩补丁包后再试。' & @CRLF)
; 导入证书
ConsoleWrite('--- 导入驱动包和时间戳自签名根证书为受信证书 ---' & @CRLF)
RunWait(@ComSpec & " /c certutil -f -addstore Root TestCertificate.cer", "", @SW_HIDE)
RunWait(@ComSpec & " /c certutil -f -addstore TrustedPublisher TestCertificate.cer", "", @SW_HIDE)
ConsoleWrite('证书导入成功。' & @CRLF)
; 替换和安装新驱动
ConsoleWrite('--- 替换和安装新驱动 ---' & @CRLF)
If FileExists($BAK) Then
FileSetAttrib($BAK, "-R -H -S")
FileMove($BAK, $BAK & ".del", 1)
EndIf
FileCopy($DRV & "" & $SYS & ".bak", $BAK, 1)
FileSetAttrib($INSTALLLOCATION & "drv\*.*", "-R -H -S")
FileCopy($DRV & "\*.*", $INSTALLLOCATION & "drv", 1)
RunWait($INSTALLLOCATION & "frsetup.exe -i1 " & $INSTALLLOCATION & "drv", "", @SW_HIDE)
ConsoleWrite('驱动文件替换成功。' & @CRLF)
; 导入注册信息
ConsoleWrite('--- 导入注册信息 ---' & @CRLF)
RunWait(@ComSpec & " /c reg import PrDSrv56crk.reg", "", @SW_HIDE)
ConsoleWrite('导入成功。' & @CRLF)
; 配置反病毒软件
ConsoleWrite('--- 配置系统内置反病毒软件 ---' & @CRLF)
RunWait(@ComSpec & ' /c powershell -Command Add-MpPreference -ExclusionPath "' & $SYS32DRVS & '\' & $SYS & '"', "", @SW_HIDE)
If @error Then
RunWait(@ComSpec & ' /c reg add "HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths" /v "' & $SYS32DRVS & '\' & $SYS & '" /t REG_DWORD /d 0 /f', "", @SW_HIDE)
EndIf
If RegRead("HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths", $SYS32DRVS & "" & $SYS) <> "" Then
ConsoleWrite('反病毒软件排除项添加成功。' & @CRLF)
Else
ConsoleWrite('反病毒软件排除项添加失败。' & @CRLF)
EndIf
; 结束
Local $MSG = "--- 小提示 ---" & @CRLF & _
"安装完成,重启电脑后生效。" & @CRLF & _
"如果你使用的不是系统内置的反病毒软件,请自行把“" & $SYS32DRVS & "" & $SYS & "”添加到所用反病毒软件的信任或排除项。" & @CRLF & _
"如果系统不能正常启动,请在PE下进入“" & $SYS32DRVS & "”文件夹,删除“" & $SYS & "”,然后复制“" & $SYS & ".bak”为“" & $SYS & "”。"
ConsoleWrite($MSG & @CRLF)
|