一天时间一直在调试和查找资料,调试不出来啊,快纠结死拉,大哥哥大姐姐都帮忙看一下
SERVICE_ACCEPT_SESSIONCHANGE状态都已经设定了,就是接不到SERVICE_CONTROL_SESSIONCHANGE消息VOID ServiceHandler(DWORD controlCode,
    DWORD dwEventType,
    LPVOID lpEventData,
    LPVOID lpContext)
{
    WriteToLog("ServiceHandler");
    switch(controlCode)
    {
    case SERVICE_CONTROL_SESSIONCHANGE:
        switch(dwEventType)
        {
            case WTS_SESSION_LOGOFF:
                WriteToLog("logoff");
                break;
            case WTS_SESSION_LOGON:
                WriteToLog("logon");
                break;
            case WTS_SESSION_LOCK:
                WriteToLog("lock");
                break;
            case WTS_SESSION_UNLOCK:
                WriteToLog("unlock");
                break;
        }
        break;
    case SERVICE_CONTROL_STOP:
        ExitProcess(0);
    }
    return;
}
VOID WINAPI ServiceMain(DWORD  dwNumServicesArgs, PSTR *ppcServiceArgVectors)
{
    initFunctions();
    SERVICE_STATUS_HANDLE hService = NULL;
    SERVICE_STATUS SrvStatus = { 0 };
    hService = RegisterServiceCtrlHandlerA("ixil",ServiceHandler);
    SrvStatus.dwServiceType = SERVICE_WIN32;
    SrvStatus.dwControlsAccepted=SERVICE_ACCEPT_STOP |SERVICE_ACCEPT_SESSIONCHANGE;
    SrvStatus.dwCurrentState = SERVICE_RUNNING;
    SetServiceStatus(hService, &SrvStatus);
    CreateThread(NULL, 0, ThreadFunc, 0, 0, 0);
    return;
}int _tmain(int argc, _TCHAR* argv[]){
    SERVICE_TABLE_ENTRYA scArrTable[] =
    {
        { "ixil", ServiceMain },
        { NULL, NULL }
    };
    StartServiceCtrlDispatcherA(scArrTable);
    return 0;
}

解决方案 »

  1.   

    RegisterServiceCtrlHandlerA 对应的是 VOID WINAPI Handler(
      [in]                 DWORD fdwControl
    );
    类型
    RegisterServiceCtrlHandlerEx 对应才是 DWORD WINAPI HandlerEx(
      [in]                 DWORD dwControl,
      [in]                 DWORD dwEventType,
      [in]                 LPVOID lpEventData,
      [in]                 LPVOID lpContext
    );
    类型
    是否因为这个不能收到?
      

  2.   

    感觉你的服务控制原型没有写对 
    void WINAPI ServiceControl(DWORD dwControl);