2

我的目标是在注册表配置单元中查找 Company 键值,然后在其后面提取相应的 Guid 和其他键和值。所以我想我会运行 regedit export 命令,然后用 php 解析文件以获得我需要的密钥。

所以运行dos批处理命令后

>regedit /E "output.txt" "HKLM\System....\Company1" 

输出文本文件似乎是某种对正则表达式不友好的 UNICODE 格式。我正在使用 php 解析文件并提取密钥。

这是我用来解析文件的 php 代码

<?php 

$regfile = "output.txt";


$handle = fopen ("c:\\\\" . $regfile,"r");
//echo "handle: " . $file . "<br>";
$row = 1;


while ((($data = fgets($handle, 1024)) !== FALSE) ) {

    $num = count($data);
    echo "$num fields in line $row: \n";

$reg_section = $data;   
//$reg_section = "[HKEY_LOCAL_MACHINE\SOFTWARE\TECHNOLOGIES\MEDIUS\CONFIG MANAGER\SYSTEM\COMPANIES\RECORD11]";

$pattern = "/^(\[HKEY_LOCAL_MACHINE\\\SOFTWARE\\\TECHNOLOGIES\\\MEDIUS\\\CONFIG MANAGER\\\SYSTEM\\\COMPANIES\\\RECORD(\d+)\])$/";
if ( preg_match($pattern, $reg_section )) { 

echo "<font color=red>Found</font><br>"; 

} else { 
echo "not found<br>"; 
echo $data . "<br>";
}
$row++;
} //end while 
fclose($handle);


?> 

输出看起来像这样......

第 1 行中的 1 个字段:未找到r� �V�e�r�s�o�n� �5�.�0�0� 第 2 行中的 1 个字段:未找到

第 3 行中的 1 个字段:未找到 [.H.K.E.Y.<em>.L.O.C.A.L.</em>.M.A.C.H.I.N.E @S.O.F.T.W.A.R.E.\.I.T.E.R.S.T.A.R..T.E.C.H.N. O.L.O.G.I.E.S.\.X.M.E.D.I.U.S.\.C.O.N.F.I.G..M.A.N ‘A.G.E.R.\.S.Y.S.T.E.M.\.C.O.M.P.A.N.I.E.S.]. 1 个字段在行4: 在第 5 行中未找到“.N.e.x.t..R.e.c.o.r.d..I.D.”.=.".4.1.". 1 个字段: 未找到

任何想法如何解决这个问题?

提前致谢

4

4 回答 4

1

我知道为此有一个 Perl 库:

解析::Win32Registry

不过,从中创建一个 PHP 类应该不会太难。还有一个用于解析 Perl 代码的 PHP 的 PECL 扩展:

http://devzone.zend.com/node/view/id/1712

于 2009-02-23T20:55:40.730 回答
1

尝试像这样将 /A 添加到 REGEDIT 命令以产生兼容的输出:

REGEDIT /E /A "output.txt" "HKEY_LOCAL_MACHINE\System....\Company1"

于 2010-03-22T18:06:40.063 回答
0

正则表达式适用于 unicode。您是否收到特定的错误消息?

于 2009-02-23T20:51:44.733 回答
0

在 Windows XP 中,Regedit 导出是 Unicode,因此是 2 个字节。如果您在记事本中打开导出,您会看到这一点。我不确定旧版本的 php 是否能够处理 unicode 文件。

您是否无法读取所需的特定密钥?通过另一个工具等。这将是一种更直接的方法。

于 2009-02-28T15:40:37.873 回答