设置编译内核lib驱动及应用层dll的source文件

驱动层的一些策略性代码,算法性代码,和驱动内API不相关的代码,可以用在应用层进行测试,以提高编写的速度,这是明显的,应用层在这方面的有其优点.那么如何来实现这个功能.

主要是在写两个文件

一个是sources文件,  一个是Sample.def文件.

一. sources文件

KERNEL_BUILD=1                    #若想编译成DLL的话 那么在之前加#号

TARGETNAME=Sample
DLLDEF=Sample.def                 #输出函数的.def文件
TARGETPATH=../../bin                 #文件输出目录 (.sys文件或.dll文件)
TARGETPATHLIB=../../lib            #.lib输出目录

!ifdef KERNEL_BUILD               #若定义了KERNEL_BUILD 则生成一个.sys文件 相当于内核库  
TARGETTYPE=EXPORT_DRIVER
!else                                              #若没有定义,则生成一个.dll  
TARGETTYPE=DYNLINK          #生成一个dll
USE_MSVCRT=1
DLLENTRY=_DllMainCRTStartup        #dll的入口函数
INCLUDES= $(INCLUDES); $(DDK_INC_PATH);      #H文件的目录
INCLUDES= $(INCLUDES); $(SDK_INC_PATH);
TARGETLIBS=$(TARGETLIBS) $(SDK_LIB_PATH)\kernel32.lib     #LIB目录  kernel32.lib  gdi32.lib advapi32.lib
TARGETLIBS=$(TARGETLIBS) $(SDK_LIB_PATH)\gdi32.lib
TARGETLIBS=$(TARGETLIBS) $(SDK_LIB_PATH)\advapi32.lib
TARGETLIBS=$(TARGETLIBS) $(SDK_LIB_PATH)\ntdll.lib
!endif


INCLUDES=$(INCLUDES); ../../inc;                       #自己的.H文件目录
INCLUDES=$(INCLUDES); ../../inc/SampleOne; #自己的.H文件目录二
INCLUDES=$(INCLUDES); ../../inc/SampleTwo;#自己的.H文件目录三


SOURCES=\
A.cpp\
B.cpp\
C.cpp\
D.cpp\

二. Sample.def文件

NAME "Sample.sys"        #若为内核库则为Sample.sys   若为应用层dll则修改为Sample.dll
EXPORTS
 DllInitialize PRIVATE
 DllUnload PRIVATE

AFunc

BBFunc

 

 

三.函数库入口函数

#include "ntddk.h"

extern "C"{
 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pusRegPath);
 void DriverUnload(PDRIVER_OBJECT pDriverObject);
 NTSTATUS DllInitialize(PUNICODE_STRING RegistryPath);
 NTSTATUS DllUnload();
};

void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
 DllUnload();
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pusRegPath)
{
 DllInitialize(pusRegPath);
 pDriverObject->DriverUnload = DriverUnload;
 return STATUS_SUCCESS;
}


NTSTATUS DllInitialize(PUNICODE_STRING RegistryPath)
{
 DbgPrint("Sample: DllInitialize(%wZ)\n", RegistryPath);
 return STATUS_SUCCESS;
}

NTSTATUS DllUnload()
{
 DbgPrint("Sample: DllUnload\n");
 return STATUS_SUCCESS;
}

 

//这里要注意的是 

//DDK 中编译器默认为 _stdcall

//而VC中编译默认为 _cdecel 

//因此在这里显式加入 _stdcall 防止编译器link错误

ULONG _stdcall TestFun(void)             

{

    return 100;

}

 

示例代码下载地址:

http://download.csdn.net/source/2799981

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值