4# llztt
你是说这个东东?这是很暴力的,在Windows启动过程中,仅加载基本驱动(总线,硬盘等),运行过磁盘扫描后就开始删除。这时还删不掉的文件估计只有十几个吧。
;===============================================================================
; 说明: 在系统重启后移动/删除文件
; 语法: _FileMoveAtReboot($sSFile[, $sTFile = ""])
; 参数: $sSFile - 源文件
; $sTFile - [可选] 目标文件。如果不指定,文件将在重启后被删除
; 需要: 无
; 返回: 成功 - 1
; 失败 - 0, 并设置 @error 到
; 1 - 源文件不存在
; 2 - 权限不足。需要管理员组或 LocalSystem 帐户权限
; 3 - API 调用失败
; 备注: 源文件和目标文件必须在同一卷
;===============================================================================
Func _FileMoveAtReboot($sSFile, $sTFile = "")
Local $sRegTmp, $iDel, $aResult
$iDel = 0x5 ; MOVEFILE_REPLACE_EXISTING + MOVEFILE_DELAY_UNTIL_REBOOT
If NOT FileExists($sSFile) Then Return SetError(1, 0, 0)
$sRegTmp = "PendingFileRenameOperations" & Random(1000, 9999, 1)
RegWrite("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager", $sRegTmp, "REG_MULTI_SZ", "Test")
If @error Then Return SetError(2, 0, 0)
RegDelete("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager", $sRegTmp)
RegWrite("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager", "AllowProtectedRenames", "REG_DWORD", 1)
If $sTFile = "" Then
$aResult = DllCall("kernel32.dll", "int", "MoveFileEx", "str", $sSFile, "ptr", "", "dword", $iDel)
Else
$aResult = DllCall("kernel32.dll", "int", "MoveFileEx", "str", $sSFile, "str", $sTFile, "dword", $iDel)
EndIf
If @error OR $aResult[0] = 0 Then
Return SetError(3, 0, 0)
Else
Return 1
EndIf
EndFunc ;==>_FileMoveAtReboot |