什么是内核驱动对象
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要讲解了"什么是内核驱动对象",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是内核驱动对象"吧!驱动对象讲解1.1 结构1.2 输出代码输
千家信息网最后更新 2025年01月19日什么是内核驱动对象
这篇文章主要讲解了"什么是内核驱动对象",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"什么是内核驱动对象"吧!
驱动对象讲解
1.1 结构
1.2 输出代码输出基本的驱动对象信息
1.3 结果
驱动对象讲解
一丶驱动对象
1.1 结构
在内核中. 每一个驱动模块都是一个驱动对象. 都有一个 DRIVER_OBJECT结构体代表. 可以想象成驱动对象是一个进程容器. 容纳百川.
下面针对驱动对象做一下简单的成员输出.以熟悉驱动对象.
驱动对象结构如下:
typedef struct _DRIVER_OBJECT {CSHORT Type;CSHORT Size;//// The following links all of the devices created by a single driver// together on a list, and the Flags word provides an extensible flag// location for driver objects.//PDEVICE_OBJECT DeviceObject;ULONG Flags;//// The following section describes where the driver is loaded. The count// field is used to count the number of times the driver has had its// registered reinitialization routine invoked.//PVOID DriverStart; //驱动对象的起始地址ULONG DriverSize; //驱动对象的大小PVOID DriverSection; //驱动对象结构.可以解析为_LDR_DATA_TABLE_ENTRY 是一个链表存储着下一个驱动对象 PDRIVER_EXTENSION DriverExtension; //驱动的扩展信息.可以自定义存放我们的数据 //// The driver name field is used by the error log thread// determine the name of the driver that an I/O request is/was bound.//UNICODE_STRING DriverName; //驱动对象的名字//// The following section is for registry support. This is a pointer// to the path to the hardware information in the registry//PUNICODE_STRING HardwareDatabase;//// The following section contains the optional pointer to an array of// alternate entry points to a driver for "fast I/O" support. Fast I/O// is performed by invoking the driver routine directly with separate// parameters, rather than using the standard IRP call mechanism. Note// that these functions may only be used for synchronous I/O, and when// the file is cached.//PFAST_IO_DISPATCH FastIoDispatch;PDRIVER_INITIALIZE DriverInit;PDRIVER_STARTIO DriverStartIo;PDRIVER_UNLOAD DriverUnload; //驱动对象的卸载地址PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];} DRIVER_OBJECT;typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
1.2 输出代码输出基本的驱动对象信息
#includeVOID MyDriverUnLoad( _In_ struct _DRIVER_OBJECT* DriverObject){ DbgPrint("驱动卸载了\r\n");}extern "C" NTSTATUS DriverEntry( _In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath){ ULONG64 uImage = 0; DriverObject->DriverUnload = MyDriverUnLoad; DbgPrint("驱动加载了开始打印输出\r\n"); DbgPrint("驱动名字 = %wZ \r\n", DriverObject->DriverName); DbgPrint("驱动起始地址 %x 大小 %x 结束地址 %x\r\n", DriverObject->DriverStart, DriverObject->DriverSize, uImage = ((ULONG64)DriverObject->DriverStart + DriverObject->DriverSize)); DbgPrint("驱动对象的卸载地址 = %p\r\n", DriverObject->DriverUnload); //输出驱动对象的所有回调地址. DbgPrint("驱动对象的IoControl回调地址 = %p\r\n", DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]); DbgPrint("驱动对象的读回调地址 = %p\r\n",DriverObject->MajorFunction[IRP_MJ_READ]); DbgPrint("驱动对象的写回调地址 = %p\r\n",DriverObject->MajorFunction[IRP_MJ_WRITE]); DbgPrint("驱动对象的创建回调地址 = %p\r\n",DriverObject->MajorFunction[IRP_MJ_CREATE]); DbgPrint("驱动对象的关闭回调地址 = %p\r\n",DriverObject->MajorFunction[IRP_MJ_CLOSE]); DbgPrint("-------遍历回调输出------------\r\n"); //宏从DrverObject对象中查找for (auto i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) { DbgPrint("回调的IRP_MJ 调用号 = %d 回调函数地址 = %p \r\n", i, DriverObject->MajorFunction[i]); } DbgPrint("执行所有功能完毕"); return STATUS_SUCCESS;}
1.3 结果
感谢各位的阅读,以上就是"什么是内核驱动对象"的内容了,经过本文的学习后,相信大家对什么是内核驱动对象这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
驱动
对象
地址
输出
内核
结构
信息
学习
代码
内容
名字
大小
结果
起始
代表
功能
容器
就是
思路
情况
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库李辉课后答案
全国考研院校专业数据库网站排名
国产数据库梦达如何还原
软件开发发展状况
宁波网络技术咨询价格
数据库实例由哪一项构成
学校网络安全专门管理机构
智慧水务网络安全配置
角鹰互联网科技公司
采用什么技术保障网络安全
境外域名服务器
计算机网络技术七班班徽
后端开发数据库设计流程
华为网络技术工程师招聘要求
程序数据库接口
分布式数据库考博试题
二级数据库程序设计
中邮软件开发
广东软件开发有哪些网站
怀旧服服务器的刷新点
江苏软件开发怎么报价
服务器网络端口设置命令
搭建内外网穿透服务器
暗黑二都有什么服务器
东城区一站式网络技术诚信服务
佰威网络技术北京
网络安全制度建设总结
软件开发行业市盈率
工业互联网新基建网络安全科技
湘西软件开发专业职校