ID:               33912
 Updated by:       [EMAIL PROTECTED]
 Reported By:      awsewell at catawba dot edu
-Status:           Assigned
+Status:           Feedback
 Bug Type:         COM related
 Operating System: Windows XP
 PHP Version:      5CVS-2005-07-29
 Assigned To:      wez
 New Comment:

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";
}
?>


Previous Comments:
------------------------------------------------------------------------

[2005-08-02 15:29:06] 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";
    }
?>

------------------------------------------------------------------------

[2005-08-02 00:49:14] 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-07-28 23:41:02] awsewell at catawba dot edu

I tried the latest version via the link provided and get the same
results.

------------------------------------------------------------------------

[2005-07-28 23:34:47] [EMAIL PROTECTED]

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:30:55] 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."


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=33912&edit=1

Reply via email to