Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy proceduraobsługiwaczajest wywoływana przez wątek dyspozytora, obsługuje kod kontrolny przekazany w parametrze Kod operacji, a następnie wywołuje funkcję ReportSvcStatus w celu zaktualizowania statusu usługi. Gdy funkcja obsługi otrzymuje kod kontrolny, powinna zgłaszać stan usługi tylko w przypadku, gdy obsługa tego kodu powoduje zmianę stanu usługi. Jeśli usługa nie reaguje na kontrolę, nie powinna zgłaszać stanu menedżerowi kontroli usług. Aby uzyskać kod źródłowy dla parametru ReportSvcStatus, zobacz Pisanie funkcji ServiceMain.
W poniższym przykładzie funkcja SvcCtrlHandler jest przykładem funkcji obsługi. Należy pamiętać, że zmienna ghSvcStopEvent jest zmienną globalną, która powinna być inicjalizowana i używana zgodnie ze wskazówkami w tworzenie funkcji ServiceMain.
//
// Purpose:
// Called by SCM whenever a control code is sent to the service
// using the ControlService function.
//
// Parameters:
// dwCtrl - control code
//
// Return value:
// None
//
VOID WINAPI SvcCtrlHandler( DWORD dwCtrl )
{
// Handle the requested control code.
switch(dwCtrl)
{
case SERVICE_CONTROL_STOP:
ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
// Signal the service to stop.
SetEvent(ghSvcStopEvent);
ReportSvcStatus(gSvcStatus.dwCurrentState, NO_ERROR, 0);
return;
case SERVICE_CONTROL_INTERROGATE:
break;
default:
break;
}
}
Tematy pokrewne