diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 33dac8cb..d9b90f60 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -389,6 +389,7 @@ patch_enable_all () enable_ws2_32_getsockopt="$1" enable_wtsapi32_EnumerateProcesses="$1" enable_wtsapi32_WTSQueryUserToken="$1" + enable_wuauserv_Dummy_Service="$1" enable_wusa_MSU_Package_Installer="$1" } @@ -1329,6 +1330,9 @@ patch_enable () wtsapi32-WTSQueryUserToken) enable_wtsapi32_WTSQueryUserToken="$2" ;; + wuauserv-Dummy_Service) + enable_wuauserv_Dummy_Service="$2" + ;; wusa-MSU_Package_Installer) enable_wusa_MSU_Package_Installer="$2" ;; @@ -7526,6 +7530,18 @@ if test "$enable_wtsapi32_WTSQueryUserToken" -eq 1; then ) >> "$patchlist" fi +# Patchset wuauserv-Dummy_Service +# | +# | Modified files: +# | * configure.ac, loader/wine.inf.in, programs/wuauserv/Makefile.in, programs/wuauserv/main.c +# | +if test "$enable_wuauserv_Dummy_Service" -eq 1; then + patch_apply wuauserv-Dummy_Service/0001-wuauserv-Add-dummy-service.patch + ( + echo '+ { "Michael Müller", "wuauserv: Add dummy service.", 1 },'; + ) >> "$patchlist" +fi + # Patchset wusa-MSU_Package_Installer # | # | This patchset fixes the following Wine bugs: diff --git a/patches/wuauserv-Dummy_Service/0001-wuauserv-Add-dummy-service.patch b/patches/wuauserv-Dummy_Service/0001-wuauserv-Add-dummy-service.patch new file mode 100644 index 00000000..9b76aec3 --- /dev/null +++ b/patches/wuauserv-Dummy_Service/0001-wuauserv-Add-dummy-service.patch @@ -0,0 +1,194 @@ +From 7e5702413a132b28a02abaf8c22f2c25b9ca1edf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michael=20M=C3=BCller?= +Date: Fri, 11 Mar 2016 21:44:53 +0100 +Subject: wuauserv: Add dummy service. + +--- + configure.ac | 1 + + loader/wine.inf.in | 11 +++++ + programs/wuauserv/Makefile.in | 6 +++ + programs/wuauserv/main.c | 104 ++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 122 insertions(+) + create mode 100644 programs/wuauserv/Makefile.in + create mode 100644 programs/wuauserv/main.c + +diff --git a/configure.ac b/configure.ac +index 09e0f53..bffb944 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3520,6 +3520,7 @@ WINE_CONFIG_PROGRAM(wordpad,,[clean,install]) + WINE_CONFIG_PROGRAM(write,,[clean,install]) + WINE_CONFIG_PROGRAM(wscript,,[clean,install]) + WINE_CONFIG_TEST(programs/wscript/tests) ++WINE_CONFIG_PROGRAM(wuauserv,,[install]) + WINE_CONFIG_PROGRAM(wusa,,[install]) + WINE_CONFIG_PROGRAM(xcopy,,[clean,install]) + WINE_CONFIG_TEST(programs/xcopy/tests) +diff --git a/loader/wine.inf.in b/loader/wine.inf.in +index d22b29b..fe7459e 100644 +--- a/loader/wine.inf.in ++++ b/loader/wine.inf.in +@@ -129,6 +129,7 @@ AddService=FontCache3.0.0.0,0,WPFFontCacheService + AddService=LanmanServer,0,LanmanServerService + AddService=FontCache,0,FontCacheService + AddService=Schedule,0,TaskSchedulerService ++AddService=wuauserv,0,wuauService + + [DefaultInstall.NT.Services] + AddService=BITS,0,BITSService +@@ -142,6 +143,7 @@ AddService=FontCache3.0.0.0,0,WPFFontCacheService + AddService=LanmanServer,0,LanmanServerService + AddService=FontCache,0,FontCacheService + AddService=Schedule,0,TaskSchedulerService ++AddService=wuauserv,0,wuauService + + [DefaultInstall.ntamd64.Services] + AddService=BITS,0,BITSService +@@ -155,6 +157,7 @@ AddService=FontCache3.0.0.0,0,WPFFontCacheService + AddService=LanmanServer,0,LanmanServerService + AddService=FontCache,0,FontCacheService + AddService=Schedule,0,TaskSchedulerService ++AddService=wuauserv,0,wuauService + + [Strings] + MciExtStr="Software\Microsoft\Windows NT\CurrentVersion\MCI Extensions" +@@ -3253,6 +3256,14 @@ ErrorControl=1 + HKR,Parameters,"ServiceDll",,"%11%\schedsvc.dll" + HKLM,%CurrentVersionNT%\SvcHost,"netsvcs",0x00010008,"Schedule" + ++[wuauService] ++Description="wuauserv" ++DisplayName="Automatic Updates" ++ServiceBinary="%11%\wuauserv.exe" ++ServiceType=32 ++StartType=3 ++ErrorControl=1 ++ + [Services] + HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -a -r" + HKLM,"System\CurrentControlSet\Services\Eventlog\Application",,16 +diff --git a/programs/wuauserv/Makefile.in b/programs/wuauserv/Makefile.in +new file mode 100644 +index 0000000..16f27f1 +--- /dev/null ++++ b/programs/wuauserv/Makefile.in +@@ -0,0 +1,6 @@ ++MODULE = wuauserv.exe ++APPMODE = -mconsole ++IMPORTS = advapi32 ++ ++C_SRCS = \ ++ main.c +diff --git a/programs/wuauserv/main.c b/programs/wuauserv/main.c +new file mode 100644 +index 0000000..31df299 +--- /dev/null ++++ b/programs/wuauserv/main.c +@@ -0,0 +1,104 @@ ++/* ++ * Copyright 2007 Jacek Caban for CodeWeavers ++ * Copyright 2016 Michael Müller ++ * ++ * 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 ++ */ ++ ++#define WIN32_LEAN_AND_MEAN ++ ++#include ++#include ++ ++#include "wine/debug.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(wuauserv); ++ ++static WCHAR wuauservW[] = {'w','u','a','u','s','e','r','v',0}; ++ ++static SERVICE_STATUS_HANDLE service_handle; ++static HANDLE stop_event; ++ ++static DWORD WINAPI service_handler( DWORD ctrl, DWORD event_type, LPVOID event_data, LPVOID context ) ++{ ++ SERVICE_STATUS status; ++ ++ status.dwServiceType = SERVICE_WIN32; ++ status.dwControlsAccepted = SERVICE_ACCEPT_STOP; ++ status.dwWin32ExitCode = 0; ++ status.dwServiceSpecificExitCode = 0; ++ status.dwCheckPoint = 0; ++ status.dwWaitHint = 0; ++ ++ switch(ctrl) ++ { ++ case SERVICE_CONTROL_STOP: ++ case SERVICE_CONTROL_SHUTDOWN: ++ WINE_TRACE( "shutting down\n" ); ++ status.dwCurrentState = SERVICE_STOP_PENDING; ++ status.dwControlsAccepted = 0; ++ SetServiceStatus( service_handle, &status ); ++ SetEvent( stop_event ); ++ return NO_ERROR; ++ default: ++ WINE_FIXME( "got service ctrl %x\n", ctrl ); ++ status.dwCurrentState = SERVICE_RUNNING; ++ SetServiceStatus( service_handle, &status ); ++ return NO_ERROR; ++ } ++} ++ ++static void WINAPI serv_main(DWORD argc, LPWSTR *argv) ++{ ++ SERVICE_STATUS status; ++ ++ WINE_TRACE( "starting service\n" ); ++ ++ stop_event = CreateEventW( NULL, TRUE, FALSE, NULL ); ++ ++ service_handle = RegisterServiceCtrlHandlerExW( wuauservW, service_handler, NULL ); ++ if (!service_handle) ++ return; ++ ++ status.dwServiceType = SERVICE_WIN32; ++ status.dwCurrentState = SERVICE_RUNNING; ++ status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; ++ status.dwWin32ExitCode = 0; ++ status.dwServiceSpecificExitCode = 0; ++ status.dwCheckPoint = 0; ++ status.dwWaitHint = 10000; ++ SetServiceStatus( service_handle, &status ); ++ ++ WaitForSingleObject( stop_event, INFINITE ); ++ ++ status.dwCurrentState = SERVICE_STOPPED; ++ status.dwControlsAccepted = 0; ++ SetServiceStatus( service_handle, &status ); ++ WINE_TRACE( "service stopped\n" ); ++} ++ ++int main(int argc, char **argv) ++{ ++ static const SERVICE_TABLE_ENTRYW servtbl[] = ++ { ++ {wuauservW, serv_main}, ++ {NULL, NULL} ++ }; ++ ++ WINE_TRACE( "(%d %p)\n", argc, argv ); ++ ++ StartServiceCtrlDispatcherW( servtbl ); ++ return 0; ++} +-- +2.7.1 + diff --git a/patches/wuauserv-Dummy_Service/definition b/patches/wuauserv-Dummy_Service/definition new file mode 100644 index 00000000..fe2a87db --- /dev/null +++ b/patches/wuauserv-Dummy_Service/definition @@ -0,0 +1 @@ +Fixes: Implement wuauserv dummy service