学习自建调试体系(三)
2016-04-20 19:27
537 查看
这部分是讲释放在OD插件中的资源文件,也就是一个驱动,然后安装驱动、卸载驱动的过程。主要关注点放在安装、卸载者部分代码上。
获得服务控制管理器句柄(OpenSCManager)
获得服务句柄(CreateService)
如果CreateService失败,使用OpenService再次获得服务句柄
StartService
安装、启动服务
总结大致步骤如下:获得服务控制管理器句柄(OpenSCManager)
获得服务句柄(CreateService)
如果CreateService失败,使用OpenService再次获得服务句柄
StartService
// // 安装服务 // BOOL DbgObjInstallService( const wchar_t *SzPath, //驱动路径 const wchar_t *SzName) //服务名称 { BOOL bRet = FALSE; DWORD dwLastError; SC_HANDLE hSCManager; SC_HANDLE hService = NULL; // 获得服务控制管理器句柄 if (hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) { //获得服务句柄 hService = CreateService( hSCManager, SzName, SzName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE, SzPath, NULL, NULL, NULL, NULL, NULL ); if (hService == NULL) { //再次获得服务句柄 hService = OpenService(hSCManager, SzName, SERVICE_ALL_ACCESS); if (!hService) { CloseServiceHandle(hSCManager); return FALSE; } } //开启服务 bRet = StartService(hService, 0, NULL); if (!bRet) { dwLastError = GetLastError(); } } if (hService) { CloseServiceHandle(hService); } if (hSCManager) { CloseServiceHandle(hSCManager); } return bRet; }
卸载服务
// // 卸载服务 参数:服务名称 // BOOL DbgObjUnInstallService(wchar_t* SzServiceName) { BOOL bRet = FALSE; SC_HANDLE hServiceMgr = NULL; SC_HANDLE hServiceDDK = NULL; SERVICE_STATUS SvrSta; do { // // 打开SCM管理器 // hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (hServiceMgr == NULL) { break; } // // 打开驱动所对应的服务 // hServiceDDK = OpenService(hServiceMgr, SzServiceName, SERVICE_ALL_ACCESS); if (hServiceDDK == NULL) { break; } // // 关闭驱动所对应的服务 // ControlService(hServiceDDK, SERVICE_CONTROL_STOP, &SvrSta); if (DeleteService(hServiceDDK)) { bRet = TRUE; } } while (FALSE); //while FALSE 是个什么鬼? if (hServiceDDK) { CloseServiceHandle(hServiceDDK); } if (hServiceMgr) { CloseServiceHandle(hServiceMgr); } return bRet; }
相关文章推荐
- locate命令的安装
- 滑动冲突的解决方式
- 递归检索
- DeepLearning: 数据预处理3:分割数据集(matlab代码)
- 驱动程序调试方法之printk——自制proc文件(一)
- 更改pandas dataframe 列的顺序
- c/c++工程中外部头文件及库添加方法
- 关于Tomcat中文乱码问题的探究
- Actionbar的基本用法以及Actionbar中menu里面的图标显示控制问题
- 好久没更了,为了明天的面试今天复习复习吧
- bzoj4539: [Hnoi2016]树
- Map集合
- 2016.4.17
- 驱动程序调试方法之printk——printk的原理与直接使用
- 链表常见的问题【转】
- IntelliJ Idea Hide excluded folders 隐藏或显示你需要的文件夹
- POJ 2823
- lintcode_453
- 苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程
- 解决adb端口被占用的方法