Windows内核函数 - 文件的读操作

        DDK提供了文件读操作的内核函数,其函数声明如下:

NTSTATUS ZwWriteFile(IN HANDLE FileHandle,IN HANDLE Event,IN PIO_APC_ROUTINE ApcRoutine,IN PVOID ApcContext,out PIO_STATUS_BLOCK IoStatusBlock,IN PVOID Buffer,IN ULONG Length,IN PLARGE_INTEGER ByteOffset,IN PULONG Key);
// FileHandle: 文件打开的句柄。
// Event: 很少用到,一般设置为NULL。
// ApcRoutine: 很少用到,一般设置为NULL。
// ApcContext: 很少用到,一般设置为NULL。
// IoStatusBlock: 记录写操作的状态。其中IoStatusBlock.Infomation记录实际写了多少字节
// Buffer: 从这个缓冲区开始从文件里读。
// Length: 准备写多少字节。
// ByteOffset: 从文件的多少偏移地址开始写。
// Key: 很少用到,一般设置为NULL。

        下面的代码演示了如何在驱动程序中读文件。如果是读取整个文件,需要知道文件的大小,该功能可以通过内核函数ZwWueryInformationFile来实现。

        下面的代码演示了如何在驱动程序中读取文件。

#define BUFFER_SIZE 1024OBJECT_ATTRIBUTES  objectAttri;IO_STATUS_BLOCK iostatus;HANDLE hfile;UNICODE_STRING logFileUnicodeStr;// 初始化 UNICODE_STRING 字符串RtlInitUnicodeString(&logFileUnicodeStr, L"\\?\\C:\\1.LOG");// 或者写成 “\\Device\\HarddiskVolume1\\1.LOG”// 初始化 objectAttriInitializeObjectAttributes(&objectAttri,&logFileUnicodeStr,OBJ_CASE_INSENSITIVE,NULL,NULL);// 创建文件NTSTATUS ntStatus = ZwCreateFile(&hfile,GENERIC_WRITE,&objectAttri,&iostatus,NULL,FILE_ATTRIBUTE_NORMAL,FILE_SHARE_READ,FILE_OPEN, // 即使存在该文件,也创建FILE_SYNCHRONOUS_IO_NONALERT,NULL,0);if (!NT_SUCCESS(ntStatus)){KdPrint(("The file is not exist\n"));return;}FILE_STANDARD_INFORMATION fsi;// 读取文件长度ntStatus = ZwQueryInformationFile(hfile,&iostatus,  &fsi,sizeof(FILE_STANDARD_INFORMATION),FileStandardInformation);KdPrint(("The program want to read %d bytes\n", fsi.EndOfFile.QuadPart));// 为读取的文件分配缓冲区PUCHAR pBuffer = (PUCHAR)ExAllocatePool(PagedPool,(LONG)fsi.EndOfFile.QuadPart);// 读取文件ZwReadFile(hfile, NULL,NULL, NULL,&iostatus,pBuffer,(LONG)fsi.EndOfFile.QuadPart,NULL, NULL);KdPrint(("The program really read %d bytes\n", iostatus.Information));// 关闭文件句柄ZwClose(hfile);// 释放缓冲区ExFreePool(pBuffer);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 执行node报错 800A1391

在项目下执行node -v的时候,抛了这个错误,一开始没发现有啥问题 现在一看,这个报错里的node怎么是个文件... 出现这个问题,是因为项目下,有个同名的文件叫node.js,搞得windows一时不知道是想打开node.js文…

代码随想录算法训练营Day51 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

