sc 创建svchost服务_xp 创建服务_svchost应用程序错误(6)

电脑杂谈  发布时间:2017-05-07 13:43:47  来源:网络整理

5. DLL服务实现

DLL程序的编写比较简单,只要实现一个ServiceMain()函数和一个服务控制程序,在ServiceMain()函数里用RegisterServiceCtrlHandler()注册服务控制程序,并设置服务的运行状态就可以了。另外,因为此种服务的安装除了正常的CreateService()之外,还要进行其他设置,因此最好实现安装和卸载函数。 为了方便安装,实现的代码提供了InstallService()函数进行安装,这个函数可以接收服务名作为参数(假如不提供参数,就使用缺省的iprip),假如要安装的服务不在svchost的netsvcs组里安装就会失败;假如要安装的服务已经存在,安装也会失败;安装成功后程序会配置服务的ServiceDll为当前Dll。提供的UninstallService()函数,可以删除任何函数而没有进行任何检查。为了方便使用rundll32.exe进行安装,还提供了RundllInstallA()和RundllUninstallA()分别调用InstallService()及UninstallService()。因为rundll32.exe使用的函数原型是:

void CALLBACK FunctionName(

HWND hwnd, // handle to owner window

HINSTANCE hinst, // instance handle for the DLL

LPTSTR lpCmdLine, // string the DLL will parse

int nCmdShow // show state

);

对应的命令行是rundll32 DllName,FunctionName [Arguments] DLL服务本身只是创建一个进程,该程序命令行就是启动服务时提供的第一个参数,假如未指定就使用缺省的svchostdll.exe。启动服务时假如提供第二个参数,创建的进程就是和桌面交互的。具体代码参见后边的附例8,源代码和DLL文件请到下载。//main service process function

void __stdcall ServiceMain( int argc, wchar_t* argv[] );

//report service stat to the service control manager

int TellSCM( DWORD dwState, DWORD dwExitCode, DWORD dwProgress );

//service control handler, call back by service control manager

void __stdcall ServiceHandler( DWORD dwCommand );

//RealService just create a process

int RealService(char *cmd, int bInteract);//Install this dll as a Service host by svchost.exe, service name is given by caller

int InstallService(char *name);

//unInstall a Service, be CARE FOR call this to delete a service

int UninstallService(char *name);

//Install this dll as a Service host by svchost.exe, used by RUNDLL32.EXE to call


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-45730-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...