Mon Jul 04 07:05:31 2022: Request 143646 was acted upon.
Transaction: Ticket created by torsten.wer...@assyst.de
       Queue: PAR-Packer
     Subject: Problem using Win32::TieRegistry in script packed with pp on 
Windows
   Broken in: (no value)
    Severity: (no value)
       Owner: Nobody
  Requestors: torsten.wer...@assyst.de
      Status: new
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=143646 >


Hi,
at first thank you for your work on the packer. It's very usefull.

There is a problem enumerating registry content in scripts packed with pp.
I know it sounds strange. But it is highly reproducible.

Here an sample script "regtest.pl":

use strict;
use Win32::TieRegistry;
use Win32API::Registry qw( :ALL );

my $key="HKEY_CURRENT_USER\\Control Panel\\Keyboard";
print "No of members: ",scalar keys %{$Registry->{$key}},"\n";  # will 
show 0 in packed script
foreach my $member (keys %{$Registry->{$key}}) {
        print "Member: $member\n"; # nothing to be seen in packed script
}

# the rest is a check that something exists in the registry, 
Win32::TieRegistry independent

my ($key, $uIndex, $name, $nameLength, $type, $data, $dataLength );
die "RegOpenKey: $^E" unless RegOpenKeyEx( HKEY_CURRENT_USER , "Control 
Panel\\Keyboard", 0, KEY_READ, $key );

my $uIndex=0;
my $ok;
LOOP: while (1) {
        $ok=RegEnumValue ( $key, $uIndex, $name, $nameLength, [], $type, 
$data, $dataLength );
        last LOOP unless $ok;
        print "Read by RegEnumKeyEx:  $name = $data\n";
        $uIndex++;
}

RegCloseKey( $key );

Here what I do to show the effect:

Z:\Devel>perl regtest.pl
No of members: 3
Member: \KeyboardDelay
Member: \KeyboardSpeed
Member: \InitialKeyboardIndicators
Read by RegEnumKeyEx:  KeyboardDelay = 1
Read by RegEnumKeyEx:  KeyboardSpeed = 31
Read by RegEnumKeyEx:  InitialKeyboardIndicators = 0

Z:\Devel>pp -o regtest.exe regtest.pl

Z:\Devel>regtest.exe
No of members: 0
Read by RegEnumKeyEx:  KeyboardDelay = 1
Read by RegEnumKeyEx:  KeyboardSpeed = 31
Read by RegEnumKeyEx:  InitialKeyboardIndicators = 0


As to be seen, enumeration works in native perl script only. 
I had a look with procmon too. It is to be seen that the enumeration runs 
in both cases. The result is missing. I think the enumeration of registry 
keys and values is quite important, I'm wondering that nobody has seen 
this before.

I use Strawberry perl 5.32,1  MSWin32-x64-multi-thread,
pp 0.992

Bye
Torsten

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

Dr. Ing. Torsten Werner  |  Product Manager plan.assyst
E-Mail:    torsten.wer...@assyst.de

Assyst GmbH  |  Max-Planck-Str. 3  |  85609 Aschheim-Dornach
Registration / Eintragung beim Amtsgericht München: HRB 180174
Managing Director / Geschäftsführer: Hans Peter Hiemer, Dr. Andreas Seidl
www.assyst.de 

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

Reply via email to