开发应用程序需要用到SDK,内核编程需要使用WDK(Windows Driver Kit),WDK已经自带所需要的头文件,库,C/C++语言及汇编语言的编译器与链接器,所有完全可以不用安装Visual Studio。

1.首先我们下载安装WinDDK,安装过程没有需要特备注意的地方,只有两点:

(1)安装到一个简单一点的路径,最好是根目录。而且尤其要注意避免在安装路径上出现空格,否则会出现编译问题

(2)选择“完全安装”,否则会错过一些代码例子。

2.编写第一个C文件

首先打开记事本新建一个文件,然后把文件命名为first.c,在first.c中写入下列代码:

///
/// @file first.c
/// @author
/// @date
/// #include <ntddk.h>// 提供一个Unload函数只是为了
VOID DriverUnload(PDRIVER_OBJECT driver)
{// 但是实际上我们什么都不做,只打印一句话:DbgPrint("goodbye");
}// DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{// 这是我们的内核模块的入口,可以在这里写入我们想写的东西。// 我在这里打印一句话。因为”Hello,world” 常常被高手耻笑,所以// 我们打印一点别的。DbgPrint("first: Hello, my salary!");// 设置一个卸载函数便于这个函数能退出。driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}

上面的DriverEntry是每个内核模块的入口,相当于应用程序编程中的main函数,在加载这个模块时被系统进程System调用一次。在其中我们写了DriverUnload函数,这个模块可以被动态的卸载(这样方便我们调试程序)。

现在建立一个文件夹first,然后把first.c文件保存在这个目录下,下面简单介绍下编译的方法。

3.编译一个工程

前面已经建立了工程first,虽然这个工程只有一个first.c文件作为代码文件,现在必须在这个目录下增加这两个文件,以便WDK的build工具可以build它。其中一个文件的名字必须是makefile,这个文件的内容是固定的,如下:

#
# DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source
# file to this component.  This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#!INCLUDE $(NTMAKEENV)\makefile.def

另外,还需要一个名字为SOURCES的文件,这个文件的内容关系到这个模块要编译哪些文件,以及编译出来的.sys文件的名字,我的内容是这样的:

TARGETNAME=first
TARGETTYPE=DRIVER
SOURCES=first.c

其中TARGETNAME表示名字,编译出来之后,模块的名字为first.sys,SOURCES表示要编译的.c文件,如果有多个,请用空格分隔。

下面从开始菜单中打开WDK的build环境配置,如图:


如果你最终是在XP系统中运行这个程序,则选择XP,根据你最终运行程序的系统来选择。然后会有checkd和free另种版本可供选择,测试选择checkd版本,最后发布选择free版本。

出现了一个控制台,这个控制台已经配置好了编译环境,进入到我们需要编译的目录中,然后build即可

编译结束,first.sys出现在\first\objchk_wxp_x86\i386下。

这个文件不像普通的exe文件可以双击执行,它需要一个安装工具进行安装。

4.安装编译好的内核模块

这里选择的是srvinstw.exe。安装好之后打开:

(1)选择安装服务并单击下一步按钮,然后找到first.sys,这时需要输入服务名称,可以任意取名,在这里输入first,名字只要不和已经存在的服务名称冲突即可。

(2)输入.sys的路径,注意要进行手工输入,浏览是找不到的

(3)选择设备驱动,下一步

(4)输入“NT设备驱动器名”,不需要输入任何东西,直接点击下一步

(5)选择手动,方便操作。

5.运行安装好的内核模块。

cmd打开控制台,输入net start first 看到服务启动成功就可以了。net stop first用于停止服务。

输出的结果如何看到呢?下一篇将介绍Windbg的配置以及在虚拟机中运行内核模块。

