1 程式設計實現載入驅動

2022-08-23 19:57:12 字數 1972 閱讀 4405

win64驅動模板

//

[0]包含的標頭檔案。可以加入系統或自己定義的標頭檔案

#include #include

#include

//[1]定義符號鏈結,一般來說修改為驅動的名字即可

#define device_name l"\\device\\krnlhw64"

#define link_name l"\\dosdevices\\krnlhw64"

#define link_global_name l"\\dosdevices\\global\\krnlhw64"

//[2]定義驅動功能號和名字,提供介面給應用程式呼叫

#define ioctl_io_test ctl_code(file_device_unknown, 0x800, method_buffered, file_any_access)

#define ioctl_say_hello ctl_code(file_device_unknown, 0x801, method_buffered, file_any_access)

//驅動解除安裝的處理例程

void driverunload(pdriver_object pdriverobj)

//irp_mj_create對應的處理例程,一般不用管它

ntstatus dispatchcreate(pdevice_object pdevobj, pirp pirp) //

irp_mj_close對應的處理例程,一般不用管它

ntstatus dispatchclose(pdevice_object pdevobj, pirp pirp) //

irp_mj_device_control對應的處理例程,驅動最重要的函式之一,一般走正常途徑調 用驅動功能的程式,都會經過這個函式

ntstatus dispatchioctl(pdevice_object pdevobj, pirp pirp)

case

ioctl_say_hello:

} if(status ==status_success)

pirp->iostatus.information =uoutsize;

else

pirp->iostatus.information = 0

; pirp->iostatus.status =status;

iocompleterequest(pirp, io_no_increment);

return

status;

}

//驅動載入的處理例程,裡面進行了驅動的初始化工作

ntstatus driverentry(pdriver_object pdriverobj, punicode_string pregistrystring)

//走到這裡驅動實際上已經初始化完成,下面新增的是功能初始化的**

dbgprint("

[krnlhw64]driverentry\n

");

return

status_success;

}

使用scm 系列函式載入解除安裝驅動的過程並不複雜,總體流程是:開啟scm 管理器(獲得scm 控制代碼)->建立驅動服務(獲得服務控制代碼,如果服務已經存在,此步則變成開啟服務)->啟動服務->停止服務->移除服務->關閉服務控制代碼->關閉scm 控制代碼。如果要與驅動通訊,則用createfile 開啟驅動的符號鏈結(可以理解成獲得乙個「通訊控制代碼」),然後使用deviceiocontrol與驅動進行資訊互動。如果曾經開啟過驅動的符號鏈結,則必須在卸

載驅動前關閉「通訊控制代碼」,否則再次載入相同的驅動時會有一些麻煩。

deviceiocontrol的引數也很好理解,只有5 個重要引數:控制碼,輸入緩衝區,輸入長度,輸出緩衝區,輸出長度

核心驅動載入除錯 1

背景知識 1 驅動相關 驅動在硬體上 作業系統提供給應用程式介面以下.windows2000 xp 上的裝置驅動程式不直接操作硬體,而是呼叫 hal功能作為與硬體的介面。windows2000 xp 上有如下幾種型別的裝置驅動程式 1。硬體裝置驅動程式操作硬體,它將輸出寫入物理裝置或網路,並從物理裝...

驅動載入工具的實現

使用openscmanager函式開啟服務控制管理器 scm 獲得控制代碼.使用這個scm控制代碼建立 或者開啟 服務,服務執行載入驅動,服務停止解除安裝驅動 openscmanager 開啟裝置 服務 管理器 createservice 建立服務 或者裝置,根據引數不同而不同 openservic...

linux學習1 驅動模組的載入

編譯環境 ubuntu 16.04 linux板子 exynos4412 目錄1.編譯生成模組檔案.ko 1.1 板子執行最小系統 1.2 編譯模組 1.3 掛載u 盤 2 模組操作 2.1 載入模組 2.2 檢視模組 2.3 解除安裝模組 linux 驅動有兩種執行方式,第一種就是將驅動編譯進 l...