Как вариант - внести в регистри-ресурс обе ветки (HKCR{} и HKCU{SOFTWARE{Classes{}}} ), либо сделать 2 ресурса и подсовывать регистратору разные ресурсы в зависимости от ОС.
Так хоть тех кто на 2000/ХР обрадуете. Знаешь, скока на 2000+ сидят?
Тем паче что НТ4 потихоньку уходит....
-----------------
Порывшись в МСДН, я нашел интересную ф-цию RegOverridePredefKey, позволяющую заменить соответствие ключей
The RegOverridePredefKey function maps a predefined registry key to the specified registry key.
LONG RegOverridePredefKey(
HKEY hKey, // predefined handle to key
HKEY hNewHKey // new handle to key
);
hKey
[in] Handle to one of the following predefined reserved registry key handle values:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_PERFORMANCE_DATA
hNewHKey
[in] Handle to a key that is predefined or currently open. RegOverridePredefKey remaps hKey to refer to the hNewHKey key. This redirection applies only to the process that calls RegOverridePredefKey.
If hNewHKey is NULL, the function restores the default mapping of the predefined key.
Так получается, если при загрузке dll компоненты выполнить примерно такое
HKEY hNewHKey;
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Classes", 0, KEY_READ|KEY_WRITE , &hNewHKey );
RegOverridePredefKey(HKEY_CLASSES_ROOT, hNewHKey);
RegCloseKey(hNewHKey);
тогда вся работа с HKCR перемапится на подветку HKCU. (и может даже не с одной компонентой, а с последующими? это надо проверять, но если так - одним махом решиться проблема со ВСЕМИ компонентами). Работать будет, естественно, только на 2000+, поэтому ее надо через LoadLibrary/GetProcAddress искать.
PS. Я этого не проверял.