马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
上一篇我们讲了一个简单的hello world驱动小程序、并成功加载看到了效果、这一篇我们来分析一下、
上一篇中我们写了三个小文件、用到了2个小工具、
三个小文件分别是hello.c、makefile、source、
两个小工具分别是InstDrv、DbgView、
先说hello.c、这里存放的是我们写的驱动代码、代码如下:#include <ntddk.h>
VOID DriverUnload(PDRIVER_OBJECT driver) {
DbgPrint("our driver is unloading...");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath) {
DbgPrint("hello world!");
driver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
第一行是头文件、和C/C++头文件一样、想深入了解的朋友去搜索一下、
接下来是DriverEntry、驱动函数的入口、和main函数差不多、
NTSTATUS是一个状态类型、我们最后返回的是STATUS_SUCCESS、表示成功的运行了这个函数、还有其他状态类型、后面再讲、
DbgPrint类似printf函数、表示打印调试信息、相关的还有KdPrint、是一个宏定义、后面再讲、
DriverUnload是一个回调函数、函数名称可以自定义、在驱动卸载的时候调用、
其实也没有什么内容、简单的了解一下就行、
makefile没什么好说的、系统下的makefile文件都差不多、也不需要改动、
sources文件是告诉编译器要编译那些文件、代码如下:TARGETNAME = hello
TARGETTYPE = DRIVER
SOURCES = hello.c
TARGETNAME表示编译出来的驱动模块的名字
TARGETTYPE表示编译的模块类型
SOURCES表示要编译的源文件
驱动加载器InstDrv用于加载和卸载驱动、用SCM服务管理控制实现、网上有许多源码、
DbgView是一个小工具、可以显示内核的一些调试信息、
上一篇我们用的32位的系统、接下讲一下在64位下如何加载驱动、
win7 x64以上的系统要求驱动模块必须有自己的数字签名、所以我们要禁止这个功能、网上提供了很多方法、比如修改注册表项、但是有的系统没有这个项、比较简单的方法是开机的时候F8用禁止驱动数字签名的模式启动、
下一篇介绍一下PatchGuard、讲一些理论的东西、 |