-Index: atl_main.c
-===================================================================
---- atl_main.c (revision 48273)
-+++ atl_main.c (working copy)
-@@ -60,7 +60,7 @@
- INT i;
- UINT size;
+diff -prudN e:\Wine\dlls\atl/atl_main.c e:\reactos\dll\win32\atl/atl_main.c
+--- e:\Wine\dlls\atl/atl_main.c 2013-09-03 23:09:36.308717300 +0100
++++ e:\reactos\dll\win32\atl/atl_main.c 2013-09-12 12:15:17.112785700 +0100
+@@ -547,6 +555,53 @@ static const IClassFactoryVtbl IRegistra
-- FIXME("SEMI-STUB (%p %p %p)\n",pM,p,h);
-+ //FIXME("SEMI-STUB (%p %p %p)\n",pM,p,h);
-
- size = pM->cbSize;
- switch (size)
-Index: registrar.c
-===================================================================
---- registrar.c (revision 48273)
-+++ registrar.c (revision 48273)
-@@ -819,6 +819,19 @@
- return hres;
- }
+ static IClassFactory RegistrarCF = { &IRegistrarCFVtbl };
++static HRESULT do_register_dll_server(IRegistrar *pRegistrar, LPCOLESTR wszDll,
++ LPCOLESTR wszId, BOOL do_register,
++ const struct _ATL_REGMAP_ENTRY* pMapEntries)
++{
++ IRegistrar *registrar;
++ HRESULT hres;
++ const struct _ATL_REGMAP_ENTRY *pMapEntry;
++
++ static const WCHAR wszModule[] = {'M','O','D','U','L','E',0};
++ static const WCHAR wszRegistry[] = {'R','E','G','I','S','T','R','Y',0};
++
++ if(pRegistrar) {
++ registrar = pRegistrar;
++ }else {
++ hres = AtlCreateRegistrar(®istrar);
++ if(FAILED(hres))
++ return hres;
++ }
++
++ IRegistrar_AddReplacement(registrar, wszModule, wszDll);
++
++ for (pMapEntry = pMapEntries; pMapEntry && pMapEntry->szKey; pMapEntry++)
++ IRegistrar_AddReplacement(registrar, pMapEntry->szKey, pMapEntry->szData);
++
++ if(do_register)
++ hres = IRegistrar_ResourceRegisterSz(registrar, wszDll, wszId, wszRegistry);
++ else
++ hres = IRegistrar_ResourceUnregisterSz(registrar, wszDll, wszId, wszRegistry);
++
++ if(registrar != pRegistrar)
++ IRegistrar_Release(registrar);
++ return hres;
++}
++
+static HRESULT do_register_server(BOOL do_register)
+{
+ static const WCHAR CLSID_RegistrarW[] =
+ return do_register_dll_server(NULL, atl_dllW, MAKEINTRESOURCEW(101), do_register, reg_map);
+}
+
- /***********************************************************************
- * AtlModuleUpdateRegistryFromResourceD [ATL.@]
- *
-@@ -849,7 +862,8 @@
+ /**************************************************************
+ * DllGetClassObject (ATL.2)
+ */
+@@ -566,7 +621,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSI
*/
HRESULT WINAPI DllRegisterServer(void)
{
}
/***********************************************************************
-@@ -857,7 +871,7 @@
+@@ -574,7 +630,7 @@ HRESULT WINAPI DllRegisterServer(void)
*/
HRESULT WINAPI DllUnregisterServer(void)
{