php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #33912 Crash when trying to access registry using com
Submitted: 2005-07-28 23:30 UTC Modified: 2006-12-17 01:00 UTC
Votes:6
Avg. Score:4.3 ± 0.9
Reproduced:2 of 3 (66.7%)
Same Version:2 (100.0%)
Same OS:0 (0.0%)
From: awsewell at catawba dot edu Assigned: wez (profile)
Status: No Feedback Package: COM related
PHP Version: 5CVS-2005-07-29 OS: Windows XP
Private report: No CVE-ID: None
 [2005-07-28 23:30 UTC] awsewell at catawba dot edu
Description:
------------
When trying to use php 5.04 to access the registry with the code below PHP crashes.

Reproduce code:
---------------
<?php
    $hostname = ".";
    $keyPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    $wshShell = new COM("winmgmts:{impersonationLevel=impersonate}//{$hostname}/root/default:StdRegProv");
    $wshShell->EnumKey("HKEY_LOCAL_MACHINE", $keyPath, $keys);
    foreach($keys as $key){
        print $key;
    }
    unset($wshShell);
?>

Expected result:
----------------
I execpt to see the list of subkeys from the registry.

Actual result:
--------------
PHP crashes with only "CLI has encountered a problem and needs to close.  We are sorry for the inconvenience."

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-07-28 23:34 UTC] tony2001@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip


 [2005-07-28 23:41 UTC] awsewell at catawba dot edu
I tried the latest version via the link provided and get the same results.
 [2005-08-02 00:49 UTC] terrafrost at gmail dot com
EnumKey's first variable isn't supposed to be a string - it's supposed to be an int.  The number representing HKEY_LOCAL_MACHINE is 0x80000002.

Check out the following link for more information:

http://msdn.microsoft.com/library/en-us/wmisdk/wmi/enumkey_method_in_class_stdregprov.asp

That said, even when "HKEY_LOCAL_MACHINE" is replaced with 0x80000002 in awsewell's code, the code still doesn't work as it should.  The problem would seem to be due to arrays not being passed by reference.  I say that because in vBScript, they do seem to be (just check out the examples in the link I provided).
 [2005-08-02 15:29 UTC] terrafrost at gmail dot com
Doesn't seem to work on the latest beta of PHP5, but it works on PHP4...

<?php
    define('HKEY_LOCAL_MACHINE',0x80000002);
    $keys = new VARIANT('', VT_ARRAY);
   $hostname = ".";
    $keyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
    $wshShell = new COM("winmgmts:{impersonationLevel=impersonate}//{$hostname}/root/default:StdRegProv");
    $wshShell->EnumKey(HKEY_LOCAL_MACHINE, $keyPath, &$keys);
    $keys = $keys->value;
    foreach($keys as $key){
        print "$key\n";
    }
?>
 [2006-12-09 11:01 UTC] rrichards@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip

Does it still crash?

use following script for correct output. See inline comments for changes:

<?php
define('HKEY_LOCAL_MACHINE',0x80000002);
/* passing VT_ARRAY arg - see bug #39596 */
$keys = new VARIANT(array());
$hostname = ".";
$keyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
$wshShell = new COM("winmgmts:{impersonationLevel=impersonate}//{$hostname}/root/default:StdRegProv");
$wshShell->EnumKey(HKEY_LOCAL_MACHINE, $keyPath, &$keys);
/* COM in PHP 5 does not use the value property like in PHP 4 so use $keys directly */
foreach($keys as $key){
    print "$key\n";
}
?>
 [2006-12-17 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Wed Dec 04 21:01:29 2024 UTC