代码随想录算法训练营Day51 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 LeetCode 300.最长递增子序列 题目链接:LeetCode 300.最长递增子序列 思路: 选取最长子序列,并收集 class Solution { public:int lengthOfL…

通过提示工程将化学知识整合到大型语言模型中

在当今快速发展的人工智能领域,大型语言模型(LLMs)正成为科学研究的新兴工具。这些模型以其卓越的语言处理能力和零样本推理而闻名,为解决传统科学问题提供了全新的途径。然而,LLMs在特定科学领域的应用面临挑战&#…

第四十六天 | 279.完全平方数 139.单词拆分

题目:279.完全平方数 本题比较简单,几天没做背包但是这道题很快ac了 尝试解答: 题目类型:给定一个背包容量,求装满背包的最少物品数,且每个物品可以放多次,完全背包 1.dp[j]数组含义&#xff…

如何选择适合自己需求的扬州独立服务器方案?

在互联网时代,独立服务器是网络建设的重要组成部分。选择适合自己需求的扬州独立服务器方案至关重要。下面,我们将介绍如何选择合适的扬州独立服务器,并推荐莱卡云(Lcayun)服务器商。 明确需求 要明确自己的需求是什…

大型央企国企信创化与数字化转型规划实施方案(71页PPT)

方案介绍: 随着全球信息技术的迅猛发展,数字化转型已成为企业提升竞争力、实现可持续发展的必经之路。作为国家经济的重要支柱,大型央企国企在信创化与数字化转型方面承载着重要的责任和使命。本方案旨在通过系统性的规划和实施,…

rpc理解

rpc 远程过程调用 rpc与http的区别 1.性能高 2.使用复杂 3.可扩展性高 4 跨语言支持 5.可以使用服务发现,负载均衡,熔断降级 rpc远程调用,必须传输数据,需要序列化。 序列化有多种方式: jdk原生序列化&#xff0c…

Discourse 使用 DiscourseConnect 来进行用户数据同步

我们都知道 Discourse 的用户管理和设置都高度依赖电子邮件。 如果 Discourse 没有设置电子邮件 SMTP 的话,作为管理员是没有办法对用户邮箱进行修改并且通过验证的。 可以采取的办法是通过 Discourse 的 DiscourseConnect 来进行用户同步。 根据官方的说法&…

C++语法|虚函数与多态详细讲解(四)|哪些函数不能实现成虚函数和虚析构函数的理解

系列汇总讲解,请移步: C语法|虚函数与多态详细讲解系列(包含多重继承内容) 文章目录 哪些函数不能成为虚函数虚析构函数什么时候把基类的析构函数必须是线程虚函数 哪些函数不能成为虚函数 要回答这个问题&#xff0c…

如何取消公众号的在线客服绑定授权

1,功能设置 2,公众号设置 3,查看详情,取消

开发远程遥控情趣玩具软件,提供现成程序源码应具备哪些基础功能

以“东莞梦情智能”为参考,其提供的现成情趣玩具遥控软件程序源码,所具备哪些基础功能,看看它们如何让情趣玩具变得更加丰富多彩。 一、设备连接 设备连接是情趣玩具遥控软件的基础功能之一。“东莞梦情智能”的现成源码支持多种连接方式&am…

leetcode题目42

接雨水 困难 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1…

mysql中text,longtext,mediumtext区别

文章目录 一.概览二、字节限制不同三、I/O 不同四、行迁移不同 一.概览 在 MySQL 中,text、mediumtext 和 longtext 都是用来存储大量文本数据的数据类型。 TEXT:TEXT 数据类型可以用来存储最大长度为 65,535(2^16-1)个字符的文本数据。如果存储的数据…

开源VS闭源:谁更能推动AI技术的普及与发展?

一、引言 在人工智能(AI)技术的浪潮中,开源与闭源两种模式一直并存,并各自在推动AI技术普及与发展上发挥着重要作用。然而,关于哪种模式更能有效地推动AI技术的普及与发展,一直存在着激烈的讨论。本文将深…

Bitmap 的基本原理

Bitmap 是一种用于表示数据的高效方法,特别适合在需要表示大量布尔值(true 或 false)的情况下使用。它的原理是使用二进制位来表示每一个布尔值,节省了存储空间和操作时间。 Bitmap 的基本原理 想象一下,你有一个很长…

树莓派指令

1.常用指令 2.在终端窗口编辑文本文件 2.1nano编辑器 在文本里ctrlG就可以查看更多的快捷按键 2.2vi编辑器 进入默认为命令模式

Python2没有模板字符串用法吗?

Python2中也有模板字符串的使用方式,使用的是string.Template模块,可以通过构造一个Template对象来实现。不过在Python3中,模板字符串被引入为一种更加方便的语法,直接在字符串中使用大括号{}来表示占位符,可以更加简洁…

百川股份:大王蹲完,小王蹲

一根大阴线,正丹股份的十倍股传奇之旅即将落幕? 有股民表示:化工板块还有高手,大王倒了还有小王。 今天我们聊的正是化工板块被称为“正丹第二”的百川股份。 虽难比正丹的十倍涨幅,但百川也不简单,3个月…

视频号小店是怎么操作的?适用于所有人的操作玩法!

大家好,我是电商小V 视频号小店是怎么操作的呢?这是刚开始去做,或者是刚了解的小伙伴最疑惑的问题, 视频号小店是22年推出的,也是目前最火的一个创业型项目,也是吸引了不少的商家入驻,今天咱们就…

微服务架构的优势 与 不足

优势 微服务架构是一种将应用程序作为一套小服务的集合来开发和部署的方法,每个服务运行在其独立的进程中,并通常围绕业务能力组织。服务之间通过定义良好的API进行通信。微服务架构的优势包括: 1. 独立部署 每个微服务可以独立部署到生产…