有没有办法告诉哪些文件在Windows系统重启时被删除或重命名?

时间:2012-06-28 22:13:28

标签: windows perl powershell

有谁知道在系统重启时告诉哪些文件会被删除或修改?与更新系统时一样,系统要求重新启动,因为某些文件被系统阻止,需要更换或修改。我需要制作一个脚本,告诉我哪些文件将在启动时被删除或修改。

1 个答案:

答案 0 :(得分:3)

MoveFileEx州的文档:

  

说明

     

如果dwFlags参数指定MOVEFILE_DELAY_UNTIL_REBOOT,则MoveFileEx如果无法访问注册表,则会失败。该函数将在重新启动时重命名的文件的位置存储在以下注册表值中:

     

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

     

此注册表值的类型为REG_MULTI_SZ。每个重命名操作都存储以下以NULL结尾的字符串之一,具体取决于重命名是否为删除:

     
      
  • szDstFile\0\0

  •   
  • szSrcFile\0szDstFile\0

  •   
     

字符串szDstFile\0\0表示要在重新启动时删除文件szDstFile。字符串szSrcFile\0szDstFile\0表示重新启动时szSrcFile将重命名为szDstFile

您可以使用Win32::TieRegistry查询Windows注册表:

#!/usr/bin/env perl

use strict; use warnings;
use Const::Fast;
use Win32::TieRegistry;
use YAML;

const my $REG_DELIMITER => '/';

$Registry->Delimiter($REG_DELIMITER);

my $key = join $REG_DELIMITER, qw(
    HKEY_LOCAL_MACHINE
    SYSTEM
    CurrentControlSet
    Control
    Session Manager
    PendingFileRenameOperations
);

print Dump $Registry->{$key}