VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 129|回复: 6

[分享] 今日一贴!驱动环境下的文件创建

[复制链接]
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-2-26 19:19:37 | 显示全部楼层 |阅读模式
#include "ntddk.h"
//驱动入门而已,只是入门

游客,如果您要查看本帖隐藏内容请回复



NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING theRegistryPath)
{
        HANDLE hFile = NULL;//定义一个通用句柄,用来保存在ZwCreateFile的第一个参数


        IO_STATUS_BLOCK ioStatus;//是请求被处理的状态,IRP结构体中的IO状态结构,是用来只是下一个被提起的请求的最终状态
        //该结构成员在CreateFile的第十个参数4中需要指向一个该结构的成员
        OBJECT_ATTRIBUTES object_attributes;
        NTSTATUS ntStatus;//是一个32位无符号长整形,驱动程序中哟用来检车返回的状态
        OBJECT_ATTRIBUTES oa;//定义了一个OBJECT_ATTRIBUTES结构成员变量 使用InitializeObjectAttributes将该成员初始化
        //该结构是一个不透明的OBJECT_ATTRIBUTES结构该结构将对象句柄的属性指定给打开句柄的例程。‎
        UNICODE_STRING ustr;
        RtlInitUnicodeString(&ustr, L"\\??\\C:\\TEST.LOG");
        InitializeObjectAttributes(
                &oa,//初始化一个指向OBJECT_ATTRIBUTES的结构成员,该结构是一个不透明的结构
                &ustr,//指向一个UNICODE-string的缓冲区,该缓冲区可是一个对象名称或者路径
                OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,//设置初始化的对象属性,为内核句柄,
                NULL,//句柄  我们这里不关系设置为空
                NULL//安全描述符  我们也设置为空
                );


        ntStatus = ZwCreateFile(//创建一个文件或者打开一个文件以及设备
                &hFile,//指向文件的句柄或者设备
                GENERIC_READ | GENERIC_WRITE,//指向该对象的权限可以设置为读写
                &oa,//该参数指向一个OBJECT_ATTRIBUTES的结构体指针
                &ioStatus,//指向一个IO_STATUS_BLOCK结构体的指针,用于接收请求操作的后完成状态,和其他的信息;
                NULL,//,只想一个LARGE_INTEGER的指针,该指针包含了初始分配的内存大小,以字节为单位,他用于当一个被创建或者被覆盖
                //重写时,如果ALLOCATIONSIZE为NULL是,那么不指定一个分配的大小,如果没有文件被创建,此参数可以为NULL
                //一般我们设置为NULL
                FILE_ATTRIBUTE_NORMAL,//指定一个或多个FILE-attributes_XXX的标志,用于创建或者重写文件时设置的文件属性
                //调用者一般指定该值为FILE_ATTRIBUTE_NORMAL的默认属性
                FILE_SHARE_READ,//指向 共享访问的类型这里我们填写的是读文件该值可以是多个组合的值
                /*ShareAccess flag
                允许其他线程做的事情
                FILE_SHARE_READ
                读文件
                FILE_SHARE_WRITE
                写文件
                FILE_SHARE_DELETE*/
                FILE_OPEN_IF,//指定的文件存在或者不存在时所作的操作,CreateDisposition 可以是一下任意的值或者组合
                /*
                CreateDisposition value
                文件存在时的操作
                文件不存在时的操作
                FILE_SUPERSEDE
                替换文件
                创建文件
                FILE_CREATE
                返回一个错误
                创建文件
                FILE_OPEN
                打开文件
                返回一个错误
                FILE_OPEN_IF
                打开文件
                创建文件
                FILE_OVERWRITE
                打开文件并重写
                返回错误
                FILE_OVERWRITE_IF
                打开文件并重写
                创建文件
                */

                FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS | FILE_SYNCHRONOUS_IO_NONALERT,//指定驱动创建或者打开文件时需要的应用选项
                //可以是多个的组合值
                NULL,//设备和中间层驱动,该参数必须设置为NULL
                0//   设备和中间驱动程序必须设置为此参数为0
                );//ZwCreateFile 成功时返回 STATUS_SUCCESS ,失败时返回一个合适的NTSTATUS 错误码。在后面一情况中可以通过IoStatusBlock 参数的值检查错误原因。
       
        ntStatus = ZwWriteFile(//函数功能将历程数据写入打开的文件
                hFile,//文件对象的句柄,该句柄可以通过NTCreateFile或者NTopenFile获得句柄
                NULL,//设置写入完成操作后的状态的事件对象句柄,设备和中间驱动程序应将此参数设置为NULL
                NULL,//此参数为系统保留的参数设备和中间驱动程序必须社会设置为NULL
                NULL,//此参数是系统保留为,设备和驱动程序必须设置为NULL
                &ioStatus,//指向最终接受完成状态和有关请求写入操作的信息的IOSTATUS_BLOCK结构,信息成员接受的事件写入文件的字数
                ustr.Buffer,//只想一个我们缓冲区的指针,该缓冲区包含需要写入的文件数据改文件数据在        RtlInitUnicodeString(&ustr,L"\\??\\C:\\TEST.LOG");被初始化进去
                ustr.Length,//指向缓冲区的大小以字节为单位
                NULL,//指向变量的指针,这里我们设置为NULL
                NULL);//设备和中间驱动程序应当设置为NULL
        ZwClose(hFile);//关闭文件句柄
        //---------------------------------------------------------------
        pDriverObject->DriverUnload = UnDevice;//卸载例程

        return STATUS_SUCCESS;//返回状态,该状态是32位的无符号长整形,驱动程序中用该宏来确定返回的结果NT_SUCCESS来确定返回的结果
}

评分

参与人数 3威望 +2 驿站币 +5 热心值 +5 收起 理由
82_avatar_small love_cctry + 1 + 1 一起学习驱动开发!
01_avatar_small admin + 2 + 2 + 2 赞一个!
58_avatar_small thzzl + 2 + 2 很给力!

查看全部评分





上一篇:今日一贴,驱动笔记-下的创建文件(详细注释)
下一篇:今日一贴!内核下结束其它进程!
58_avatar_middle
最佳答案
31 
online_vip 发表于 2020-2-26 20:00:47 | 显示全部楼层
支持老铁今日一贴!驱动环境下的文件创建
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2020-2-26 20:50:37 | 显示全部楼层
01_avatar_middle
最佳答案
35 
online_admins 发表于 2020-2-26 22:27:56 | 显示全部楼层
楼主这注释很详细啊,小白估计都能看懂今日一贴!驱动环境下的文件创建
82_avatar_middle
最佳答案
14 
在线会员 发表于 2020-2-26 22:30:16 | 显示全部楼层
最近正好也在研究驱动这块,支持斑竹,跟着一起学习,整理的资料确实不错!
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2020-2-26 23:48:56 | 显示全部楼层
admin 发表于 2020-2-26 22:27
楼主这注释很详细啊,小白估计都能看懂

闲得慌,总的为论坛做点贡献啊,不然以后说话都不硬气了
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2020-2-26 23:49:11 | 显示全部楼层
love_cctry 发表于 2020-2-26 22:30
最近正好也在研究驱动这块,支持斑竹,跟着一起学习,整理的资料确实不错!

有空一起交流啊  ,
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-5-28 08:02

Powered by CcTry.CoM

© 2009-2020 cctry.com

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