lx_Zz 发表于 2016-8-11 14:39:22

【第3篇】分析hello world

        上一篇我们讲了一个简单的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、讲一些理论的东西、

大天使 发表于 2016-8-11 14:48:31

驱动,好高深

三月梨花开 发表于 2018-2-1 10:59:21

支持一下{:5_91:}

谁便吧 发表于 2018-2-9 16:34:41

楼主好厉害
页: [1]
查看完整版本: 【第3篇】分析hello world