郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

飞郁网络培训郁金香终身VIP管理员QQ150330575淘宝担保交易QQ交流群(外挂,驱动)
查看: 366|回复: 0

006-R3应用层加载驱动代码

[复制链接]
发表于 2018-11-29 20:32:24 | 显示全部楼层 |阅读模式
//郁金香灬老师
//QQ 150330575

//开发环境:VS2017
//驱动运行平台:x64 Win7 win8 win10


加载驱动过程
1、用OpenSCManager打开服务控制管理器
2、用CreateService创建对应服务
3、如果驱动服务已经创建过,则用OpenService打开服务
4、用StartService加载启动驱动服务
5、清理工作,用CloseServiceHandle关闭释放句柄


CloseServiceHandle
hSCObject   //a handle to a service object as returned by either the OpenService or CreateService function

#include <windows.h>
#include <winsvc.h>
BOOL LoadDriver(const  char* lpszDriverName, const  char* lpszDriverPath)
{
        char szDriverImagePath[256] = { 0 };//用于保存 .sys的全路径名
        //得到完整的驱动路径
        GetFullPathNameA(lpszDriverPath, 256, szDriverImagePath, NULL);
        OutputDebugStringA("yjxoadDriver()");
        DbgPrintA("yjx:lpszDriverPath=%s 全路径名:szDriverImagePath=%s \n", lpszDriverPath, szDriverImagePath);
        BOOL bRet = FALSE;

        SC_HANDLE hServiceMgr = NULL;//SCM管理器的句柄
        SC_HANDLE hServiceDDK = NULL;//NT驱动程序的服务句柄

        hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); //SC_MANAGER_CREATE_SERVICE

        DbgPrintA("yjx:打开 SCM管理器 OpenSCManager() hServiceMgr=%p GetLastError=%d", hServiceMgr, GetLastError());

        //创建驱动所对应的服务
        hServiceDDK = CreateServiceA(hServiceMgr,
                lpszDriverName, //驱动程序的在注册表中的名字  
                lpszDriverName, // 注册表驱动程序的 DisplayName 值  
                SERVICE_START , // 加载驱动程序的访问权限  SERVICE_START 或者 SERVICE_ALL_ACCESS
                SERVICE_KERNEL_DRIVER,// 表示加载的服务是驱动程序  
                SERVICE_DEMAND_START, // 注册表驱动程序的 Start 值   //指定当进程调用StartService函数时由服务控制管理器启动的服务。
                SERVICE_ERROR_NORMAL,//SERVICE_ERROR_IGNORE, // 注册表驱动程序的 ErrorControl 值  
                szDriverImagePath, // 注册表驱动程序的 ImagePath 值  
                NULL,  //GroupOrder HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList
                NULL,
                NULL,
                NULL,
                NULL);

        DbgPrintA("yjx:创建驱动服务 hServiceDDK=%p  GetLastError=%d\n", hServiceDDK, GetLastError());
        if (GetLastError() == ERROR_SERVICE_EXISTS) //ERROR_SERVICE_EXISTS 1073 //服务已经存在
        {
                hServiceDDK = OpenServiceA(hServiceMgr, lpszDriverName, SERVICE_START);////或者 SERVICE_ALL_ACCESS //

                DbgPrintA("OpenServiceA hServiceDDK=%08X", hServiceDDK);
                //SERVICE_CONTROL_CONTINUE
                hServiceDDK = OpenServiceA(hServiceMgr, lpszDriverName, SERVICE_PAUSE_CONTINUE | SERVICE_QUERY_STATUS);


        }
        Sleep(1200);//等待前边输出 调试信息
        bRet = StartService(hServiceDDK, NULL, NULL);
        DbgPrintA("yjx:加载驱动服务 StartService()=%d  GetLastError=%d", bRet, GetLastError());
        if (hServiceDDK)
        {
                CloseServiceHandle(hServiceDDK);
        }
        if (hServiceMgr)
        {
                CloseServiceHandle(hServiceMgr);
        }

        return bRet;
}


//查询服务状态
SERVICE_STATUS ServiceStatus;
if (hServiceDDK != NULL)

bRet = QueryServiceStatus(hServiceDDK, &ServiceStatus);
DbgPrintA("yjx:查询服务状态 QueryServiceStatus()=%d ServiceStatus.dwCurrentState=%d GetLastError=%d", bRet, ServiceStatus.dwCurrentState, GetLastError());
if (ServiceStatus.dwCurrentState == SERVICE_PAUSED)
{
        bRet = ControlService(hServiceDDK, SERVICE_CONTROL_CONTINUE, &ServiceStatus);
        DbgPrintA("yjx:控制服务继续运行 ControlService()=%d  GetLastError=%d", bRet, GetLastError());


}

郁金香外挂教程,学习中...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2018-12-19 08:59 , Processed in 0.038266 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表