吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9545|回复: 7
收起左侧

[C&C++ 转载] Windows8.1驱动编写以及内核调试(一) 做好准备工作并编写第一个驱动程序

[复制链接]
TC王者 发表于 2014-10-2 16:52

    Windows内核编程(或者说驱动编程,因为本人喜欢这个霸气的名字,以后都这样说了。。)确实有一定的难度和神秘性,但不是遥不可及的!现在,就让我带您进入Windows内核编程的乐园!

您愿意玩驱动,那么我默认您不是计算机小白,即使我的文章会尽量让所有人看明白,但是有些问题我还是会一带而过。

首先,我们必须做好准备工作。我们需要的工具:Visual studio 2013(win8使用2013版本更好一些),WDK,VMware虚拟机(再下一个win8.1官方原版的ISO镜像安装,不要第三方的,否则VM装不上),DbgView,DriverInstall,WinDbg。

下载地址:vs2013各位自行百度下载,激活码也一堆堆的。

           VM网上也不少,不过各位不要弄什么精简版的,要官方原版的。

       WDK等工具:去微软官网下即可。http://msdn.microsoft.com/en-US/windows/hardware/gg454513

   DbgView:我自己找的一个绿色破解版的,就一个exe文件:Dbgview.rar
115网盘礼包码:5lbdl1pg0fir
http://115.com/lb/5lbdl1pg0fir

DriverInstall:一个可以提示中文的兼容x64的驱动加载工具:http://download.csdn.net/detail/tc00tc/7997733

WinDbg:http://support.icafe8.com/technologynews/focus/932.html

好了,下载完成就是繁琐的安装过程了,这里不赘述。

安装好VM和内部的虚拟Win8后,我们要让Windbg和虚拟机建立通信。也就是双机调试。

第一步:设置Windbg,参考windbg的下载也没,那里有。windbg的启动参数:一般是在桌面建立一个快捷方式,在属性页的目标中windbg.exe后面添加 -b -k com:port=\\.\pipe\com_1,baud=11520,pipe

然后在设置虚拟机:





特别注意,设置完应该是这样的:


如果您那里显示的是 “串行端口2”,您首先要删除设备列别里面的打印机和这个串行端口2再新建才可以。不然您的Windbg连不上虚拟机!

好了,现在我们可以编写第一个驱动程序了!

打开visual studio,新建一个WDM空的驱动工程。


然后新建一个源文件,添加代码。

代码如下:

[cpp] view plaincopyprint?


  • #include <ntddk.h>  
  • extern "C" VOID DriverUnload(PDRIVER_OBJECT driver)  
  • {  
  •     DbgPrint("TC");  
  • }  
  • extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)  
  • {  
  • #if DBG  
  •     _asm int 3  
  • #endif   
  •     DbgPrint("firest sys!");  
  •     driver->DriverUnload = DriverUnload;  
  •     return STATUS_SUCCESS;  
  • }  

我必须解释下:ntddk.h是驱动的头文件之一,大家都知道的。extern “C”是为什么被添加呢?因为我们使用的是VS2013新建的C++工程,编译器会按照C++的方式编译,这样我们的函数名字在编译后就面目全非了,有了extern “C就不会这样。没有的话会出现LINK错误。DriverEntry是驱动的入口函数,如同我们的main一样。DriverUnload是我们的驱动卸载函数,没有在DriverEntry中设置DriverUnload指针的话驱动一旦被加载就无法卸载了。这个条件编译是干什么的?这个是只有在调试模式下才运行的代码,非调试模式不会运行内部的代码。为什么int 3还要这样处理?因为非调试模式下运行int 3,会直接蓝屏!这是一个小技巧,希望大家注意。

好了,现在可以生成解决方案了。如果出现了 error C2220: 警告被视为错误 - 没有生成“object”文件的问题,去工程的属性页面修改下面的地方,把讲警告视为错误设置为否。


生成成功了,我们也成功一半了。要特别注意上面的图片,我们的环境是64位系统,我们的工程也必须是对于x64平台的!

现在去加载运行我们的驱动,用DriverInstall安装运行,是不是出现了 1275:此驱动程序被阻止的错误呢?如果出现了这个让所有x64平台下玩内核的人头疼的问题的时候,您需要把Win8的强制使用驱动签名的属性禁用。参看百度经验:http://jingyan.baidu.com/article/7c6fb42879543380642c9036.html

问题解决之后,再加载运行我们的驱动,是不是成功了?


大家好!我是TC王者很少写技术文档,水平一般技术有限,因为自己非常非常喜欢windows编程,喜欢内核编程,喜欢C++,限于国内关于驱动方面的书籍文档稀少,寒江独钓和天书夜读那两本书已经买不到了,而且它们是对于win32平台的,所有我愿意把我所学所知道的关于内核驱动的事情告诉大家,让更多的人能接触到windows内核编程,或者说是驱动编程,这一系列文章都是我亲自一个字一个字敲的,代码是经过多次验证的,请您尊重我的原创,不要随意转载,随意发布在其他社交平台或网络,鄙人不胜感激!



免费评分

参与人数 1热心值 +1 收起 理由
Mainos + 1 不明觉厉

查看全部评分

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

回的一手好帖 发表于 2014-10-2 17:10
支持发布那啥.....
黑龍 发表于 2014-10-2 17:21
674525854 发表于 2014-10-2 17:23
Super丶咖啡 发表于 2014-10-2 17:54
新手留存备案
520Kelly 发表于 2014-10-2 22:10
破解的话貌似对驱动的要求不高吧、、
manbajie 发表于 2014-10-3 07:58
看看啥米情况
leo3010 发表于 2014-10-3 19:03
发在这个论坛可能不太合适吧。。感觉论坛越来越水了。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-1 08:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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