Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- configure | 2 ++ configure.ac | 1 + programs/dllhost/Makefile.in | 7 ++++++ programs/dllhost/dllhost.c | 45 ++++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 programs/dllhost/Makefile.in create mode 100644 programs/dllhost/dllhost.c
diff --git a/configure b/configure index 5dadd827dbd..30bb02edf67 100755 --- a/configure +++ b/configure @@ -1849,6 +1849,7 @@ enable_conhost enable_control enable_cscript enable_dism +enable_dllhost enable_dplaysvr enable_dpnsvr enable_dpvsetup @@ -22658,6 +22659,7 @@ wine_fn_config_makefile programs/conhost/tests enable_tests wine_fn_config_makefile programs/control enable_control wine_fn_config_makefile programs/cscript enable_cscript wine_fn_config_makefile programs/dism enable_dism +wine_fn_config_makefile programs/dllhost enable_dllhost wine_fn_config_makefile programs/dplaysvr enable_dplaysvr wine_fn_config_makefile programs/dpnsvr enable_dpnsvr wine_fn_config_makefile programs/dpvsetup enable_dpvsetup diff --git a/configure.ac b/configure.ac index e3d797d790d..194fe8df783 100644 --- a/configure.ac +++ b/configure.ac @@ -3549,6 +3549,7 @@ WINE_CONFIG_MAKEFILE(programs/conhost/tests) WINE_CONFIG_MAKEFILE(programs/control) WINE_CONFIG_MAKEFILE(programs/cscript) WINE_CONFIG_MAKEFILE(programs/dism) +WINE_CONFIG_MAKEFILE(programs/dllhost) WINE_CONFIG_MAKEFILE(programs/dplaysvr) WINE_CONFIG_MAKEFILE(programs/dpnsvr) WINE_CONFIG_MAKEFILE(programs/dpvsetup) diff --git a/programs/dllhost/Makefile.in b/programs/dllhost/Makefile.in new file mode 100644 index 00000000000..a92add9c2f0 --- /dev/null +++ b/programs/dllhost/Makefile.in @@ -0,0 +1,7 @@ +MODULE = dllhost.exe +IMPORTS = ole32 + +EXTRADLLFLAGS = -mwindows -municode + +C_SRCS = \ + dllhost.c diff --git a/programs/dllhost/dllhost.c b/programs/dllhost/dllhost.c new file mode 100644 index 00000000000..10bfb084213 --- /dev/null +++ b/programs/dllhost/dllhost.c @@ -0,0 +1,45 @@ +/* + * Copyright 2022 Dmitry Timoshkov + * + * 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 + */ + +#include <stdarg.h> + +#include <windef.h> +#include <winbase.h> +#include <objbase.h> + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dllhost); + +int WINAPI wWinMain(HINSTANCE hinst, HINSTANCE previnst, LPWSTR cmdline, int showcmd) +{ + HRESULT hr; + CLSID clsid; + + CoInitializeEx(NULL, COINIT_MULTITHREADED); + + hr = CLSIDFromString(cmdline, &clsid); + if (hr == S_OK) + { + FIXME("hosting object %s is not implemented\n", wine_dbgstr_guid(&clsid)); + } + + CoUninitialize(); + + return 0; +}
On Tue, Feb 22, 2022 at 05:49:54PM +0300, Dmitry Timoshkov wrote:
+int WINAPI wWinMain(HINSTANCE hinst, HINSTANCE previnst, LPWSTR cmdline, int showcmd) +{
- HRESULT hr;
- CLSID clsid;
- CoInitializeEx(NULL, COINIT_MULTITHREADED);
- hr = CLSIDFromString(cmdline, &clsid);
It looks like Windows uses the cmdline:
dllhost.exe /PROCESSID:{GUID}
Huw.
Huw Davies huw@codeweavers.com wrote:
On Tue, Feb 22, 2022 at 05:49:54PM +0300, Dmitry Timoshkov wrote:
+int WINAPI wWinMain(HINSTANCE hinst, HINSTANCE previnst, LPWSTR cmdline, int showcmd) +{
- HRESULT hr;
- CLSID clsid;
- CoInitializeEx(NULL, COINIT_MULTITHREADED);
- hr = CLSIDFromString(cmdline, &clsid);
It looks like Windows uses the cmdline:
dllhost.exe /PROCESSID:{GUID}
MSDN's "Using the System-Supplied Surrogate" article https://docs.microsoft.com/en-us/windows/win32/com/using-the-system-supplied... and a pretty good guide for writing custom surrogate (which I follow in my work) https://docs.microsoft.com/en-us/windows/win32/com/writing-a-custom-surrogat... they both mention only "CLSID on the launch command line". Also the prototype patch attached to the bug https://bugs.winehq.org/show_bug.cgi?id=20296 passes just {GUID} on the command line.
Where do you see /PROCESSID mentioned for the surrogate process context? Also it's not clear to me that /PROCESSID belongs to the hosted object, and not something else, like really some process id.
Probably that's an internal implementation detail, and I'm open to use whatever is deemed to be appropriate.
On Wed, Feb 23, 2022 at 03:36:55PM +0300, Dmitry Timoshkov wrote:
Huw Davies huw@codeweavers.com wrote:
On Tue, Feb 22, 2022 at 05:49:54PM +0300, Dmitry Timoshkov wrote:
+int WINAPI wWinMain(HINSTANCE hinst, HINSTANCE previnst, LPWSTR cmdline, int showcmd) +{
- HRESULT hr;
- CLSID clsid;
- CoInitializeEx(NULL, COINIT_MULTITHREADED);
- hr = CLSIDFromString(cmdline, &clsid);
It looks like Windows uses the cmdline:
dllhost.exe /PROCESSID:{GUID}
MSDN's "Using the System-Supplied Surrogate" article https://docs.microsoft.com/en-us/windows/win32/com/using-the-system-supplied... and a pretty good guide for writing custom surrogate (which I follow in my work) https://docs.microsoft.com/en-us/windows/win32/com/writing-a-custom-surrogat... they both mention only "CLSID on the launch command line". Also the prototype patch attached to the bug https://bugs.winehq.org/show_bug.cgi?id=20296 passes just {GUID} on the command line.
Thanks for the links, I'll take a look.
Where do you see /PROCESSID mentioned for the surrogate process context? Also it's not clear to me that /PROCESSID belongs to the hosted object, and not something else, like really some process id.
I used Process Explorer on Win 10 to look at the command-lines of some running dllhost.exe instances. For the one handling the thumbnail cache, the guid matched the CLSID of the thumbnail cache server (and besides there was nothing else on the command-line, so it had to be that).
Also see: https://www.howtogeek.com/326462/what-is-com-surrogate-dllhost.exe-and-why-i...
Probably that's an internal implementation detail, and I'm open to use whatever is deemed to be appropriate.
Sure, but as it's easy enough to implement, I think we should follow Windows' behaviour.
Huw.