本文介紹wdk開發的一些特點。與應用層開發的差異性,不能混為一談。
一、函式的呼叫點
在核心程式設計中,乙個函式往往有多個呼叫點,而應用層中乙個函式一般只在main裡面有呼叫點。核心函式呼叫點一般在:
1、入口函式driverenty和driverunload中
2、各種分發函式(普通分發和快速io分發)
3、請求處理完成後會被系統呼叫的**函式。
(**函式參考 或者
乙個形象的例子:
你到乙個商店買東西,剛好你要的東西沒有貨,於是你在店員那裡留下了你的**,過了幾天店裡有貨了,店員就打了你的**,然後你接到**後就到店裡去取了貨。在這個例子裡,你的**號碼就叫**函式,你把**留給店員就叫登記**函式,店裡後來有貨了叫做觸發了**關聯的事件,店員給你打**叫做呼叫**函式,你到店裡去取貨叫做響應**事件。
4、其他**函式(ndis驅動程式的特徵函式)
二、函式的多執行緒安全性
1、執行在多執行緒的函式必須是安全的,單執行緒的環境執行,不需要多執行緒安全。
2、函式的呼叫源執行在單執行緒,函式也會執行在單執行緒中。
3、函式呼叫源如果在多執行緒下,或者併發呼叫下,如果呼叫路徑沒有強制多執行緒序列成單執行緒,則函式可能在多執行緒中。
4、如果在呼叫路徑上,有序列化成單執行緒,則函式可能執行在單執行緒下。
三、判斷函式是否多執行緒安全
1、完全不用全域性變數,靜態變數或者其他全域性性的資源
2、使用互斥體、自旋鎖等同步手段將多執行緒序列化成單執行緒
四、pe格式
核心模組編譯出來的pe格式的sys檔案是有不同的節.
init:初始化完成後就從記憶體中撤掉,不占用記憶體空間
page:分頁記憶體,當記憶體不足時候,這段**可以以檔案形式交換到硬碟上,以節約記憶體空間
pagelk:預設存放在不可分頁的記憶體空間中,一直存在記憶體空間
五、**中斷級
disptch高於 passive級別
具有複雜功能的核心api都在passive執行,如果當前**是執行在dispatch級別,但是必須要呼叫乙個passive級別的api,是不可以隨意降低當先執行緒的中斷級的。
windows的**都會按照一定規範執行在應該的中斷級上,隨意降低會影響系統的穩定性。
針對這種情況,一般用乙個專門的執行緒去處理passive級別的**。
六、**除錯
在入口函式寫入如下**,這樣可以讓**在除錯狀態下強行中斷下來。以便後面f9的斷點設定,否則f9斷點在wdbg下是很不方便的。
#if dbg
__asm
#endif
VS2012 WDK7 1驅動開發
vs2010 wdk7.1,編譯32位和64位的驅動配置 編譯出32位驅動 vs2010裡新建乙個空專案,新建乙個配置名 driverwdk32 自行定義名字 vs 目錄 可執行檔案目錄 c winddk 7600.16385.1 bin x86 executablepath 其實這裡都是32位的編...
VS2010 WDK 7 0配置驅動開發環境
1.安裝vs2010,wdk7.10 2.新建vc控制台專案 選擇為空專案 3.新建專案配置 check 4.設定vc 路徑 a.配置可執行路徑 wdkpath bin x86 b.配置包含目錄 wdkpath inc ddk wdkpath inc wdkpath inc api c.配置庫路徑 ...
vs2012 wdk8 0 搭建wdf驅動開發環境
開發環境搭建 系統 win7 x64 工具 vs2012 wdk8.0 外掛程式 wdfcoinstaller.msi 1 先安裝vs2012,再安裝wdk8.0,這樣在開啟vs2012時可以建立windows drivers型別的工程。注 vs2012不能安裝wdk8.1,wdk8.1必須安裝在v...