免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1833 | 回复: 1
打印 上一主题 下一主题

关于perl 遍历注册表 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-01 13:45 |只看该作者 |倒序浏览
use Win32::Registry;
my %RegType = (
  0 => 'REG_0',
  1 => 'REG_SZ',
  2 => 'REG_EXPAND_SZ',
  3 => 'REG_BINARY',
  4 => 'REG_DWORD',
  5 => 'REG_DWORD_BIG_ENDIAN',
  6 => 'REG_LINK',
  7 => 'REG_MULTI_SZ',
  8 => 'REG_RESOURCE_LIST',
  9 => 'REG_FULL_RESOURCE_DESCRIPTION',
10 => 'REG_RESSOURCE_REQUIREMENT_MAP');
list_key_value('SYSTEM');

sub list_key_value{
  my ($Register)=@_[0];
  my ($hkey,@key_list,$key);
  my ($hNode,$Key,%values);
  my ($RegType,$RegValue,$RegKey);
  $HKEY_CURRENT_CONFIG->Open($Register,$hkey)||return;
  print "$Register\n";
  $hkey->GetValues(\%values);
  foreach $value (keys(%values))
  {
    $RegType = $values{$value}->[1];
    $RegValue = $values{$value}->[2];
    $RegKey = $values{$value}->[0];
    next if ($RegType eq '');
    $RegKey = 'Default' if ($RegKey eq '');
    print "$RegKey";
    print " ($RegType{$RegType}) : ";
    SWITCH:
    {
      if ($RegType == 4){printf "Ox%1x \n", unpack("L",$RegValue); last SWITCH;}
      if ($RegType == 5){printf "Ox%1x", unpack("N",$RegValue); last SWITCH;}
      if ($RegType < 8 ){printf "$RegValue\n"; last SWITCH;}
      print "\n";
    }
  }
  $hkey->GetKeys(\@key_list);
  foreach $key (@key_list){list_key_value("$Register\\$key");}
  $hkey->Close();
}
如上程序的方法能枚举注册表HKEY_LOCAL_MACHINE下的一个子键“SYSTEM”下所有的子键与值,如果要枚举HKEY_LOCAL_MACHINE下所有的子键和值应该怎么做呢?
我试过把“list_key_value('SYSTEM')”修改成list_key_value('') 或者list_key_value(' ')都没成功。
还请指点一二。

论坛徽章:
0
2 [报告]
发表于 2010-09-01 13:57 |只看该作者
如果采用 保存一份注册表,然后等测试结束以后  保存注册表。
最后比对md5值,能不能满足要求呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP