Thanks to Tom Horsley who worked out how to do this for Windows XP guests (the technique is probably different for other versions of Windows).
Here is Tom’s script and here are more of his KVM tips.
Thanks to Tom Horsley who worked out how to do this for Windows XP guests (the technique is probably different for other versions of Windows).
Here is Tom’s script and here are more of his KVM tips.
Filed under Uncategorized
I thought when I was looking at the Windows Registry I’d seen it all … until today when I found that the Windows 7 installation CD contains what seems like a registry that directly encodes an XML schema document.
WHY!!!
If you have a Win7 install CD, it is /sources/schema.dat
. After passing it through hivexregedit –export you get:
Windows Registry Editor Version 5.00 [\] [\wcm://Microsoft-Windows-DNS-Client?version=6.1.7600.16385&language=neutral&processorArchitecture=amd64&publicKeyToken=31bf3856ad364e35&versionScope=nonSxS&scope=allUsers] [\wcm://Microsoft-Windows-DNS-Client?version=6.1.7600.16385&language=neutral&processorArchitecture=amd64&publicKeyToken=31bf3856ad364e35&versionScope=nonSxS&scope=allUsers\metadata] "@_legacyHandler"=hex(10000005):04,00,00,00 "@_targetNamespace"=hex(1000000c):4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2d,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,2d,00,44,00,4e,00,53,00,2d,00,43,00,6c,00,69,00,65,00,6e,00,74,00,00,00 "@language"=hex(1000000c):6e,00,65,00,75,00,74,00,72,00,61,00,6c,00,00,00 "@processorArchitecture"=hex(1000000c):61,00,6d,00,64,00,36,00,34,00,00,00 "@publicKeyToken"=hex(1000000c):33,00,31,00,62,00,66,00,33,00,38,00,35,00,36,00,61,00,64,00,33,00,36,00,34,00,65,00,33,00,35,00,00,00 "@version"=hex(1000000c):36,00,2e,00,31,00,2e,00,37,00,36,00,30,00,30,00,2e,00,31,00,36,00,33,00,38,00,35,00,00,00 "@versionScope"=hex(1000000c):6e,00,6f,00,6e,00,53,00,78,00,53,00,00,00 "@xmlns:asmv3"=hex(1000000c):75,00,72,00,6e,00,3a,00,73,00,63,00,68,00,65,00,6d,00,61,00,73,00,2d,00,6d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2d,00,63,00,6f,00,6d,00,3a,00,61,00,73,00,6d,00,2e,00,76,00,33,00,00,00 "@xmlns:wcm"=hex(1000000c):68,00,74,00,74,00,70,00,3a,00,2f,00,2f,00,73,00,63,00,68,00,65,00,6d,00,61,00,73,00,2e,00,6d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,2e,00,63,00,6f,00,6d,00,2f,00,57,00,4d,00,49,00,43,00,6f,00,6e,00,66,00,69,00,67,00,2f,00,32,00,30,00,30,00,32,00,2f,00,53,00,74,00,61,00,74,00,65,00,00,00 "@xmlns:xmlns"=hex(1000000c):68,00,74,00,74,00,70,00,3a,00,2f,00,2f,00,77,00,77,00,77,00,2e,00,77,00,33,00,2e,00,6f,00,72,00,67,00,2f,00,32,00,30,00,30,00,30,00,2f,00,78,00,6d,00,6c,00,6e,00,73,00,2f,00,00,00 "@xmlns:xsd"=hex(1000000c):68,00,74,00,74,00,70,00,3a,00,2f,00,2f,00,77,00,77,00,77,00,2e,00,77,00,33,00,2e,00,6f,00,72,00,67,00,2f,00,32,00,30,00,30,00,31,00,2f,00,58,00,4d,00,4c,00,53,00,63,00,68,00,65,00,6d,00,61,00,00,00 [\wcm://Microsoft-Windows-DNS-Client?version=6.1.7600.16385&language=neutral&processorArchitecture=amd64&publicKeyToken=31bf3856ad364e35&versionScope=nonSxS&scope=allUsers\metadata\complexTypes] [\wcm://Microsoft-Windows-DNS-Client?version=6.1.7600.16385&language=neutral&processorArchitecture=amd64&publicKeyToken=31bf3856ad364e35&versionScope=nonSxS&scope=allUsers\metadata\complexTypes\DomainNameCollectionType] "@_MemberList"=hex(1000800c):44,00,6f,00,6d,00,61,00,69,00,6e,00,4e,00,61,00,6d,00,65,00,00,00,00,00 "@_valid"=hex(10000001):00 [\wcm://Microsoft-Windows-DNS-Client?version=6.1.7600.16385&language=neutral&processorArchitecture=amd64&publicKeyToken=31bf3856ad364e35&versionScope=nonSxS&scope=allUsers\metadata\complexTypes\DomainNameCollectionType\DomainName] "@_hint"=hex(10000006):01,00,00,00 "@_type"=hex(10000005):0c,60,00,00 "@xsd:maxOccurs"=hex(10000006):ff,ff,ff,ff "@xsd:minOccurs"=hex(10000006):00,00,00,00 "@xsd:type"=hex(1000000c):44,00,6f,00,6d,00,61,00,69,00,6e,00,4e,00,61,00,6d,00,65,00,54,00,79,00,70,00,65,00,00,00 [\wcm://Microsoft-Windows-DNS-Client?version=6.1.7600.16385&language=neutral&processorArchitecture=amd64&publicKeyToken=31bf3856ad364e35&versionScope=nonSxS&scope=allUsers\metadata\complexTypes\InterfaceCollectionType] "@_MemberList"=hex(1000800c):49,00,6e,00,74,00,65,00,72,00,66,00,61,00,63,00,65,00,00,00,00,00 "@_valid"=hex(10000001):00 [\wcm://Microsoft-Windows-DNS-Client?version=6.1.7600.16385&language=neutral&processorArchitecture=amd64&publicKeyToken=31bf3856ad364e35&versionScope=nonSxS&scope=allUsers\metadata\complexTypes\InterfaceCollectionType\Interface] "@_type"=hex(10000005):10,40,00,00 "@key"=hex(1000000c):49,00,64,00,65,00,6e,00,74,00,69,00,66,00,69,00,65,00,72,00,00,00 "@xsd:maxOccurs"=hex(10000006):ff,ff,ff,ff "@xsd:minOccurs"=hex(10000006):00,00,00,00 "@xsd:type"=hex(1000000c):49,00,6e,00,74,00,65,00,72,00,66,00,61,00,63,00,65,00,54,00,79,00,70,00,65,00,00,00
(and on for 1,355 lines)
Filed under Uncategorized
Thanks to “TJ” for tipping me off about another use of the Registry “hive” format in recent versions of Windows.
There are scant details available, but if you have a version of Windows Vista or later, then the boot loader is no longer configured through a plain text file (“BOOT.INI”) but via a binary blob. Microsoft provides a tool called “BCDEDIT.EXE” that you are supposed to use to edit this, but the blob is a hive so you can use hivex to display or modify it.
We first use guestfish to download the blob:
$ guestfish --ro -a /dev/vg_trick/Windows7x64 -m /dev/sda1 Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help with commands 'quit' to quit the shell ><fs> ll / total 392 drwxrwxrwx 1 root root 4096 Dec 15 04:48 . dr-xr-xr-x 20 root root 0 Mar 30 13:30 .. -rwxrwxrwx 1 root root 8192 Dec 15 12:47 BOOTSECT.BAK drwxrwxrwx 1 root root 4096 Dec 15 12:47 Boot drwxrwxrwx 1 root root 0 Dec 15 04:48 System Volume Information -rwxrwxrwx 1 root root 383562 Jul 13 2009 bootmgr ><fs> ll /Boot/ total 596 drwxrwxrwx 1 root root 4096 Dec 15 12:47 . drwxrwxrwx 1 root root 4096 Dec 15 04:48 .. -rwxrwxrwx 1 root root 24576 Mar 25 12:25 BCD -rwxrwxrwx 1 root root 21504 Mar 25 12:25 BCD.LOG -rwxrwxrwx 2 root root 0 Dec 15 12:47 BCD.LOG1 -rwxrwxrwx 2 root root 0 Dec 15 12:47 BCD.LOG2 -rwxrwxrwx 1 root root 65536 Dec 15 12:47 BOOTSTAT.DAT [snipped] ><fs> download /Boot/BCD /tmp/BCD ><fs> ^D
Then we can dump the contents out using hivexregedit. (We could also browse the contents with hivexsh).
$ hivexregedit --export /tmp/BCD '\' > /tmp/BCD.reg
In typical Microsoft style, the contents themselves are obscure, consisting of plenty of subkeys that look like this:
[\Objects\{1afa9c49-16ab-4a5c-901b-212802da9460}\Elements\14000006] "Element"=hex(7):7b,00,37,00,65,00,61,00,32,00,65,00,31,00,61,00,63,\ 00,2d,00,32,00,65,00,36,00,31,00,2d,00,34,00,37,00,32,00,38,00,2d,00,\ 61,00,61,00,61,00,33,00,2d,00,38,00,39,00,36,00,64,00,39,00,64,00,30,\ 00,61,00,39,00,66,00,30,00,65,00,7d,00,00,00,00,00
(Note that “type 7” is a list of strings, and the whole thing is encoded in UTF-16LE, so this requires some further work to parse).
There’s scope here to extend virt-inspector to understand this stuff, or even to write a BCDEDIT-style tool to modify the way Window VMs boot. Apparently the current BCDEDIT tool is half-arsed, so here’s another opportunity to beat Microsoft’s own tooling.
Filed under Uncategorized