進一步學習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編譯器的警告級別;
相關文章
- 裝置驅動程式INF檔案——INF檔案的節
- locate標頭檔案和庫檔案
- 驅動載入到proc檔案下
- Windows驅動如何用INF檔案安裝Windows
- Python驅動ansys執行apdl檔案Python
- wav檔案的檔案頭
- Linux 核心驅動中對檔案的讀寫Linux
- 一個檔案系統過濾驅動的demo
- 8.13 標頭檔案剖析:標頭檔案路徑(下)
- 作業系統——裝置驅動和檔案系統作業系統
- OT的Thinkphp框架驅動檔案不全Memcached.class.phpPHP框架
- Windows 無法安裝未簽名的驅動檔案Windows
- C 標頭檔案
- 標頭檔案的作用分析
- liunx核心移植(三)——核心、驅動、應用程式、根檔案系統的關係
- FileSystemObject 的例子(處理驅動器、資料夾、檔案) (轉)Object
- 給核心裝置驅動增加sysfs除錯檔案除錯
- #include sys/xxx.h標頭檔案 UNIX標頭檔案
- 基於sys檔案系統的LED驅動的移植【原創】
- Makefile 自動生成標頭檔案的依賴關係
- 02@在類的標頭檔案中儘量少引入其他標頭檔案
- 標頭檔案與庫檔案與菜鳥 (轉)
- C 標頭檔案 作用
- 祖傳標頭檔案
- 標頭檔案講解
- gcc g++ 新增標頭檔案路徑和庫檔案路徑的方法GC
- Linux程式間通訊中的檔案和檔案鎖Linux
- 在Oracle中移動資料檔案、控制檔案和日誌檔案Oracle
- js動態載入 js檔案和 css檔案JSCSS
- 檔案IO的學習
- wmi 取得選定檔案更新的日期
- oracle資料庫移動資料檔案、日誌檔案和控制檔案Oracle資料庫
- 關於C++的標頭檔案C++
- .ora檔案、.dbf檔案和.dat檔案的區別
- fcntl.h標頭檔案
- linux 標頭檔案 作用Linux
- 什麼是 標頭檔案
- 檔案程式設計、檔案下載程式設計