撰寫控制項處理常式函式
當發送器執行緒呼叫 Handler 函式時,它會處理 在 Opcode 參數中傳遞的控制項程式碼,然後呼叫 ReportSvcStatus 函式來更新服務狀態。 當 Handler 函式收到控制項程式碼時,只有當處理控制程式代碼導致服務狀態變更時,它才應該報表服務狀態。 如果服務沒有對控制項採取行動,它不應該向服務控制管理員報告狀態。 如需 ReportSvcStatus 的原始程式碼,請參閱 撰寫 ServiceMain 函式。
在下列範例中,SvcCtrlHandler 函式是 Handler 函式的範例。 請注意,ghSvcStopEvent 變數是應該初始化及使用的全域變數,如 撰寫 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;
}
}
相關主題