進一步學習WDK驅動程式的SOURCES檔案、WMI驅動程式的mof檔案和wmidata.h標頭檔案
Win7 WDK 自帶示例,wmi,wmisamp驅動程式,未構建之前,檔案如下;
看一下其sources檔案;
TARGETNAME=WmiSamp
TARGETTYPE=DRIVER
KMDF_VERSION_MAJOR=1
INF_NAME=WmiSamp
NTTARGETFILE1=$(OBJ_PATH)\$(O)\$(INF_NAME).inf
PASS1_BINPLACE=$(NTTARGETFILE1)
#
# List of source files to compile.
#
SOURCES= \
WmiSamp.mof \
WmiSamp.rc \
WmiSamp.c \
WmiHandler.c \
NTTARGETFILE0=\
$(OBJ_PATH)\$O\wmidata.h \
$(OBJ_PATH)\$O\wmisamp.x \
$(OBJ_PATH)\$O\wmisamp.vbs
TARGET_DESTINATION=wdf
頭2句,指定驅動程式的名字和型別,沒有問題;
看 SOURCES = ,列出要編譯的原始檔列表,其中包含一個 .mof檔案,這是啥?
再看 NTTARGETFILE0=,列出的檔案在當前目錄下是沒有的,其中還包含一個vbs指令碼檔案;$(OBJ_PATH),這是指哪個目錄?這個應該是build以後出來的目錄;
build成功以後,看一下;
objchk_win7_amd64\amd64,這是build以後出來的目錄;NTTARGETFILE0= 列出的檔案出現在amd64目錄下;build以後還出來一個標頭檔案,啥情況?
根據微軟資料; 編譯前的.mof檔案和build以後的wmidata.h檔案,是WMI驅動程式特有的;
微軟言: 若要編譯定義 WMI 資料和事件塊的 MOF 檔案,請使用 Microsoft Windows 作業系統隨附的 MOF 編譯器(稱為 Mofcomp.exe);
可以通過在驅動程式的二進位制檔案中包含二進位制 MOF 資料並在執行時返回選定的架構資訊,來動態釋出驅動程式的架構;
具體見:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/kernel/compiling-a-driver-s-mof-file;
下面找一個非WMI驅動,構建一下看一下;構建print下的emf驅動程式;完成後如下;
此驅動就不包含前面的MOF檔案和wmidata.h;
看此驅動帶的sources檔案,
TARGETNAME=EmfDespooling
TARGETTYPE=PROGRAM
TARGETLIBS= $(SDK_LIB_PATH)\winspool.lib \
$(SDK_LIB_PATH)\kernel32.lib \
UMTYPE=console
UMENTRY=wmain
INCLUDES=
C_DEFINES=-D_UNICODE -DUNICODE
USE_MSVCRT=1
SOURCES=emf.c
沒有了NTTARGETFILE0= 段;
因為指定 TARGETTYPE=PROGRAM,構建出的驅動程式是exe形式;
此驅動還呼叫到了win32的庫,
TARGETLIBS= $(SDK_LIB_PATH)\winspool.lib \
$(SDK_LIB_PATH)\kernel32.lib \
構建另一個驅動看一下;
構建出cancel.sys;
看此驅動帶的sources檔案,
TARGETNAME=cancel
TARGETTYPE=DRIVER
TARGETLIBS= \
$(DDK_LIB_PATH)\wdmsec.lib\
$(DDK_LIB_PATH)\csq.lib
SOURCES=cancel.c cancel.rc
MSC_WARNING_LEVEL=/W4 /WX
TARGETNAME=cancel
TARGETTYPE=DRIVER
指定驅動程式名字和類別,因為指定TYPE為DRIVER,所以構建出.sys驅動;
此驅動用到了DDK的庫,
TARGETLIBS= \
$(DDK_LIB_PATH)\wdmsec.lib\
$(DDK_LIB_PATH)\csq.lib
MSC_WARNING_LEVEL=/W4 /WX,這是MSC編譯器的警告級別;
相關文章
- locate標頭檔案和庫檔案
- Python驅動ansys執行apdl檔案Python
- 8.13 標頭檔案剖析:標頭檔案路徑(下)
- Windows驅動如何用INF檔案安裝Windows
- 作業系統——裝置驅動和檔案系統作業系統
- 標頭檔案的作用分析
- OT的Thinkphp框架驅動檔案不全Memcached.class.phpPHP框架
- Windows 無法安裝未簽名的驅動檔案Windows
- 02@在類的標頭檔案中儘量少引入其他標頭檔案
- gcc g++ 新增標頭檔案路徑和庫檔案路徑的方法GC
- 標頭檔案講解
- 祖傳標頭檔案
- MATLAB生成.coe檔案和.mif檔案程式碼示例Matlab
- js動態載入 js檔案和 css檔案JSCSS
- 檔案程式設計、檔案下載程式設計
- linux的啟動配置檔案inittab檔案詳解Linux
- 檔案IO的學習
- 關於C++的標頭檔案C++
- 8.14 Linux核心中的標頭檔案Linux
- 什麼是 標頭檔案
- 移動檔案
- 介紹下extern和標頭檔案的聯絡
- python移動檔案指標seekPython指標
- 學習過程中,專案檔案、程式碼疑惑點
- 檔案和檔案系統
- 智慧小程式檔案館——檔案系統能力
- C/C++標頭檔案太難記?一個萬能標頭檔案全搞定!C++
- openGauss libpq使用依賴的標頭檔案
- algorithm標頭檔案下的常用函式Go函式
- bat檔案進度條程式碼BAT
- a標籤與Blob下載檔案的區別和獲取檔案下載進度
- 修改hosts檔案的小程式
- VC++學習筆記---配置檔案(一) ini檔案和propritiesC++筆記
- linux下使用windows標頭檔案LinuxWindows
- C語言 - 標頭檔案包含C語言
- c++筆記_標頭檔案C++筆記
- 微信小程式檔案預覽和下載-檔案系統微信小程式
- C++標準庫名字和標頭檔案--表C++