Windows驱动开发之第一个驱动程序

转载请注明来源:
enjoy5512的博客 : http://blog.csdn.net/enjoy5512
GitHub : https://github.com/whu-enjoy

为了整理方便,可以在一个合适的路径下建立一个专门的文件夹用于保存源代码.打开桌面的x86 Checked Build Enviroment快捷方式,进到源代码所在文件夹下,可以看到每个程序至少有三个文件,一个源代码文件,一个是makefile,一个sources,头文件是可选的
Windows驱动开发之第一个驱动程序_第1张图片


头文件

/////////////////////////////////////////////////////////////////////////////
//  文件名 : fitst.h
//  工程 : first 
//  作者 : enjoy5512   修改者 : enjoy5512   最后优化注释者 : enjoy5512
//  个人技术博客 : blog.csdn.net/enjoy5512
//  个人GitHub   : github.com/whu-enjoy
//  描述 : 第一个驱动程序的头文件
//  版本 : 最终确定版  完成日期 : 2016年7月5日 09:25:30
//  修改 :
//  参考文献 :
//       <> 谭文 陈铭霖 编著
//////////////////////////////////////////////////////////////////////////////

#ifndef __FIRST_H__
#define __FIRST_H__


//////////////////////////////////////////////////////////////////////////////
//*= = 头文件声明
//////////////////////////////////////////////////////////////////////////////
#include 

//////////////////////////////////////////////////////////////////////////////
//*= = 宏与结构体
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
//*= = 函数声明
//////////////////////////////////////////////////////////////////////////////
NTSTATUS
DriverEntry(
    __in PDRIVER_OBJECT DriverObject,
    __in PUNICODE_STRING RegistryPath
    );

VOID
DriverUnload(
    __in PDRIVER_OBJECT DriverObject
    );

#endif //End of __FIRST_H__

源代码

/////////////////////////////////////////////////////////////////////////////
//  文件名 : fitst.c
//  工程 : first 
//  作者 : enjoy5512   修改者 : enjoy5512   最后优化注释者 : enjoy5512
//  个人技术博客 : blog.csdn.net/enjoy5512
//  个人GitHub   : github.com/whu-enjoy
//  描述 : 第一个驱动程序
//  主要函数 :
//      VOID DriverUnload(PDRIVER_OBJECT driver) 卸载函数
//      NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) 入口函数
//  版本 : 最终确定版  完成日期 : 2016年7月5日 09:36:17
//  修改 :
//  参考文献 :
//       <> 谭文 陈铭霖 编著
/////////////////////////////////////////////////////////////////////////////

#include "first.h"

//程序说明开始
//==================================================================================
//  功能 : 驱动程序入口函数
//  参数 :    __in PDRIVER_OBJECT DriverObject, in PUNICODE_STRING RegistryPath
//  (入口)  __in PDRIVER_OBJECT DriverObject  : 驱动对象
//          __in PUNICODE_STRING RegistryPath : 驱动在注册表中的键值
//  (出口)  无
//  返回 :  NTSTATUS
//  主要思路 : 先设置一个int3断点,然后输出一句话,设置卸载函数
//  调用举例 : 
//  日期 : 2016年7月5日 09:32:32
//==================================================================================
//程序说明结束
NTSTATUS 
DriverEntry(
    __in PDRIVER_OBJECT DriverObject, 
    __in PUNICODE_STRING RegistryPath
    )
{
    #if DBG
        _asm int 3
    #endif

    DbgPrint("first : hello ,load server!!\n");

    DriverObject->DriverUnload = DriverUnload;

    return STATUS_SUCCESS;
}

//程序说明开始
//==================================================================================
//  功能 : 驱动程序卸载
//  参数 :    __in PDRIVER_OBJECT DriverObject
//  (入口)  __in PDRIVER_OBJECT DriverObject  : 驱动对象
//  (出口)  无
//  返回 :  VOID
//  主要思路 : 输出一句话
//  调用举例 : 
//  日期 : 2016年7月5日 09:35:59
//==================================================================================
//程序说明结束
VOID 
DriverUnload(
    __in PDRIVER_OBJECT driver
    )
{
    DbgPrint("firts:Our driver is unloading!!\r\n");
}

makefile文件

这个文件是固定的,内容不变

!IF 0

Copyright (C) Microsoft Corporation, 1999 - 2002

Module Name:

    makefile.

Notes:

    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 components of Windows NT (DDK)

!ENDIF

!INCLUDE $(NTMAKEENV)\makefile.def


sources文件

TARGETNAME=first
TARGETTYPE=DRIVER
SOURCES=first.c

在源代码路径下,使用build命令编译驱动程序
Windows驱动开发之第一个驱动程序_第2张图片

将编译好的first.sys复制到虚拟机中
将程序符号文件路径加到windbg符号路径中
Windows驱动开发之第一个驱动程序_第3张图片

设置源代码路径
Windows驱动开发之第一个驱动程序_第4张图片

启动服务,可以看到虚拟机卡住了,windbg在int3处中断了,然后便可以开始调试运行了
Windows驱动开发之第一个驱动程序_第5张图片

你可能感兴趣的:(Windows驱动开发)