关于perl 遍历注册表
时间:2010-09-01
来源:互联网
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(' ')都没成功。
还请指点一二。
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(' ')都没成功。
还请指点一二。
作者: i57110403 发布时间: 2010-09-01
如果采用 保存一份注册表,然后等测试结束以后 保存注册表。
最后比对md5值,能不能满足要求呢。
最后比对md5值,能不能满足要求呢。
作者: zhshb8511 发布时间: 2010-09-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28