Fix conditional test for HAVE_HIVEXSH.
[hivex.git] / sh / hivexsh.pod
1 =encoding utf8
2
3 =head1 NAME
4
5 hivexsh - Windows Registry hive shell
6
7 =head1 SYNOPSIS
8
9  hivexsh [-options] [hivefile]
10
11 =head1 DESCRIPTION
12
13 This program provides a simple shell for navigating Windows Registry
14 'hive' files.  It uses the hivex library for access to these binary
15 files.
16
17 Firstly you will need to provide a hive file from a Windows operating
18 system.  The hive files are usually located in
19 C<C:\Windows\System32\Config> and have names like C<software>,
20 C<system> etc (without any file extension).  For more information
21 about hive files, read L<hivex(3)>.  For information about downloading
22 files from virtual machines, read L<virt-cat(1)> and L<guestfish(1)>.
23
24 You can provide the name of the hive file to examine on the command
25 line.  For example:
26
27  hivexsh software
28
29 Or you can start C<hivexsh> without any arguments, and immediately use
30 the C<load> command to load a hive:
31
32  $ hivexsh
33  
34  Welcome to hivexsh, the hivex interactive shell for examining
35  Windows Registry binary hive files.
36  
37  Type: 'help' for help with commands
38        'quit' to quit the shell
39  
40  > load software
41  software\>
42
43 Navigate through the hive's keys using the C<cd> command, as if it
44 contained a filesystem, and use C<ls> to list the subkeys of the
45 current key.  Other commands are listed below.
46
47 =head1 OPTIONS
48
49 =over 4
50
51 =item B<-d>
52
53 Enable lots of debug messages.  If you find a Registry file that this
54 program cannot parse, please enable this option and post the complete
55 output I<and> the Registry hive file in your bug report.
56
57 =item B<-f> filename
58
59 Read commands from C<filename> instead of stdin.  To write a hivexsh
60 script, use:
61
62  #!/usr/bin/hivexsh -f
63
64 =item B<-w>
65
66 If this option is given, then writes are allowed to the hive
67 (see L</commit> command below, and the discussion of
68 modifying hives in L<hivex(3)/WRITING TO HIVE FILES>).
69
70 B<Important Note:> Even if you specify this option, nothing is written
71 to a hive unless you call the L</commit> command.  If you exit the
72 shell without committing, all changes will be discarded.
73
74 If this option is not given, then write commands are disabled.
75
76 =back
77
78 =head1 COMMANDS
79
80 =over 4
81
82 =item B<add> name
83
84 Add a subkey named C<name> below the current node.  The name may
85 contain spaces and punctuation characters, and does not need to be
86 quoted.
87
88 The new key will have no subkeys and no values (see C<setval>).
89
90 There must be no existing subkey called C<name>, or this command will
91 fail.  To replace an existing subkey, delete it first like this:
92
93  cd name
94  del
95
96 =item B<cd> path
97
98 Change to the subkey C<path>.  Use Windows-style backslashes to
99 separate path elements, and start with a backslash in order to start
100 from the root of the hive.  For example:
101
102  cd \Classes\*
103
104 moves from the root node, to the C<Classes> node, to the C<*> node.
105 If you were already at the root node, you could do this instead:
106
107  cd Classes\*
108
109 or even:
110
111  cd Classes
112  cd *
113
114 Path elements (node names) are matched case insensitively, and
115 characters like space, C<*>, and C<?> have I<no> special significance.
116
117 C<cd ..> may be used to go to the parent directory.
118
119 C<cd> without any arguments prints the current path.
120
121 Be careful with C<cd \> since the readline library has an undocumented
122 behaviour where it will think the final backslash is a continuation
123 (it reads the next line of input and appends it).  Put a single space
124 after the backslash.
125
126 =item B<close> | B<unload>
127
128 Close the currently loaded hive.
129
130 If you modified the hive, all uncommitted writes are lost when you
131 call this command (or if the shell exits).  You have to call C<commit>
132 to write changes.
133
134 =item B<commit> [newfile]
135
136 Commit changes to the hive.  If the optional C<newfile> parameter is
137 supplied, then the hive is written to that file, else the original
138 file is overwritten.
139
140 Note that you have to specify the C<-w> flag, otherwise no writes are
141 allowed.
142
143 =item B<del>
144
145 Delete the current node and everything beneath it.  The current
146 directory is moved up one level (as if you did C<cd ..>) after
147 this command.
148
149 You cannot delete the root node.
150
151 =item B<exit> | B<quit>
152
153 Exit the shell.
154
155 =item B<load> hivefile
156
157 Load the binary hive named C<hivefile>.  The currently loaded hive, if
158 any, is closed.  The current directory is changed back to the root
159 node.
160
161 =item B<ls>
162
163 List the subkeys of the current hive Registry key.  Note this command
164 does not take any arguments.
165
166 =item B<lsval> [key]
167
168 List the (key, value) pairs of the current hive Registry key.  If no
169 argument is given then all pairs are displayed.  If C<key> is given,
170 then the value of the named key is displayed.  If C<@> is given, then
171 the value of the default key is displayed.
172
173 =item B<setval> nrvals
174
175 This command replaces all (key, value) pairs at the current node with
176 the values in subsequent input.  C<nrvals> is the number of values
177 (ie. (key, value) pairs), and any existing values at this node are
178 deleted.  So C<setval 0> just deletes any values at the current node.
179
180 The command reads 2 * nrvals lines of input, with each pair of
181 lines of input corresponding to a key and a value to add.
182
183 For example, the following setval command replaces whatever is at the
184 current node with two (key, value) pairs.  The default key is set to
185 the UTF16-LE-encoded string "abcd".  The other value is named
186 "ANumber" and is a little-endian DWORD 0x12345678.
187
188  setval 2
189  @
190  string:abcd
191  ANumber
192  dword:12345678
193
194 The first line of each pair is the key (the special key C<@> means
195 the default key, but you can also use a blank line).
196
197 The second line of each pair is the value, which has a special format
198 C<type:value> with possible types summarized in the table below:
199
200  none                 No data is stored, and the type is set to 0.
201  
202  string:abc           "abc" is stored as a UTF16-LE-encoded
203                       string (type 1).  Note that only 7 bit
204                       ASCII strings are supported as input.
205  
206  expandstring:...     Same as string but with type 2.
207  
208  dword:0x01234567     A DWORD (type 4) with the hex value
209                       0x01234567.  You can also use decimal
210                       or octal numbers here.
211  
212  qword:0x0123456789abcdef
213                       A QWORD (type 11) with the hex value
214                       0x0123456789abcdef.  You can also use
215                       decimal or octal numbers here.
216  
217  hex:<type>:<hexbytes>
218  hex:1:41,00,42,00,43,00,44,00,00,00
219                       This is the generic way to enter any
220                       value.  <type> is the integer value type.
221                       <hexbytes> is a list of pairs of hex
222                       digits which are treated as bytes.
223                       (Any non-hex-digits here are ignored,
224                       so you can separate bytes with commas
225                       or spaces if you want).
226
227 =back
228
229 =head1 EXAMPLE
230
231  $ guestfish --ro -i Windows7
232  ><fs> download win:c:\windows\system32\config\software software
233  ><fs> quit
234  
235  $ hivexsh software
236  
237  Welcome to hivexsh, the hivex interactive shell for examining
238  Windows Registry binary hive files.
239  
240  Type: 'help' for help with commands
241        'quit' to quit the shell
242  
243  software\> ls
244  ATI Technologies
245  Classes
246  Clients
247  Intel
248  Microsoft
249  ODBC
250  Policies
251  RegisteredApplications
252  Sonic
253  Wow6432Node
254  software\> quit
255
256 =head1 SEE ALSO
257
258 L<hivex(3)>,
259 L<hivexget(1)>,
260 L<hivexml(1)>,
261 L<virt-win-reg(1)>,
262 L<guestfs(3)>,
263 L<http://libguestfs.org/>,
264 L<virt-cat(1)>,
265 L<virt-edit(1)>.
266
267 =head1 AUTHORS
268
269 Richard W.M. Jones (C<rjones at redhat dot com>)
270
271 =head1 COPYRIGHT
272
273 Copyright (C) 2009-2010 Red Hat Inc.
274
275 This program is free software; you can redistribute it and/or modify
276 it under the terms of the GNU General Public License as published by
277 the Free Software Foundation; either version 2 of the License, or
278 (at your option) any later version.
279
280 This program is distributed in the hope that it will be useful,
281 but WITHOUT ANY WARRANTY; without even the implied warranty of
282 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
283 GNU General Public License for more details.
284
285 You should have received a copy of the GNU General Public License along
286 with this program; if not, write to the Free Software Foundation, Inc.,
287 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.