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=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: [email protected]
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
----------------------------------------------------------------------