Czyli po mojemu:
void RegisterFileExtension(char Ext[], char Name[],char ProgramName[], char Icon[])
{
HKEY key;
char str[40];
if(Ext[1] == '.') Ext = '.' + Ext;
sprintf(str,"%s",Ext);
if( RegOpenKeyEx(HKEY_CLASSES_ROOT, str, 0, KEY_CREATE_SUB_KEY | KEY_ALL_ACCESS,&key)!=ERROR_SUCCESS) RegCreateKey(HKEY_CLASSES_ROOT,str,&key);
RegSetValueEx(key,"",0,REG_SZ,(LPBYTE)Name, strlen(Name));
RegCloseKey(key);
sprintf(str,"%s%s",Name, "\\shell\\open\\command");
if( RegOpenKeyEx(HKEY_CLASSES_ROOT, str, 0, KEY_CREATE_SUB_KEY | KEY_ALL_ACCESS,&key)!=ERROR_SUCCESS) RegCreateKey(HKEY_CLASSES_ROOT,str,&key);
sprintf(str,"%s%s%s%s","\"",ProgramName,"\"","\"%1\"");
RegSetValueEx(key,"",0,REG_SZ,(LPBYTE)str, strlen(str));
RegCloseKey(key);
sprintf(str,"%s%s",Name, "\\DefaultIcon");
if( RegOpenKeyEx(HKEY_CLASSES_ROOT, str, 0, KEY_CREATE_SUB_KEY | KEY_ALL_ACCESS,&key)!=ERROR_SUCCESS) RegCreateKey(HKEY_CLASSES_ROOT,str,&key);
sprintf(str,"%s",Icon);
RegSetValueEx(key,"",0,REG_SZ,(LPBYTE)str, strlen(str));
RegCloseKey(key);
return;
}