VOID WINAPI ServiceMain(
DWORD dwArgc,
LPTSTR* lpszArgv);
服务主函数的参数与main函数的参数使用方法类似,但是服务主函数的参数不是通过在命令启动时设定的,而是通过SCM的相关API进行传递的(StartService函数)
SCM要对服务进行管理,就必须知道服务程序的服务主函数。服务程序通过调用StartServiceCtrDispatcher函数原型如下:
BOOL StartServiceCtrlDispatcher(
const LPSERVICE_TABLE_ENTRY lpServiceTable);
结构SERVICE_TABLE_ENTRY的原型如下:
typedef struct _SERVICE_TABLE_ENTRY{
LPTSTR lpServiceName,
LPSERVICE_MAIN_FUNCTION lpServiceProc
}SERVICE_TABLE_ENTRY, *LPSERVICE_TABLE_ENTRY;
其中,lpServiceName为服务名称,lpServiceProc为指向ServiceMain的函数指针。只要将函数的指针赋值给lpServiceProc,在调用StartServiceCtrlDispatcher,这个函数就成为了服务主函数。