首页
社区
课程
招聘
[推荐]模仿也是需要时间的__驱动学习纪念品
发表于: 2011-6-10 15:11 8951

[推荐]模仿也是需要时间的__驱动学习纪念品

2011-6-10 15:11
8951
     写这个工具到是没花多少时间,倒是模仿InstDrv.exe 的界面花了不少时间...模仿也是需要花时间的,没有什么技术含量,权当是学习驱动留下的纪念! 高手无视!~~

驱动加载工具(InstDrv - 中文版)链接
http://bbs.pediy.com/showthread.php?t=63374&highlight=驱动+动加+加载+载工+
算是补coderui  写加载工具没给源码的一个缺吧! 呵呵!

简介:
   
1.置顶功能

void WINAPI AlwaysTop(BOOL yes)
{
	if (yes)
	{
		::SetWindowPos(g_hwnd,   HWND_TOPMOST,   0,   0,   0,   0,   SWP_NOMOVE   |   

SWP_NOSIZE);
	}
	else
	{
		::SetWindowPos(g_hwnd,   HWND_NOTOPMOST,   0,   0,   0,   0,   SWP_NOMOVE   |   

SWP_NOSIZE);
	}

2.支持拖拽:
  
MFC框架里 要支持接收文件,也就是 右键->属性->风格 接收文件的勾勾上,然后添加WM_DROPFILES消息,下面

看代码:

void CLoadSysDlg::OnDropFiles(HDROP hDropInfo) 
{
	// TODO: Add your message handler code here and/or call default
	m_Path = ""; //类变量,保存我的文件路径
	m_Name = ""; //类变量,保存我的文件名
	char szFile[MAX_PATH] = {0};
	DragQueryFile(hDropInfo,0,szFile,254);
	if (strcmpi(&szFile[strlen(szFile)-4],".sys")!=0)
	{	
		MessageBox("请选择驱动文件拖入!");
		return ;
	}
	strcpy(m_Path.GetBuffer(0),szFile);
	UpdateData(FALSE);//更新文件名到窗口
	UpdateData(TRUE);
	int index = m_Path.GetLength()-m_Path.ReverseFind('\\')-1;  //获取文件全名例driver.sys
	//获取文件名
	m_Name = m_Path.Right(index);
	m_Name = m_Name.Left(m_Name.Find('.')); //获取文件Title 例如driver
	DragFinish(hDropInfo);


}


3.接下来就是加载驱动等操作了
这是套路,也就是用下面的几个函数来操作,学过驱动的人就应该是很熟悉了吧!

加载驱动函数

OpenSCManager //打开SCM管理器
CreateService //创建服务
OpenService  //打开服务
StartService  //开启服务

卸载驱动
ControlService  //停止驱动服务
DeleteService   //动态卸载驱动程序


这几个函数不懂的就要参看MSDN了,或者Baidu,Google搜索一下

注意:定义如下变量的时候要包含头文件 #include <winsvc.h>

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

下面给出几个关键代码:
void CLoadSysDlg::OnBtnLoad()        [COLOR="Red"]   //安装服务[/COLOR]
{
	// TODO: Add your control notification handler code here

	hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
	if (hServiceMgr ==NULL)
	{
		SetDlgItemText(IDC_STATIC_disp,"状态 :打开服务失败!");
		CleanFile();
		return;
	}
	hServiceDDK = CreateService( hServiceMgr,
		m_Name.GetBuffer(0), //驱动程序的在注册表中的名字  
		m_Name.GetBuffer(0), // 注册表驱动程序的 DisplayName 值  
		SERVICE_ALL_ACCESS, // 加载驱动程序的访问权限  
		SERVICE_KERNEL_DRIVER,// 表示加载的服务是驱动程序  
		SERVICE_DEMAND_START, // 注册表驱动程序的 Start 值  
		SERVICE_ERROR_IGNORE, // 注册表驱动程序的 ErrorControl 值  
		m_Path.GetBuffer(0), // 注册表驱动程序的 ImagePath 值  
		NULL,  
		NULL,  
		NULL,  
		NULL,  
		NULL);  
	if( hServiceDDK == NULL )  
	{
		m_Path.ReleaseBuffer();
		m_Name.ReleaseBuffer();
		SetDlgItemText(IDC_STATIC_disp,"状态:驱动服务安装失败!");
		CleanFile();
		return;
	}
	else
	{
		SetDlgItemText(IDC_STATIC_disp,"状态:驱动服务安装成功!");
		return;//安装成功就直接返回!
	}


}

void CLoadSysDlg::OnBtnStart()        [COLOR="red"]//开启服务[/COLOR]
{
	// TODO: Add your control notification handler code here
	BOOL bret= StartService( hServiceDDK, NULL, NULL ); 
	if (bret)
	{
		SetDlgItemText(IDC_STATIC_disp,"状态:驱动服务启动成功!");
		return;
	}
	else
	{
		SetDlgItemText(IDC_STATIC_disp,"状态:驱动服务启动失败!");
		if(hServiceDDK)
		{
			CloseServiceHandle(hServiceDDK);
		}
		if(hServiceMgr)
		{
			CloseServiceHandle(hServiceMgr);
	}
	}
	
}

void CLoadSysDlg::OnBtnStop()   [COLOR="red"]//停止服务[/COLOR]
{
	SERVICE_STATUS ServStatus;
	// TODO: Add your control notification handler code here
	succ = ControlService( hServiceDDK, SERVICE_CONTROL_STOP , &ServStatus );
	if( !succ )     [COLOR="red"]//succ 是类变量,保存这个成功与失败[/COLOR]
	{  
		SetDlgItemText(IDC_STATIC_disp,"状态:驱动服务控制失败!");
		CleanFile();
	}  
	else  //TRUE//FALSE
	{
		SetDlgItemText(IDC_STATIC_disp,"状态:驱动服务控制成功!");
		
	} 

	
}

void CLoadSysDlg::OnBtnUnload()         [COLOR="red"] //卸载服务[/COLOR]
{
	// TODO: Add your control notification handler code here
	if (succ) [COLOR="red"]//succ 是类变量,保存这个成功与失败[/COLOR]
	{
		
		if( !DeleteService( hServiceDDK ) ) 
		{	
			SetDlgItemText(IDC_STATIC_disp,"状态:驱动服务卸载失败!");
			CleanFile();
		}  
		else
		{
			SetDlgItemText(IDC_STATIC_disp,"状态:驱动服务卸载成功!");
		}
	}
}





具体的就参见后面的源码吧!   考试刚考完,写个软件放松放松!  没有别的,主要是模仿InstDrv.exe,看雪上面有他的帖子,没有给源码,我这次就把源码补上吧,希望大家不要笑话!呵呵

算是学习驱动的一个纪念品嘛.毕竟学习驱动都是要走这一步的!!!新手可以看看!

放个图片: 大家比较比较!
驱动加载源码.zip

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 129
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了   呵呵
2011-6-10 15:18
0
雪    币: 72
活跃值: (60)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
羡慕可以写程序的小学生
2011-6-10 15:19
0
雪    币: 60
活跃值: (1010)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mark!!
2011-6-10 15:30
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
好孩子,好学生。
2011-6-10 15:32
0
雪    币: 258
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
以为有ark、、
2011-6-10 16:03
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
不错 感谢楼主
2011-6-10 16:10
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
呵呵,谢谢大家的支持,写代码容易,写文章难啊,打字都打了半天,声明一下,不是小学生了,呵呵
2011-6-10 17:41
0
雪    币: 3020
活跃值: (3065)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
楼主不错 值得学习
2011-6-10 18:06
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
10
顶起,谢谢了
2011-6-11 07:42
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
韬哥都说话了,,呵呵 荣幸
2011-6-11 09:56
0
雪    币: 2177
活跃值: (2045)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
12
貌似跟我的差不多啊
http://hi.baidu.com/hu3167343/blog/item/a9299236db3e7a54ac4b5f32.html
2011-6-11 11:07
0
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
13
这和驱动无关吧,只是以驱动程序的其中一个加载方式而已
2011-6-11 11:10
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
我是仿照我们经常用的那个驱动加载工具写的,因为这种写法太单一了,所以也就没有抄袭不抄袭的了...
2011-6-11 11:21
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
我说的是驱动学习过程中的纪念品啊,所以这应该也算是吧,呵呵,  写出来也算是给自己留个纪念,大家愿意看,那是我的荣幸...大牛就不要笑我了,呵呵
2011-6-11 11:22
0
雪    币: 18
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
期待楼主的WDM驱动加载工具。楼主的考试完是指高考?
2011-6-11 11:33
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
17
of course not!  Is the final exam..
2011-6-11 12:00
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
18
很好很强大! 赞一个!
2011-6-11 13:15
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
很不错的

羡慕lz

3q
2011-6-12 17:34
0
雪    币: 72
活跃值: (60)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
20
继续顶,期待楼主精彩表现
2011-6-12 19:42
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
不错不错顶lz了
2011-6-18 14:52
0
雪    币: 69
活跃值: (157)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
22
谢谢大家的支持..呵呵
2011-6-18 18:55
0
游客
登录 | 注册 方可回帖
返回
//