设置编译内核lib驱动及应用层dll的source文件
来源:互联网 发布:淘宝2个金冠店值多少钱 编辑:程序博客网 时间:2024/05/18 02:05
驱动层的一些策略性代码,算法性代码,和驱动内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
- 设置编译内核lib驱动及应用层dll的source文件
- 设置DLL的LIB文件输出路径
- vs2005编译dll没有lib文件的解决方法
- dll工程: 设置lib文件的生成路径 & 未生成lib文件的解决办法
- 从应用层打通内核:驱动的工作原理1
- vc++ DLL、LIB文件的生成及使用
- Android的LocalSocket实现及SELinux权限设置.编译(应用层和native通信)
- ffmpeg 编译 dll 和 lib 文件
- 编译HAL层生成lib.so文件
- 关于lib的调用与dll编译后为什么没有lib文件出现
- 背光驱动内核层及驱动层分析
- 内核层读写应用层文件
- 利用VS生成.lib及.dll文件
- cmake编译opencv3.1+contribute模块,并提供编译后的dll、lib等文件下载
- 基于openCV2应用中lib引用文件的一次性设置
- JRTPLIB库简介及应用(LIB文件编译方法 范例编译方法)
- linux内核驱动模块的编译及加载
- linux内核驱动模块的编译及加载
- redhat 安装教程
- 生成 cocos2d 的离线文档
- error LNK2026: module unsafe for SAFESEH image
- 升级JDK之后的OBIEE配置
- 关于Android引导画面的多分辨率适配
- 设置编译内核lib驱动及应用层dll的source文件
- C++:多维数组的动态分配(new)和释放(delete)
- jfreechart设置字体
- andriod应用市场源码发布【第一天】
- Linux驱动程序设计之二---Linux字符驱动程序(上)
- 架构初级积累一
- 读《Boost程序库完全开发指南》
- 动态添加——例如js标签到head中
- 铁道部12306后台技术框架、完整异常栈信息以及技术缺点和漏洞 .