As time permits, I've been working on the next version of MceRepair, but with the real world taking up so much of my extracurricular time it's been a slow row to hoe.

Here's what's in it so far:

  • Detects and reports your installation status, including baseline (e.g. Media Center 2005) and installed updates (e.g. KB908250)
  • SHA-1 hashes for every MCE 2005+ binary.  This will allow me to zero in on exactly the versions of the binaries that are present on the machine, whether they are corrupted or original, and which KB package they belong to.
  • Targeted unregistration and re-registration, which should improve results and execution time.
  • DRM subsystem analysis to detect "corrupt" state and suggest resolutions (simple tests to determine whether you can playback certain content).
  • Complete rewrite in C++ to remove the .NET dependency.  This is necessary because one of the problems most prevalent with MCE installs seems to be a corrupt .NET installation, so I need a reliable way to detect that and suggest repair options.
  • Creates a System Restore Point, if the feature is enabled on the machine

Here are planned features that I have not yet completed:

  • Detection of improperly installed MCE Update packages
  • Registry filter driver to intercept DllRegisterServer attempts to write to the registry.  This will allow MceRepair to compare the existing registry with what the DLL "wants" it to be without actually making changes, and compare that with a database of "known good" registry entries.
  • GAC scrubbing
  • EPG data analysis (for corrupt EPG)
  • Recorded TV file scrubbing to delete corrupt recordings

I spent a lot of time compiling the baseline data for the application to have something to compare machine configurations against.  Since I cannot trust that the binary wasn't tampered with, I decided to include a strong hash as part of the binary's identity--this required digging up every single QFE shipped by the team and recalculating hashes against them.

As soon as I have the registry filter driver portion complete, I'll be able to use it to calculate the baseline registry information for the binaries, too.  I don't fully trust the update.inf's registry section, since it may assume that the underlying system has a working configuration set (i.e. it may be missing some entries).