编写第一个HelloWorld驱动程序相关推荐

  1. JAVA入门级教学之(编写第一个HelloWorld程序)

    目录 1.创建一个HelloWorld.java文件 2.用记事本打开HelloWorld.java 3.接下来我们要完成xxx.java-->xxx.class的步骤 怎么解决javac不可用 ...

  2. 编写第一个Java程序:helloworld

    配置好java开发环境后,我们可以编写第一个java程序(helloworld). 在开始编写java程序时,我们要知道java程序开发的三个步骤:编写.编译.运行. 编写阶段主要是由程序员编写后缀为 ...

  3. 用记事本编写第一个Java程序运行时 出现报错:错误: 类helloworld是公共的, 应在名为 helloworld.java 的文件中声明 public class helloworld {

    在书本上盲人摸象的摸索学习Java,Java环境配置完成,安装好eclipse后,便兴冲冲的去在记事本上编写第一个Java程序,结果给破了一盆冷水,略懵 public class helloworld ...

  4. 06从零开始学Java之编写第一个Java程序HelloWorld

    作者:孙玉昌,昵称[ 一一哥],另外[ 壹壹哥]也是我哦 CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 配套开源项目资料 GitHub地址: https://github.com/SunL ...

  5. java 内核驱动程序_内核第三讲,进入ring0,以及编写第一个内核驱动程序.

    内核第三讲,进入ring0,以及编写第一个内核驱动程序. 一丶进入ring0之前的简介 进入0环之前,我们要明白操作系统的设计,操作系统允许驱动程序使用In out等等特权指令来操作高2G的内存.那么 ...

  6. zynq学习02 新建一个Helloworld工程

    http://www.cnblogs.com/Rmumu/p/5705502.html http://www.cnblogs.com/151009-on-the-way/p/5777848.html ...

  7. iOS 11开发教程(二)编写第一个iOS 11应用

    iOS 11开发教程(二)编写第一个iOS 11应用 编写第一个iOS 11应用 本节将以一个iOS 11应用程序为例,为开发者讲解如何使用Xcode 9.0去创建项目,以及iOS模拟器的一些功能.编 ...

  8. 学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用

    http://www.importnew.com/13246.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 -首页所有文章资讯Web架构基础技 ...

  9. 用java编写一个图书管理系统_手把手教你编写第一个java程序

    安装完jdk后我们就可以试着编写第一个java程序了,让我们一起来试试吧! 第一步 点击开始--所有程序--附件--记事本,新建记事本,输入以下代码: class HelloWorld { publi ...

最新文章

  1. 里程碑:DTrace 切换到 GPL 许可证
  2. python画三维立体图-python_matplotlib画三维图
  3. php注入类,简单实用的PHP防注入类实例
  4. 《构建之法》读后感之项目计划
  5. 转正老板让你谈谈你的看法_让我们谈谈逻辑回归
  6. 如何查看光驱硬盘托架的尺寸_如何确定光驱位的硬盘托架的大小尺寸和接口
  7. 信息学奥赛C++语言:质因数分解
  8. 3dvary灯光材质为什么不亮_详解CG灯光渲染师的职业技能
  9. 5月20日发!索尼Xperia 1国行版官宣:骁龙855+4K“带鱼”屏
  10. 编程通用知识 文件流
  11. [ZJOI2006]物流运输
  12. Linux shell脚本详解及实战(二)——shell脚本之分支
  13. Python开发Http代理服务器 - socketref,再见!高德 - C++博客
  14. 学历真的重要吗?当然非常非常非常重要。
  15. 服务器PCI插槽上的固态硬盘,固态硬盘常见接口图解
  16. m1的docker-compose
  17. 事情永远都没有想象中那么好
  18. 宏碁笔记本关闭安全启动Secure Boot,就是改为Disabled
  19. Nexus 5设备调试
  20. ME3616 NBIOT模组对接OneNET教程以及STM32代码

热门文章

  1. springboot——关于template might not exist or might not be accessible的问题
  2. 如何卸载Chrome应用程序
  3. Mysql数据库基础第八章:窗口函数和公用表表达式(CTE)
  4. mysql 证书双向认证_https证书双向验证
  5. STM32正交编码器测速
  6. 【LTspice】【如何手动测量仿真波形的电压(差)值】
  7. 区块链新零售重构企业商业环境的信任体系,消费环境更安全可靠
  8. 用计算机来弹洪荒之力,如果不会支撑,纵使有“洪荒之力”也弹不强
  9. c4d怎么导入fbx_如何将3DMAX模型带材质导入C4D
  10. STM32玩矩阵开关(输入和输出)