NT式驅動模版

2021-05-25 16:43:01 字數 1602 閱讀 9494

前段時間把自己寫的驅動程式整理了一下,改寫出這麼乙個模版來,雖然是nt式驅動的,但wdm式驅動只需在此基礎上增加一些函式就可以了。

標頭檔案:

///

//  test.h //

//自定義i/o控制**

#define  ioctl_***_*** /

ctl_code(file_device_unknown,0x801,method_buffered,file_any_access) //

原始檔://

// test.cpp //

extern "c"

#include

#include "test.h"

#define device_name l"//" //裝置名稱

#define link_name l"//" //符號連線名稱

//主要函式宣告

ntstatus dispatchcreateclose(pdevice_object pdevobj, pirp pirp);

void driverunload(pdriver_object pdriverobj);

ntstatus dispatchioctl(pdevice_object pdevobj, pirp pirp); //

// 驅動程式載入時呼叫driverentry例程

ntstatus driverentry(pdriver_object pdriverobj, punicode_string pregistrystring)

/ //建立符號連線///

rtlinitunicodestring(&ustrlinkname,link_name);

status=iocreatesymboliclink(&ustrlinkname,&ustrdevname);//建立關聯

if(!nt_success(status))  

///返回driverentry例程執行結果

return status_success; }

// //  函式名:driverunload //

//  功  能:解除安裝裝置 /

void driverunload(pdriver_object pdriverobj) /

//  函式名:dispatchcreateclose //

//  功  能:處理irp_mj_create、irp_mj_close /

ntstatus dispatchcreateclose(pdevice_object pdevobj, pirp pirp) /

//  函式名:dispatchioctl //

//  功  能:實現使用者模式與核心模式的互動 /

ntstatus dispatchioctl(pdevice_object pdevobj, pirp pirp)

break;

default:break; }

if(status == status_success)

else

pirp->iostatus.status = status;

iocompleterequest(pirp, io_no_increment);

return status; }

WDM驅動和NT式驅動

win32裝置驅動程式體系結構 目前,由於需要支援新的業務和新的pc外部裝置型別對驅動程式開發造成了新的挑戰。新型匯流排增加了裝置的數量和對裝置驅動程式的需求。裝置上各種功能的不斷增加使驅動程式的開發變得越來越複雜。同時,快速反應的互動式應用程式要求將軟體和硬體緊密的結合在一起。1997年,在用於w...

NT式驅動的基本結構

對於nt式驅動,主要的函式是driverentry例程 解除安裝例程以及各個irp的派遣例程。驅動程式有乙個入口函式,也就是首先被執行的函式。這個函式通常被命名為driverentry,也可以指定另外的名字。函式原型 ntstatus driverentry in pdriver object pd...

3 1 NT式驅動程式基本結構

標頭檔案 include ntddk.h 函式宣告 void demounload in pdriver object driverobject ntstatus democreateclose in pdevice object deviceobject,in pirp irp ntstatus ...