https://git.reactos.org/?p=reactos.git;a=commitdiff;h=691a739b0246947938ef5c...
commit 691a739b0246947938ef5ccc51ef9379d6320671 Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Sun Mar 20 17:21:45 2022 +0100 Commit: Eric Kohl eric.kohl@reactos.org CommitDate: Sun Mar 20 17:21:45 2022 +0100
[UMPNPMGR] Improve UpdateServiceStatus()
- Set dwCheckPoint - Set dwControlAccepted depending on the service state --- base/services/umpnpmgr/umpnpmgr.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/base/services/umpnpmgr/umpnpmgr.c b/base/services/umpnpmgr/umpnpmgr.c index 826efbde66b..67ba42fe82d 100644 --- a/base/services/umpnpmgr/umpnpmgr.c +++ b/base/services/umpnpmgr/umpnpmgr.c @@ -22,7 +22,7 @@ * FILE: base/services/umpnpmgr/umpnpmgr.c * PURPOSE: User-mode Plug and Play manager * PROGRAMMER: Eric Kohl (eric.kohl@reactos.org) - * Herv� Poussineau (hpoussin@reactos.org) + * Hervé Poussineau (hpoussin@reactos.org) * Colin Finck (colin@reactos.org) */
@@ -205,14 +205,20 @@ PnpEventThread(LPVOID lpParameter)
static VOID -UpdateServiceStatus(DWORD dwState) +UpdateServiceStatus( + _In_ DWORD dwState, + _In_ DWORD dwCheckPoint) { ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; ServiceStatus.dwCurrentState = dwState; - ServiceStatus.dwControlsAccepted = 0; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; - ServiceStatus.dwCheckPoint = 0; + ServiceStatus.dwCheckPoint = dwCheckPoint; + + if (dwState == SERVICE_RUNNING) + ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN; + else + ServiceStatus.dwControlsAccepted = 0;
if (dwState == SERVICE_START_PENDING || dwState == SERVICE_STOP_PENDING || @@ -239,19 +245,20 @@ ServiceControlHandler(DWORD dwControl, { case SERVICE_CONTROL_STOP: DPRINT1(" SERVICE_CONTROL_STOP received\n"); + UpdateServiceStatus(SERVICE_STOP_PENDING, 1); /* Stop listening to RPC Messages */ RpcMgmtStopServerListening(NULL); - UpdateServiceStatus(SERVICE_STOPPED); + UpdateServiceStatus(SERVICE_STOPPED, 0); return ERROR_SUCCESS;
case SERVICE_CONTROL_PAUSE: DPRINT1(" SERVICE_CONTROL_PAUSE received\n"); - UpdateServiceStatus(SERVICE_PAUSED); + UpdateServiceStatus(SERVICE_PAUSED, 0); return ERROR_SUCCESS;
case SERVICE_CONTROL_CONTINUE: DPRINT1(" SERVICE_CONTROL_CONTINUE received\n"); - UpdateServiceStatus(SERVICE_RUNNING); + UpdateServiceStatus(SERVICE_RUNNING, 0); return ERROR_SUCCESS;
case SERVICE_CONTROL_INTERROGATE: @@ -262,9 +269,10 @@ ServiceControlHandler(DWORD dwControl,
case SERVICE_CONTROL_SHUTDOWN: DPRINT1(" SERVICE_CONTROL_SHUTDOWN received\n"); + UpdateServiceStatus(SERVICE_STOP_PENDING, 1); /* Stop listening to RPC Messages */ RpcMgmtStopServerListening(NULL); - UpdateServiceStatus(SERVICE_STOPPED); + UpdateServiceStatus(SERVICE_STOPPED, 0); return ERROR_SUCCESS;
default : @@ -365,7 +373,7 @@ ServiceMain(DWORD argc, LPTSTR *argv) return; }
- UpdateServiceStatus(SERVICE_START_PENDING); + UpdateServiceStatus(SERVICE_START_PENDING, 1);
hThread = CreateThread(NULL, 0, @@ -376,6 +384,8 @@ ServiceMain(DWORD argc, LPTSTR *argv) if (hThread != NULL) CloseHandle(hThread);
+ UpdateServiceStatus(SERVICE_START_PENDING, 2); + hThread = CreateThread(NULL, 0, RpcServerThread, @@ -385,6 +395,8 @@ ServiceMain(DWORD argc, LPTSTR *argv) if (hThread != NULL) CloseHandle(hThread);
+ UpdateServiceStatus(SERVICE_START_PENDING, 3); + hThread = CreateThread(NULL, 0, DeviceInstallThread, @@ -394,7 +406,7 @@ ServiceMain(DWORD argc, LPTSTR *argv) if (hThread != NULL) CloseHandle(hThread);
- UpdateServiceStatus(SERVICE_RUNNING); + UpdateServiceStatus(SERVICE_RUNNING, 0);
DPRINT("ServiceMain() done\n"); }