in reply to Re: REG_BINARY Registry Data
in thread REG_BINARY Registry Data

I do already have the binary data, but I don't know how to use the print statement to write to the registry. Here is what I have, and note that all works well except for the param2enc registry entry that must write that exact binary data back to the registry.
use Win32::TieRegistry; $Registry->Delimiter("/"); $Registry->{"LMachine/SOFTWARE/Microsoft/Windows/CurrentVersion/Networ +k/"}={ "LanMan/" => { "VIRUSSCAN\$/" => { "/Flags" => ["0x00000102","REG_DWORD"], "/Parm1enc" => ["","REG_BINARY"], "/Parm2enc" => [ pack("A","1f","b0","67","8c","79"),"REG_BINARY"], "/Type" => ["0x00000000","REG_DWORD"], "/Path" => "C:\\", "/Remark" => "Do Not Delete This Share"}, },
All I am trying to do is create a share on Win9x machines. I have attempted to do it with win32::netresource but it has a known bug that won't allow it to work on 9x machines. Only on NT/2000/XP. Apparently ActiveState is working on it, but until they fix it, editing the registry is the only way I can think to create a share. I have it working, at least all except inserting pre-existing binary data into the registry. }

Edit by tye

Replies are listed 'Best First'.
Re: Re: Re: REG_BINARY Registry Data
by AidanLee (Chaplain) on Jan 03, 2002 at 04:01 UTC
    Well, I'm not familiar with Win32::TieRegistry, but looking at your snippet I can guess that what you probably want is:
    use Win32::TieRegistry; $Registry->Delimiter("/"); $Registry->{"LMachine/SOFTWARE/Microsoft/Windows/CurrentVersion/Networ +k/"}={ "LanMan/" => { "VIRUSSCAN\$/" => { "/Flags" => [ "0x00000102", "REG_DWORD", ] "/Parm1enc" => [ "", "REG_BINARY", ] "/Parm2enc" => [ pack( "c5", map { hex $_ } qw( 1f b0 67 8 +c 79 ) ), "REG_BINARY", ] "/Type" => [ "0x00000000", "REG_DWORD", ] "/Path" => "C:\\", "/Remark" => "Do Not Delete This Share" }, }, };

    I'm assuming that those are hex values you've got there. If they're not you'll have to tell me otherwise. I'll also note that I've never seen a hash where each key takes two values, but I'll assume that that is the nature of Win32::TieRegistry, and that you know what you are doing.

    Update: I see code tags have been applied in the above post, and things make much more sense. I've modified my code to reflect the change.

      The values are actually anonymous array references. These were turned into hyperlinks because <code> tags weren't (originally) used.

      You can also avoid pack if the value is really hard-coded:

      use Win32::TieRegistry; $Registry->Delimiter("/"); $Registry->{"LMachine/SOFTWARE/Microsoft/Windows/" . "CurrentVersion/Network/"}= { "LanMan/" => { "VIRUSSCAN\$/" => { "/Flags" => [ "0x00000102", "REG_DWORD" ], "/Parm1enc" => [ "", "REG_BINARY" ], "/Parm2enc" => [ "\x1f\xb0\x67\x8c\x79", "REG_BINARY" ], "/Type" => [ "0x00000000", "REG_DWORD" ], "/Path" => "C:\\", "/Remark" => "Do Not Delete This Share" }, }, };

              - tye (but my friends call me "Tye")