diff --git a/base/services/browser/browser.c b/base/services/browser/browser.c index 406386cc6ff..eaf2bd09249 100644 --- a/base/services/browser/browser.c +++ b/base/services/browser/browser.c @@ -15,6 +15,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(browser); /* GLOBALS ******************************************************************/ HINSTANCE hDllInstance; +PSVCHOST_GLOBAL_DATA lpServiceGlobals; static WCHAR ServiceName[] = L"browser"; @@ -31,7 +32,12 @@ UpdateServiceStatus( { ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; ServiceStatus.dwCurrentState = dwState; - ServiceStatus.dwControlsAccepted = 0; + + if (dwState == SERVICE_RUNNING) + ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_STOP; + else + ServiceStatus.dwControlsAccepted = 0; + ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; @@ -87,6 +93,8 @@ ServiceControlHandler( case SERVICE_CONTROL_SHUTDOWN: TRACE(" SERVICE_CONTROL_SHUTDOWN received\n"); + /* Stop listening to incoming RPC messages */ + RpcMgmtStopServerListening(NULL); UpdateServiceStatus(SERVICE_STOPPED); return ERROR_SUCCESS; @@ -125,8 +133,8 @@ ServiceInit(VOID) VOID WINAPI ServiceMain( - _In_ INT ArgCount, - _In_ PWSTR *ArgVector) + _In_ DWORD ArgCount, + _In_ LPWSTR *ArgVector) { DWORD dwError; @@ -158,6 +166,16 @@ ServiceMain( } +VOID +WINAPI +SvchostPushServiceGlobals( + _In_ PSVCHOST_GLOBAL_DATA lpGlobals) +{ + TRACE("SvchostPushServiceGlobals(%p)\n", lpGlobals); + lpServiceGlobals = lpGlobals; +} + + BOOL WINAPI DllMain( diff --git a/base/services/browser/browser.spec b/base/services/browser/browser.spec index 78e9d5ead71..4b6f4c8cf19 100644 --- a/base/services/browser/browser.spec +++ b/base/services/browser/browser.spec @@ -1,3 +1,3 @@ @ stub I_BrowserServerEnumForXactsrv @ stdcall ServiceMain(long ptr) -@ stub SvchostPushServiceGlobals +@ stdcall SvchostPushServiceGlobals(ptr) diff --git a/base/services/browser/precomp.h b/base/services/browser/precomp.h index e978c3cfd9f..a2f2d17daf3 100644 --- a/base/services/browser/precomp.h +++ b/base/services/browser/precomp.h @@ -18,12 +18,14 @@ #include #include #include +#include #include #include extern HINSTANCE hDllInstance; +extern PSVCHOST_GLOBAL_DATA lpServiceGlobals; DWORD WINAPI diff --git a/boot/bootdata/hivesft.inf b/boot/bootdata/hivesft.inf index 8248b441e20..cf89d294c31 100644 --- a/boot/bootdata/hivesft.inf +++ b/boot/bootdata/hivesft.inf @@ -2031,7 +2031,7 @@ HKLM,"SOFTWARE\Microsoft\Ole","EnableRemoteConnect",0x00000000,"N" ; SvcHost services HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost","DcomLaunch",0x00010000,"DcomLaunch","PlugPlay" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost","netsvcs",0x00010000,"BITS","DHCP","lanmanserver","lanmanworkstation","Schedule","seclogon","Themes","W32Time","winmgmt","wuauserv" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost","netsvcs",0x00010000,"BITS","Browser","DHCP","lanmanserver","lanmanworkstation","Schedule","seclogon","Themes","W32Time","winmgmt","wuauserv" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost","NetworkService",0x00010000,"DnsCache" ; Win32 config