[rt.cpan.org #143646] Problem using Win32::TieRegistry in script packed with pp on Windows

[email protected] ("Torsten.Werner via RT") Mon, 04 Jul 2022 07:05:31 -0400
Newsgroups perl.par
Message-ID <[email protected]>
Mon Jul 04 07:05:31 2022: Request 143646 was acted upon.
Transaction: Ticket created by [email protected]
       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: [email protected]
      Status: new
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=3D143646 >


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=3D"HKEY_CURRENT_USER\\Control Panel\\Keyboard";
print "No of members: ",scalar keys %{$Registry->{$key}},"\n";  # will=20
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,=20
Win32::TieRegistry independent

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

my $uIndex=3D0;
my $ok;
LOOP: while (1) {
        $ok=3DRegEnumValue ( $key, $uIndex, $name, $nameLength, [], $type,=
=20
$data, $dataLength );
        last LOOP unless $ok;
        print "Read by RegEnumKeyEx:  $name =3D $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 =3D 1
Read by RegEnumKeyEx:  KeyboardSpeed =3D 31
Read by RegEnumKeyEx:  InitialKeyboardIndicators =3D 0

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

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


As to be seen, enumeration works in native perl script only.=20
I had a look with procmon too. It is to be seen that the enumeration runs=20
in both cases. The result is missing. I think the enumeration of registry=20
keys and values is quite important, I'm wondering that nobody has seen=20
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:    [email protected]

Assyst GmbH  |  Max-Planck-Str. 3  |  85609 Aschheim-Dornach
Registration / Eintragung beim Amtsgericht M=C3=BCnchen: HRB 180174
Managing Director / Gesch=C3=A4ftsf=C3=BChrer: Hans Peter Hiemer, Dr. Andre=
as Seidl
www.assyst.de=20

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