This looks fine, but I'm not sure if incrementally changing our current implementation is the best approach. I know Windows doesn't store data in the registry at all for builtin components, and my impression is that for custom components it reads from the registry all at once.
I think the ideal for us is to have some internal data structure containing all the data, which would be static for builtins and dynamic for registry info. We could probably get rid of the custom registration for windowscodecs.dll on prefix creation (but I'm not sure about the COM stuff).
I'm not aware of any application that uses its own custom components, so it might not be all that bad to start over with static data and leave the dynamic data for later if we need it. But that would be removing a feature that theoretically works now.