The Shim database is a mystic area inside windows… For example it will display an UAC (admin) prompt if your application-name contains the word “*instal*”.
You can display all available shims with the Application Compatibility Administrator by using the /x command line switch.
Also there is a tool from Heath Steward which dumps the database into an XML file.
Of course, he failed to prvide the source-code of his sample project.
Also, Alex Ionescu wrote a small dump tool, but also has never published it…
So I decided to dig into this almost not documented world and write a small Shim-Dumper and Exe-matching tool (whitch source code ).
Shim Database Tool (sdb) v1.0 Copyright (C) 2010 Jochen Kalmbach Usage: sdb.exe [-noids] [-match] [PathToShimDatabse] [PathToFileName] -noids Will prevent the output of the TagIds -match Will match the provided file with the installed databases and displays the activated shims In this case 'PathToFileName' is required NOTE: If no shim database path is provided, the default database will be used.
You can use it either for dumping the shimdatabase like:
This will redirect the output to an xml-file and will look something like:
setup32.exe WordPerfect Office 2000 Corel * Corel Corporation Corel Setup Wizard programs\wpwin9.exe Corel Corporation Limited WordPerfect® 9 appman\tools\cset90.exe WinXPSP1VersionLie 0x284e0 $ *
(be aware: the current Win7 database is about 17 MB!)
You also can use this tool to find out, if an application has a shim applied:
C:>sdb -match MyInstaller.exe Shim found for file: MyInstaller.exe Flags: 0x0: Exe-Shim: 0x35472, Flags: 0x0: Layer-Flags: 0x0: Shim-Database: 11111111-1111-1111-1111111111111111
Currently it just displays the TagId of the Shim. You can use this to search the xml-file for the corresponding id.
Have fun, using this tool
The project (VS2008) can be found here:
It will compile for x86 and x64.