前段時間把自己寫的驅動程式整理了一下,改寫出這麼乙個模版來,雖然是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 ...