mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 13:34:53 +00:00
[UMPNPMGR] Improve UpdateServiceStatus()
- Set dwCheckPoint - Set dwControlAccepted depending on the service state
This commit is contained in:
parent
b0a73746cd
commit
691a739b02
|
@ -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");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue