C 在服务的控制处理程序中实现了哪些控制代码

C 在服务的控制处理程序中实现了哪些控制代码,c,winapi,C,Winapi,声明在调用SetServiceStatus()函数时必须填写此结构 第三个字段是dwcontrolsAccept 不幸的是,我没有找到任何关于必须始终执行/响应哪些控制代码的信息,至少 页面上写着: 默认情况下,所有服务都接受服务控制查询值 但是,当服务控制处理程序不对服务控制停止控制代码作出反应时,是否存在问题?在这种情况下,当服务控制处理程序不至少调用SetServiceStatus()时是否存在问题?就dwcontrolsAccept而言,没有强制控制代码。如果满足您的需要,您可以将该值设

声明在调用
SetServiceStatus()
函数时必须填写此结构

第三个字段是
dwcontrolsAccept

不幸的是,我没有找到任何关于必须始终执行/响应哪些控制代码的信息,至少

页面上写着:

默认情况下,所有服务都接受服务控制查询值


但是,当服务控制处理程序不对
服务控制停止
控制代码作出反应时,是否存在问题?在这种情况下,当服务控制处理程序不至少调用
SetServiceStatus()
时是否存在问题?

dwcontrolsAccept
而言,没有强制控制代码。如果满足您的需要,您可以将该值设置为零。除了
SERVICE\u CONTROL\u query
之外,您的代码不需要处理您未指定为可接受的任何控制代码

例如,如果您没有设置
服务\u接受\u停止
,Windows将永远不会向您发送
服务\u控制\u停止
控制。任何停止服务的尝试都将导致错误1052,“请求的控件对此服务无效。”

请注意,除非您特别需要执行干净关机(例如,因为您有一个必须正确关闭的数据库文件),否则您也不需要接受关机控制。这种服务将继续运行,直到计算机实际断电

如果始终将
dwControlsAccepted
设置为零,则控件处理程序只需执行以下操作:

static DWORD WINAPI ServiceHandlerEx(DWORD control, DWORD eventtype, LPVOID lpEventData, LPVOID lpContext) 
{
    if (control == SERVICE_CONTROL_INTERROGATE)
    {
        return NO_ERROR;
    }
    else
    {
        return ERROR_CALL_NOT_IMPLEMENTED;
    }
}

就认可的
dwcontrols
而言,没有强制性控制代码。如果满足您的需要,您可以将该值设置为零。除了
SERVICE\u CONTROL\u query
之外,您的代码不需要处理您未指定为可接受的任何控制代码

例如,如果您没有设置
服务\u接受\u停止
,Windows将永远不会向您发送
服务\u控制\u停止
控制。任何停止服务的尝试都将导致错误1052,“请求的控件对此服务无效。”

请注意,除非您特别需要执行干净关机(例如,因为您有一个必须正确关闭的数据库文件),否则您也不需要接受关机控制。这种服务将继续运行,直到计算机实际断电

如果始终将
dwControlsAccepted
设置为零,则控件处理程序只需执行以下操作:

static DWORD WINAPI ServiceHandlerEx(DWORD control, DWORD eventtype, LPVOID lpEventData, LPVOID lpContext) 
{
    if (control == SERVICE_CONTROL_INTERROGATE)
    {
        return NO_ERROR;
    }
    else
    {
        return ERROR_CALL_NOT_IMPLEMENTED;
    }
}