一、windows内核开发需要的软件

1.WDK

2.WinDbg

3.virtualKD

4.DebugView

5.Visual C++ 6.0

6.VMware Workstation

二、windows内核开发软件的安装


1.WDK的安装和配置

wdk的下载地址:http://download.microsoft.com/download/4/A/2/4A25C7D5-EFBE-4182-B6A9-AE6850409A78/GRMWDK_EN_7600_1.ISO

首先下载驱动开发包GRMWDK_EN_7600_1.ISO,并解压到本地文件夹,解压后WDK安装包:

OK到现在为止,WDK的安装和配置全部完成,接下来的活就是它的使用。

2.virtualKD的安装和配置

在内核驱动开发时,VMware Workstation是必不可少的,VMware
Workstation的安装教程网上很多(问度娘)。

假设VMware
Workstation虚拟机已经安装好了,并且已经成功安装了Windows XP系统。笔者的虚拟机的版本:VMware Workstation10.1,虚拟机里安装的系统版本: Windows XP sp3(目标机),本地安装的系统版本:Windows
XP sp3(宿主机)

virtualKD的下载地址:http://virtualkd.sysprogs.org/download/VirtualKD-2.8.exe

首先下载virtualKD到本地,并解压,如图:

现在从虚拟机xp系统回到本地调试机XP系统中:

OK到现在为止,virtulKD的安装和配置全部完成,接下来的活就是它的使用。

3.内核驱动开发IDE的使用

其实用EditPlus等文本软件工具也可以进行驱动程序的编码,但是不太方便。

由于驱动程序的编写主要是用C/C++,因此我们可以配置一下Visual C++ 6.0来进行驱动程序的简易编写。

三、windows内核驱动程序的编写

一个简单的驱动程序所包含的文件:

Hello.c的源码:

<span style="font-family:Microsoft YaHei;font-size:10px;">//开发NT驱动需要的头文件
#include <ntddk.h> //驱动卸载函数的声明
VOID DriverUnload(
IN PDRIVER_OBJECT DriverObject
); //驱动入口点函数
NTSTATUS DriverEntry(__in struct _DRIVER_OBJECT *DriverObject,
__in PUNICODE_STRING RegistryPath
)
{
//设置驱动的卸载函数
DriverObject->DriverUnload = DriverUnload; //只会在checked版下显示输出
KdPrint(("hello wdk!\n")); return STATUS_SUCCESS;
} //驱动卸载函数
VOID DriverUnload(
IN PDRIVER_OBJECT DriverObject
)
{
KdPrint(("DriverUnload\n"));
} //注:当在VC6.0的Include File里添加了WDK的头文件以后,
//在VC6.0里写代码就会出现代码高亮</span>

makefile文件--对于所有的驱动程序来说,内容是不变的(直接拷贝过来使用)。

sources文件--驱动编译的配置文件

一个简单的驱动程序需要的3个文件都准备好了,现在可以开始编译了:

开始编译:

编译后的文件夹:

编译成功生成的驱动:

windows内核开发环境的简易搭建的更多相关文章

  1. Windows内核开发-5-(2)-内核模式调试

    Windows内核开发-5-(2)-内核模式调试 普通用户模式的调试,采取的是给进程添加一个线程来挂起断点,作为一个调试器的线程在进程中使用.照这样来类推,对操作系统调试相当于添加一个进程来限制操作系 ...

  2. 【Cocos2d-X开发学习笔记】第01期:PC开发环境的详细搭建

    本文使用的是cocos2d-x-2.1.4版本 ,截至目前为止是最新稳定版 所谓的开发环境就是制作游戏的地方,打个比方读者就会十分清楚了.比如提到做饭,人们都会想到厨房.这是 因为厨房有炉灶.烟机.水 ...

  3. Windows内核开发-6-内核机制 Kernel Mechanisms

    Windows内核开发-6-内核机制 Kernel Mechanisms 一部分Windows的内核机制对于驱动开发很有帮助,还有一部分对于内核理解和调试也很有帮助. Interrupt Reques ...

  4. Windows内核开发-10-监听对象

    Windows内核开发-10-监听对象 Windows内核除了可以监听进程,线程.dll还可以监听特定的对象和注册表.这里先讲一下监听对象. 监听对象 内核提供了一种可以监听对特定的对象类型的句柄进行 ...

  5. windows phone7开发环境配置错误

    遇到下面这样一个问题:在配置windows phoe7开发环境的时候出现如下错误,以及相应的解决方案,希望对大家有所帮助. 装完环境后出现下面错误: [caption id="attachm ...

  6. Grails开发环境的高速搭建

    Grails开发环境的高速搭建 1 JAVA环境变量的设置和Grails设置环境变量 个人參考 JAVA_HOME =E:\kaifa\Java\jdk7_32 GRAILS_HOME =E:\kai ...

  7. Windows内核开发-2-开始内核开发-2-内核开发入门

    Windows内核开发-2-开始内核开发-2- 第一个驱动程序: 直接采用vs2019中的Empty WDM Driver 模块创建: 初始的项目文件夹中有一个Driver Files里面会有一个.i ...

  8. Windows内核开发-3-内核编程基础

    Windows内核开发-3-内核编程基础 这里会深入讲解kernel内核的API.结构体.和一些定义.考察代码在内核驱动中运行的机制.最后把所有知识合在一起写一个有用的驱动. 本章学习要点: 1:通用 ...

  9. Windows内核开发-4-内核编程基础

    Windows内核开发-4-内核编程基础 这里会构建一个简单但是完整的驱动程序和一个客户端,部署内核执行一些平时user下无法执行的操作. 将通过以下内容进行讲解: 1 介绍 2 驱动初始化 3 Cr ...

随机推荐

  1. 项目管理之Git

    @[TOC]( Git命令:分支与合并)Git一款很好的项目版本管理工具,更是一款优秀的分布式项目管理工具.今天主要给大家介绍Git 强大的分支和合并功能,分支和合并可以说在实际的工作当中用到的是最多 ...

  2. Mac忘记密码

    1.启动电脑的时候,按住 Command+R,直到苹果的图标出现,松开,等待进入... 2.直接点击菜单栏上有个功能里面有 "终端" 功能,点击打开. 3.在终端页面里输入---& ...

  3. AtCoder Beginner Contest 194

    A I Scream int main() { IOS; int a, b; cin >> a >> b; if(a + b >= 15 && b > ...

  4. gulp打包详解

    gulp的作用 删除文件中冗余的内容,压缩文件,减小文件体积 实际项目中运行的都是压缩完成以后的文件 减小加载响应时间 gulp打包压缩对象 html,css,js,sass,webserver 音频 ...

  5. 【Azure 微服务】PowerShell中,用Connect-ServiceFabricCluster命令无法连接到sf-test.chinaeast2.cloudapp.chinacloudapi.cn:19000 问题分析

    问题描述 Azure Service Fabric提供了PowerShell的指令来进行创建,管理资源,如Get-ServiceFabricClusterHealth 获取当前集群的健康状态,但这些命 ...

  6. 练习1—参数传递、递归调用(Java)

    1.方法参数的值传递机制 1.说明 方法:必须由其所在类或对象调用才有意义.若方法含有参数: 形参:方法声明时的参数: 实参:方法调用时实际传给形参的参数值 Java的实参值如何传入方法:Java里方 ...

  7. P1012 拼数(JAVA语言)

    //早起刷题傻一天 题目描述 设有nn个正整数(n≤20)(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3n=3时,33个整数1313,312312,343343联接成的最大整数 ...

  8. PTA 统计二叉树叶子结点个数

    6-2 统计二叉树叶子结点个数 (10 分)   本题要求实现一个函数,可统计二叉树的叶子结点个数. 函数接口定义: int LeafCount ( BiTree T); T是二叉树树根指针,函数Le ...

  9. PHP并发抢购解决方案

    Mysql版 逻辑步骤 mysql存储引擎使用Innodb 开始事务,查询商品库存并加上共享锁 判断库存是否足够,进行商品/订单/用户等操作 提交事务,完成下单抢购 代码参考 // 关闭自动提交 $t ...

  10. CentOS7使用NTP搭建时间同步服务器

    前言 为什么要搭建时间同步服务器呢?场景是这样的. 我们有两台CentOS服务器,其中一台是可以连接外网的,下文中我们称它为A服务器,另一台不能连接外网,但是与A服务器在同一局域网中,下文中我们称它为 ...