[rt.cpan.org #143646] Problem using Win32::TieRegistry in script packed with pp on Windows
"Torsten.Werner via RT" <[email protected]> Mon, 04 Jul 2022 07:05:31 -0400
| Newsgroups | gmane.comp.lang.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 ----------------------------------------------------------------------