驅動層的一些策略性代碼,算法性代碼,和
驅動內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