DDKSources    

電腦出了問題 所以隔了幾天才新增文章

驅動分為兩種

NT式驅動 ,WDM式驅動

今天咱們來編寫一個NT式驅動代碼

編寫驅動 除了所需的源代碼*.c,*.cpp 頭文件*.h,之外

 

還需要兩個配置文件

 

Sources , makefile

 

1.建立makefile

 

新增文字文件

 

增加以下代碼

 

# 一般只有一行,固定格式,不需更改(#是注釋,不影響代碼)

INCLUDE $(NTMAKEENV)\makefile.def

 

儲存成makefile,將副檔名txt 刪除

 

2.建立Sources

 

新增文字文件

增加以下代碼

#驅動名稱
TARGETNAME=DDK_HelloWorld
#指定生成文件類型Driver =驅動
TARGETTYPE=DRIVER
#生成驅動時所在目錄
TARGETPATH=SYS
#這邊指定驅動頭文件目錄
INCLUDES=$(BASEDIR)\inc;\
      $(BASEDIR)\inc\wxp;\

##上面一定要空一行D:\WINDDK\3790.1830 =$(BASEDIR)
#這邊是驅動源文件
SOURCES=DDK_HelloWorld.c\

儲存成Sources,將副檔名txt 刪除

3.開始編寫驅動代碼

新增文字文件,更改成DDK_HelloWorld.c 

 可以直接用記事本書寫代碼

 

#include //ntddk.h 是NT式驅動的相關申明

#define INITCODE code_seg("INIT") /*入口函數DriverEntry 需要放在INIT的內存中,當驅動加載時需要載入內存,當加載成功時函數就會將內存卸載掉*/

#define PAGECODE code_seg("PAGE") //內存不足時 可以置換到硬碟

 #pragma  INITCODE
VOID DDK_Unload (IN PDRIVER_OBJECT DriverObject); //前置說明卸載例程,學過C或C++的都應該知道

/*驅動入口函數DriverEntry,他有一個返回值

我們將他的返回類型設置為NTSTATUS

NTSTATUS的定義

typedef LONG NTSTATUS;

其實他也就是Long的類型

入口函數有兩個參數 DriverObject ,  RegistryPath

  DriverObject  用來傳遞驅動對象 I/O管理器 傳進來的驅動對象

  RegistryPath   這個參數用來指向驅動負責的註冊表,也就是驅動在註冊表中的路徑

*/

//入口函數

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING A)

{
//KdPrint 是一個宏 需要用兩個括弧 功用和DbgPrint一樣
KdPrint(("驅動加載成功!!")); 

//DriverUnload 指定驅動卸載時所用的回調函數地址

DriverObject->DriverUnload=DDK_Unload;
return 1 ;
}

//驅動卸載

VOID DDK_Unload(IN PDRIVER_OBJECT DriverObject) 
{
 KdPrint(("驅動卸載成功!!"));

}

這是一個簡單的NT式驅動

之後還得創建設備

光是這樣還不算是一個完整的代碼

之後的會在寫

 

arrow
arrow
    全站熱搜

    pua0156k 發表在 痞客邦 留言(0) 人氣()