轉載請註明來源:
enjoy5512的博客 : http://blog.csdn.net/enjoy5512
GitHub : https://github.com/whu-enjoy
爲了整理方便,可以在一個合適的路徑下建立一個專門的文件夾用於保存源代碼.打開桌面的x86 Checked Build Enviroment快捷方式,進到源代碼所在文件夾下,可以看到每個程序至少有三個文件,一個源代碼文件,一個是makefile,一個sources,頭文件是可選的
頭文件
/////////////////////////////////////////////////////////////////////////////
// 文件名 : fitst.h
// 工程 : first
// 作者 : enjoy5512 修改者 : enjoy5512 最後優化註釋者 : enjoy5512
// 個人技術博客 : blog.csdn.net/enjoy5512
// 個人GitHub : github.com/whu-enjoy
// 描述 : 第一個驅動程序的頭文件
// 版本 : 最終確定版 完成日期 : 2016年7月5日 09:25:30
// 修改 :
// 參考文獻 :
// <<Windows內核安全與驅動開發>> 譚文 陳銘霖 編著
//////////////////////////////////////////////////////////////////////////////
#ifndef __FIRST_H__
#define __FIRST_H__
//////////////////////////////////////////////////////////////////////////////
//*= = 頭文件聲明
//////////////////////////////////////////////////////////////////////////////
#include <ntddk.h>
//////////////////////////////////////////////////////////////////////////////
//*= = 宏與結構體
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//*= = 函數聲明
//////////////////////////////////////////////////////////////////////////////
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
// 修改 :
// 參考文獻 :
// <<Windows內核安全與驅動開發>> 譚文 陳銘霖 編著
/////////////////////////////////////////////////////////////////////////////
#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命令編譯驅動程序
將編譯好的first.sys複製到虛擬機中
將程序符號文件路徑加到windbg符號路徑中
設置源代碼路徑
啓動服務,可以看到虛擬機卡住了,windbg在int3處中斷了,然後便可以開始調試運行了