Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Když vláknem dispečera je zavolána funkce obslužné rutiny, zpracovává řídicí kód předaný v parametru Opcode a poté volá funkci ReportSvcStatus pro aktualizaci stavu služby. Když funkce Handler obdrží řídicí kód, měla by ohlásit stav služby pouze pokud zpracování řídicího kódu způsobí změnu stavu služby. Pokud služba nereaguje na ovládací prvek, neměla by hlásit stav správci řízení služby. Zdrojový kód pro ReportSvcStatus viz téma Vytvoření funkce ServiceMain.
V následujícím příkladu je funkce SvcCtrlHandler příkladem obslužné rutiny funkce. Všimněte si, že proměnná ghSvcStopEvent je globální proměnná, která by měla být inicializována a používána, jak je ukázáno v příručce Vytvoření funkce 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;
}
}
Související témata