From 66c728dec1a37f10c6e039f0a63558c05590ab9d Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 12 Mar 2008 18:41:11 +0100 Subject: [PATCH] jscript: Added Dll[Un]RegisterServer implementation. --- dlls/jscript/Makefile.in | 2 + dlls/jscript/jscript.inf | 97 +++++++++++++++++++++++++++++++++++++ dlls/jscript/jscript_main.c | 86 ++++++++++++++++++++++++++++++-- dlls/jscript/rsrc.rc | 20 ++++++++ 4 files changed, 200 insertions(+), 5 deletions(-) create mode 100644 dlls/jscript/jscript.inf create mode 100644 dlls/jscript/rsrc.rc diff --git a/dlls/jscript/Makefile.in b/dlls/jscript/Makefile.in index c1ce428a0a8..f314abb4ffe 100644 --- a/dlls/jscript/Makefile.in +++ b/dlls/jscript/Makefile.in @@ -6,6 +6,8 @@ MODULE = jscript.dll IMPORTS = kernel32 EXTRALIBS = -luuid +RC_SRCS = rsrc.rc + C_SRCS = \ jscript_main.c diff --git a/dlls/jscript/jscript.inf b/dlls/jscript/jscript.inf new file mode 100644 index 00000000000..bdec721c040 --- /dev/null +++ b/dlls/jscript/jscript.inf @@ -0,0 +1,97 @@ +[version] +Signature="$CHICAGO$" + + +[RegisterDll] +AddReg=Classes.Reg + + +[UnregisterDll] +DelReg=Classes.Reg + + +[Classes.Reg] +HKCR,"CLSID\%CLSID_JScript%",,,"JScript Language" +HKCR,"CLSID\%CLSID_JScript%\Implemented Categories\%CATID_ActiveScript%",,, +HKCR,"CLSID\%CLSID_JScript%\Implemented Categories\%CATID_ActiveScriptParse%",,, +HKCR,"CLSID\%CLSID_JScript%\InprocServer32",,,"%MODULE%" +HKCR,"CLSID\%CLSID_JScript%\InprocServer32","ThreadingModel",,"Both" +HKCR,"CLSID\%CLSID_JScript%\OLEScript",,, +HKCR,"CLSID\%CLSID_JScript%\ProgID",,,"JScript" + +HKCR,"CLSID\%CLSID_JScriptAuthor%",,,"JScript Language Authoring" +HKCR,"CLSID\%CLSID_JScriptAuthor%\Implemented Categories\%CATID_ActiveScriptAuthor%",,, +HKCR,"CLSID\%CLSID_JScriptAuthor%\InprocServer32",,,"%MODULE%" +HKCR,"CLSID\%CLSID_JScriptAuthor%\InprocServer32","ThreadingModel",,"Both" +HKCR,"CLSID\%CLSID_JScriptAuthor%\OLEScript",,, +HKCR,"CLSID\%CLSID_JScriptAuthor%\ProgID",,,"JScript Author" + +HKCR,"CLSID\%CLSID_JScriptEncode%",,,"JScript Language Encoding" +HKCR,"CLSID\%CLSID_JScriptEncode%\Implemented Categories\%CATID_ActiveScript%",,, +HKCR,"CLSID\%CLSID_JScriptEncode%\Implemented Categories\%CATID_ActiveScriptParse%",,, +HKCR,"CLSID\%CLSID_JScriptEncode%\Implemented Categories\%CATID_ActiveScriptEncode%",,, +HKCR,"CLSID\%CLSID_JScriptEncode%\InprocServer32",,,"%MODULE%" +HKCR,"CLSID\%CLSID_JScriptEncode%\InprocServer32","ThreadingModel",,"Both" +HKCR,"CLSID\%CLSID_JScriptEncode%\OLEScript",,, +HKCR,"CLSID\%CLSID_JScriptEncode%\ProgID",,,"JScript.Encode" + +HKCR,"Component Categories\%CATID_ActiveScriptAuthor%","409",,"Active Scripting Engine with Authoring" +HKCR,"Component Categories\%CATID_ActiveScript%","409",,"Active Scripting Engine" +HKCR,"Component Categories\%CATID_ActiveScriptParse%","409",,"Active Scripting Engine with Parsing" +HKCR,"Component Categories\%CATID_ActiveScriptEncode%","409",,"Active Scripting Engine with Encoding" + +HKCR,"ECMAScript",,,"JScript Language" +HKCR,"ECMAScript\CLSID",,,"%CLSID_JScript%" +HKCR,"ECMAScript\OLEScript",,, + +HKCR,"JavaScript",,,"JScript Language" +HKCR,"JavaScript\CLSID",,,"%CLSID_JScript%" +HKCR,"JavaScript\OLEScript",,, + +HKCR,"JavaScript Author",,,"JScript Language Authoring" +HKCR,"JavaScript Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"JavaScript Author\OLEScript",,, + +HKCR,"JavaScript1.1",,,"JScript Language" +HKCR,"JavaScript1.1\CLSID",,,"%CLSID_JScript%" +HKCR,"JavaScript1.1\OLEScript",,, + +HKCR,"JavaScript1.1 Author",,,"JScript Language Authoring" +HKCR,"JavaScript1.1 Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"JavaScript1.1 Author\OLEScript",,, + +HKCR,"JavaScript1.2",,,"JScript Language" +HKCR,"JavaScript1.2\CLSID",,,"%CLSID_JScript%" +HKCR,"JavaScript1.2\OLEScript",,, + +HKCR,"JavaScript1.2 Author",,,"JScript Language Authoring" +HKCR,"JavaScript1.2 Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"JavaScript1.2 Author\OLEScript",,, + +HKCR,"JavaScript1.3",,,"JScript Language" +HKCR,"JavaScript1.3\CLSID",,,"%CLSID_JScript%" +HKCR,"JavaScript1.3\OLEScript",,, + +HKCR,"JScript",,,"JScript Language" +HKCR,"JScript\CLSID",,,"%CLSID_JScript%" +HKCR,"JScript\OLEScript",,, + +HKCR,"JScript Author",,,"JScript Language Authoring" +HKCR,"JScript Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"JScript Author\OLEScript",,, + +HKCR,"JScript.Encode",,,"JScript Language Encoding" +HKCR,"JScript.Encode\CLSID",,,"%CLSID_JScriptEncode%" +HKCR,"JScript.Encode\OLEScript",,, + +HKCR,"LiveScript",,,"JScript Language" +HKCR,"LiveScript\CLSID",,,"%CLSID_JScript%" +HKCR,"LiveScript\OLEScript",,, + +HKCR,"LiveScript Author",,,"JScript Language Authoring" +HKCR,"LiveScript Author\CLSID",,,"%CLSID_JScriptAuthor%" +HKCR,"LiveScript Author\OLEScript",,, + + +[Strings] +MODULE="jscript.dll" diff --git a/dlls/jscript/jscript_main.c b/dlls/jscript/jscript_main.c index 807a821e808..dea26ca1aed 100644 --- a/dlls/jscript/jscript_main.c +++ b/dlls/jscript/jscript_main.c @@ -19,16 +19,34 @@ #include "config.h" #include +#include #define COBJMACROS #include "windef.h" #include "winbase.h" +#include "winuser.h" +#include "winreg.h" +#include "ole2.h" +#include "advpub.h" + +#include "initguid.h" +#include "activscp.h" +#include "activaut.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(jscript); +static const CLSID CLSID_JScript = + {0xf414c260,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}}; +static const CLSID CLSID_JScriptAuthor = + {0xf414c261,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}}; +static const CLSID CLSID_JScriptEncode = + {0xf414c262,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}}; + +static HINSTANCE jscript_hinstance; + /****************************************************************** * DllMain (jscript.@) */ @@ -41,7 +59,8 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) case DLL_WINE_PREATTACH: return FALSE; /* prefer native version */ case DLL_PROCESS_ATTACH: - DisableThreadLibraryCalls(hInstDLL); + DisableThreadLibraryCalls(hInstDLL); + jscript_hinstance = hInstDLL; break; } @@ -66,13 +85,70 @@ HRESULT WINAPI DllCanUnloadNow(void) return S_FALSE; } +/*********************************************************************** + * register_inf + */ + +#define INF_SET_ID(id) \ + do \ + { \ + static CHAR name[] = #id; \ + \ + pse[i].pszName = name; \ + clsids[i++] = &id; \ + } while (0) + +static HRESULT register_inf(BOOL doregister) +{ + HRESULT hres; + HMODULE hAdvpack; + HRESULT (WINAPI *pRegInstall)(HMODULE hm, LPCSTR pszSection, const STRTABLEA* pstTable); + STRTABLEA strtable; + STRENTRYA pse[7]; + static CLSID const *clsids[7]; + int i = 0; + + static const WCHAR advpackW[] = {'a','d','v','p','a','c','k','.','d','l','l',0}; + + INF_SET_ID(CLSID_JScript); + INF_SET_ID(CLSID_JScriptAuthor); + INF_SET_ID(CLSID_JScriptEncode); + INF_SET_ID(CATID_ActiveScript); + INF_SET_ID(CATID_ActiveScriptParse); + INF_SET_ID(CATID_ActiveScriptEncode); + INF_SET_ID(CATID_ActiveScriptAuthor); + + for(i = 0; i < sizeof(pse)/sizeof(pse[0]); i++) { + pse[i].pszValue = HeapAlloc(GetProcessHeap(), 0, 39); + sprintf(pse[i].pszValue, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + clsids[i]->Data1, clsids[i]->Data2, clsids[i]->Data3, clsids[i]->Data4[0], + clsids[i]->Data4[1], clsids[i]->Data4[2], clsids[i]->Data4[3], clsids[i]->Data4[4], + clsids[i]->Data4[5], clsids[i]->Data4[6], clsids[i]->Data4[7]); + } + + strtable.cEntries = sizeof(pse)/sizeof(pse[0]); + strtable.pse = pse; + + hAdvpack = LoadLibraryW(advpackW); + pRegInstall = (void *)GetProcAddress(hAdvpack, "RegInstall"); + + hres = pRegInstall(jscript_hinstance, doregister ? "RegisterDll" : "UnregisterDll", &strtable); + + for(i=0; i < sizeof(pse)/sizeof(pse[0]); i++) + HeapFree(GetProcessHeap(), 0, pse[i].pszValue); + + return hres; +} + +#undef INF_SET_CLSID + /*********************************************************************** * DllRegisterServer (jscript.@) */ HRESULT WINAPI DllRegisterServer(void) { - FIXME("()\n"); - return S_OK; + TRACE("()\n"); + return register_inf(TRUE); } /*********************************************************************** @@ -80,6 +156,6 @@ HRESULT WINAPI DllRegisterServer(void) */ HRESULT WINAPI DllUnregisterServer(void) { - FIXME("()\n"); - return S_OK; + TRACE("()\n"); + return register_inf(FALSE); } diff --git a/dlls/jscript/rsrc.rc b/dlls/jscript/rsrc.rc new file mode 100644 index 00000000000..7a08b7909d7 --- /dev/null +++ b/dlls/jscript/rsrc.rc @@ -0,0 +1,20 @@ +/* + * Copyright 2008 Jacek Caban for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* @makedep: jscript.inf */ +REGINST REGINST jscript.inf