[Libguestfs] [PATCH] virt-win-reg: Add --unsafe-printable-strings option.

Richard W.M. Jones rjones at redhat.com
Tue May 17 10:30:48 UTC 2011


Make a corresponding change to virt-win-reg.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top
-------------- next part --------------
>From 48d96e817f1a0a18352aaa0d4e3c9655a981895f Mon Sep 17 00:00:00 2001
From: Richard W.M. Jones <rjones at redhat.com>
Date: Tue, 17 May 2011 11:28:00 +0100
Subject: [PATCH] virt-win-reg: Add --unsafe-printable-strings option.

---
 tools/virt-win-reg |   46 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 45 insertions(+), 1 deletions(-)

diff --git a/tools/virt-win-reg b/tools/virt-win-reg
index 695e619..210d99f 100755
--- a/tools/virt-win-reg
+++ b/tools/virt-win-reg
@@ -177,6 +177,47 @@ L<Win::Hivex::Regedit(3)/ENCODING STRINGS>.
 The default is to use UTF-16LE, which should work with recent versions
 of Windows.
 
+=cut
+
+my $unsafe_printable_strings;
+
+=item B<--unsafe-printable-strings>
+
+When exporting (only), assume strings are UTF-16LE and print them as
+strings instead of hex sequences.  Remove the final zero codepoint
+from strings if present.
+
+This is unsafe and does not preserve the fidelity of strings in the
+original Registry for various reasons:
+
+=over 4
+
+=item *
+
+Assumes the original encoding is UTF-16LE.  ASCII strings and strings
+in other encodings will be corrupted by this transformation.
+
+=item *
+
+Assumes that everything which has type 1 or 2 is really a string
+and that everything else is not a string, but the type field in
+real Registries is not reliable.
+
+=item *
+
+Loses information about whether a zero codepoint followed the string
+in the Registry or not.
+
+=back
+
+This all happens because the Registry itself contains no information
+about how strings are encoded (see
+L<Win::Hivex::Regedit(3)/ENCODING STRINGS>).
+
+You should only use this option for quick hacking and debugging of the
+Registry contents, and I<never> use it if the output is going to be
+passed into another program or stored in another Registry.
+
 =back
 
 =cut
@@ -188,6 +229,7 @@ GetOptions ("help|?" => \$help,
             "format=s" => \$format,
             "merge" => \$merge,
             "encoding=s" => \$encoding,
+            "unsafe-printable-strings" => \$unsafe_printable_strings,
     ) or pod2usage (2);
 pod2usage (1) if $help;
 if ($version) {
@@ -256,7 +298,9 @@ if (!$merge) {                  # Export mode.
     unless ($name) {
         # Export it.
         warn "exporting $path from $hivename with prefix $prefix ..." if $debug;
-        reg_export ($h, $path, \*STDOUT, prefix => $prefix);
+        reg_export ($h, $path, \*STDOUT,
+                    prefix => $prefix,
+                    unsafe_printable_strings => $unsafe_printable_strings);
     } else {
         # Export a single key using hivexget.
         my @args = ("hivexget", "$tmpdir/$hivename", $path, $name);
-- 
1.7.5



More information about the Libguestfs mailing list