创建 SvcHost.exe 调用的服务原理与实践
日期:2005年10月31日 作者: 查看:[大字体 中字体 小字体]-
因此服务的安装除了调用CreateService()创建服务之外,还需要设置服务的ServiceDll,如果使用前2种还要设置svchost的注册表选项,在卸载时也最好删除增加的部分。
具体代码参见后边的附例(使用的是方法3)。
注: ImagePath 和ServiceDll 是ExpandString不是普通字符串。因此如果使用.reg文件安装时要注意。
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文件请到http://www.binglesite.net下载。
//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 - 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
-
- 创建 SvcHost.exe 调用的服务原理与实践 相关文章:
- ·创建 SvcHost.exe 调用的服务原理与实践
- 创建 SvcHost.exe 调用的服务原理与实践 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:判断你的用户是否真的被黑客攻击
精品推荐
热点TOP10
- ·突破网络限制之三十六计篇
- ·BAT批处理文件语法
- ·软件注册码、安装序列号☆集锦
- ·管理员组获取系统权限的完美解决方案
- ·苹果机中如何安装Windows系统
- ·TCP/IP基础
- ·巧测MTU,加快网页打开速度
- ·杜绝自动弹出的网页
- ·Leopard中用户帐户和文件共享的新变化
- ·ADSL共享方案及实例操作
- ·IPv6详解
- ·两台电脑直连的方法
- ·Firefox的32个插件介绍
- ·瑞星个人防火墙安装与使用
- ·在电脑上录制电视节目
- ·使用httpModule做权限系统
- ·掌握IP地址知识 子网掩码与子网划分
- ·使用网桥能否实现ADSL独立拨号
- ·铁通宽带如何设置交换机(急)
- ·关于数据同步方面的一些经验
特别推荐
- ·用net start 可以启动的服务命令一览
- ·Linux阅读材料
- ·掌握IP地址知识 子网掩码与子网划分
- ·ADSL共享方案及实例操作
- ·2000/XP中无法删除文件的解决办法
- ·最全面的密码破解以及抗击手段大曝光
- ·两台电脑直连的方法
- ·电子邮件头解析
- ·密码遗忘通关手册
- ·Regsvr32的特殊作用
- ·收藏经典:windows消息大全
- ·nslookup-ipconfig基础网络命令
- ·网络硬盘数据保护及还原精灵实战
- ·巧用net命令进行局域网文件批量同步更新
- ·打造WIN2000/XP/2003系统万能克隆
- ·菜鸟必知 shift键十大密招大公开
- ·快速批量绑定MAC与IP地址
- ·98/2000/XP密码恢复方法
- ·还原精灵之另类破解
- ·查看内存是否处于双通道模式
