进一步学习WDK驱动程序的SOURCES文件、WMI驱动程序的mof文件和wmidata.h头文件

Win7 WDK 自带示例,wmi,wmisamp驱动程序,未构建之前,文件如下;

进一步学习WDK驱动程序的SOURCES文件、WMI驱动程序的mof文件和wmidata.h头文件_第1张图片

看一下其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成功以后,看一下;

进一步学习WDK驱动程序的SOURCES文件、WMI驱动程序的mof文件和wmidata.h头文件_第2张图片

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驱动程序;完成后如下;

进一步学习WDK驱动程序的SOURCES文件、WMI驱动程序的mof文件和wmidata.h头文件_第3张图片

此驱动就不包含前面的MOF文件和wmidata.h;

进一步学习WDK驱动程序的SOURCES文件、WMI驱动程序的mof文件和wmidata.h头文件_第4张图片

看此驱动带的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 \

构建另一个驱动看一下;

进一步学习WDK驱动程序的SOURCES文件、WMI驱动程序的mof文件和wmidata.h头文件_第5张图片

构建出cancel.sys; 

进一步学习WDK驱动程序的SOURCES文件、WMI驱动程序的mof文件和wmidata.h头文件_第6张图片

看此驱动带的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编译器的警告级别;

你可能感兴趣的:(Windows驱动开发,wmidata,sources,WDK,TARGETTYPE,TARGETLIBS)