鱼C论坛

 找回密码
 立即注册
查看: 3431|回复: 3

【第3篇】分析hello world

[复制链接]
发表于 2016-8-11 14:39:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
        上一篇我们讲了一个简单的hello world驱动小程序、并成功加载看到了效果、这一篇我们来分析一下、

上一篇中我们写了三个小文件、用到了2个小工具、
三个小文件分别是hello.c、makefile、source、
两个小工具分别是InstDrv、DbgView、

先说hello.c、这里存放的是我们写的驱动代码、代码如下:
  1. #include <ntddk.h>

  2. VOID DriverUnload(PDRIVER_OBJECT driver) {
  3.         DbgPrint("our driver is unloading...");
  4. }

  5. NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath) {
  6.         
  7.         DbgPrint("hello world!");

  8.         driver->DriverUnload = DriverUnload;

  9.         return STATUS_SUCCESS;
  10. }
复制代码

第一行是头文件、和C/C++头文件一样、想深入了解的朋友去搜索一下、
接下来是DriverEntry、驱动函数的入口、和main函数差不多、
NTSTATUS是一个状态类型、我们最后返回的是STATUS_SUCCESS、表示成功的运行了这个函数、还有其他状态类型、后面再讲、
DbgPrint类似printf函数、表示打印调试信息、相关的还有KdPrint、是一个宏定义、后面再讲、
DriverUnload是一个回调函数、函数名称可以自定义、在驱动卸载的时候调用、
其实也没有什么内容、简单的了解一下就行、

makefile没什么好说的、系统下的makefile文件都差不多、也不需要改动、

sources文件是告诉编译器要编译那些文件、代码如下:
  1. TARGETNAME = hello
  2. TARGETTYPE = DRIVER
  3. SOURCES = hello.c
复制代码

TARGETNAME表示编译出来的驱动模块的名字
TARGETTYPE表示编译的模块类型
SOURCES表示要编译的源文件


驱动加载器InstDrv用于加载和卸载驱动、用SCM服务管理控制实现、网上有许多源码、

DbgView是一个小工具、可以显示内核的一些调试信息、

上一篇我们用的32位的系统、接下讲一下在64位下如何加载驱动、

win7 x64以上的系统要求驱动模块必须有自己的数字签名、所以我们要禁止这个功能、网上提供了很多方法、比如修改注册表项、但是有的系统没有这个项、比较简单的方法是开机的时候F8用禁止驱动数字签名的模式启动、

下一篇介绍一下PatchGuard、讲一些理论的东西、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-8-11 14:48:31 | 显示全部楼层
驱动,好高深
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-1 10:59:21 | 显示全部楼层
支持一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 16:34:41 | 显示全部楼层
楼主好厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 22:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表