windows服务被设计用于在后台运行的应用程序以及实现没有用户交互的任务
一个程序可能包含若干个服务,每个服务都必须列于专门的分派表中,这个表中的每一项都是SERVICE_TABLE_ENTRY结构
typedef
struct _SERVICE_TABLE_ENTRYW
{
LPWSTR
lpServiceName;
LPSERVICE_MAIN_FUNCTIONW
lpServiceProc;
}SERVICE_TABLE_ENTRYW,
*LPSERVICE_TABLE_ENTRYW;
分派表的最后一项必须是服务名和服务主函数域的NULL指针
服务控制管理器(SCM:Services Control
Manager)是一个管理系统所有服务的进程
ServiceMain要尽可能早的为服务注册控制处理器,通过调用RegisterServiceCtrlHadler函数
注册完控制处理器后,获得状态句柄hStatus,通过调用SetServiceStatus函数,用hStatus想SCM报告服务状态
typedef struct _SERVICE_STATUS
{
DWORD
dwServiceType;//指示服务类型,创建win32服务,赋值SERVICE_WIN32
DWORD
dwCurrentState;//指定服务的当前状态
DWORD dwControlsAccepted;//通知SCM服务接收哪个域
DWORD
dwWin32ExitCode;//在终止服务并报告退出细节时有用
DWORD
dwServiceSpecificExitCode;//同上
DWORD
dwCheckPoint;//表示初始化某个服务进行需要30s以上
DWORD dwWaitHint;
} SERVICE_STATUS,
*LPSERVICE_STATUS;