吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8617|回复: 2
收起左侧

[C&C++ 转载] C++加载驱动实例

 关闭 [复制链接]
帅气小书童 发表于 2012-11-27 20:27
驱动程序可以是针对某一特定硬件的,为系统提供管理硬件的各种功能;也可以是针对系统设备的,对系统的输入输出做一些处理,实现特定的功能,比如当软件要做的事用应用程序无法实现或者难以实现某种功能时,但驱动程序可以实现,则需要驱动程序。以下就是一个C++以服务的方式,加载驱动的实例!
[C++] 纯文本查看 复制代码
#include<windows.h>
#include "stdio.h"
void installDvr();//安装驱动
void startDvr();//启动驱动
void stopDvr();//停止驱动
void unloadDvr();//卸载驱动
void main()
{ 

installDvr();//安装驱动
startDvr();//启动驱动 

stopDvr();//停止驱动
unloadDvr();//卸载驱动



}

void installDvr()//安装
{
SC_HANDLE schSCManager;
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (schSCManager)
{ 
SC_HANDLE schService = CreateService( schSCManager,

"babaHelloDDKk",

"babaMyHelloDDKk",

SERVICE_ALL_ACCESS,

SERVICE_KERNEL_DRIVER, //创建的服务类型1为驱动服务

SERVICE_DEMAND_START, //用于当有进程调用StartService 函数时由服务控制管理器(SCM)启动的服务。查询Starting Services on Demand以获取更多信息。

SERVICE_ERROR_IGNORE,

"e:\\s\\HelloDDK.sys",//驱动文件存放路径

NULL,

NULL,

NULL,

NULL,

NULL);
CloseServiceHandle(schService); //创建完记得释放句柄
if(schService)
{
printf("按装服务成功\n");

}
else
{
printf("按装服务失败\n");
}
CloseServiceHandle(schSCManager);
}


}
void startDvr()//启动
{
SC_HANDLE schSCManager;
SC_HANDLE hs;
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(schSCManager)
{
hs=OpenService(schSCManager, "babaHelloDDKk", SERVICE_ALL_ACCESS); //打开服务
if (hs)
{
StartService(hs,0,0);
printf("启动服务成功\n");

CloseServiceHandle(hs);
}
CloseServiceHandle(schSCManager);
}
}
void stopDvr()//停止
{
SC_HANDLE schSCManager;
SC_HANDLE hs;
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(schSCManager)
{
hs=OpenService(schSCManager, "babaHelloDDKk", SERVICE_ALL_ACCESS); //打开服务
if (hs)
{
SERVICE_STATUS status;
int num=0;

QueryServiceStatus(hs, &status);
if (status.dwCurrentState != SERVICE_STOPPED && status.dwCurrentState != SERVICE_STOP_PENDING)
{
ControlService(hs,SERVICE_CONTROL_STOP, &status);
do
{
Sleep(50);
num++;
QueryServiceStatus(hs, &status);
}while (status.dwCurrentState != SERVICE_STOPPED || num>80);
}

if(num>80)
{
printf("停止服务失败\n");
}
else
{
printf("停止服务成功\n");
}
CloseServiceHandle(hs);
}
CloseServiceHandle(schSCManager);
}

}
void unloadDvr()//卸载
{
SC_HANDLE schSCManager;
SC_HANDLE hs;
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(schSCManager)
{
hs=OpenService(schSCManager, "babaHelloDDKk", SERVICE_ALL_ACCESS); //打开服务
if (hs)
{
bool a = DeleteService(hs); //删除服务
if (!a)
{
printf("删除服务失败\n");
}
else
{
printf("已删除服务\n");
}

CloseServiceHandle(hs);//释放完后可完服务可从服务表中消失 释放前是已禁止状态
}
CloseServiceHandle(schSCManager);
} 

}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

1002217709 发表于 2012-11-27 20:34
很厉害的样子,顶起来。
kilkilo502 发表于 2012-11-27 20:42
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 14:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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