2.1.ReactOS源码分析ReadFile函数分解
2.1.ReactOS源码分析ReadFile函数分解
2.1.ReactOS源码分析ReadFile函数分解
文章目录
- 2.1.ReactOS源码分析ReadFile函数分解
- ReadFile函数的分析
- ReadFile函数的声明
- ReadFile函数的核心代码
ReadFile函数的分析
BOOL WINAPI ReadFile(HANDLE,PVOID,DWORD,PDWORD,LPOVERLAPPED);
ReadFile函数的声明
BOOL STDCALL
ReadFile(IN HANDLE hFile,IN LPVOID lpBuffer,IN DWORD nNumberOfBytesToRead,OUT LPDWORD lpNumberOfBytesRead OPTIONAL,IN LPOVERLAPPED lpOverlapped OPTIONAL)
{NTSTATUS Status;DPRINT("ReadFile(hFile %x)\n", hFile);if (lpNumberOfBytesRead != NULL){*lpNumberOfBytesRead = 0;}if (IsConsoleHandle(hFile)){return ReadConsoleA(hFile,lpBuffer,nNumberOfBytesToRead,lpNumberOfBytesRead,NULL);}if (lpOverlapped != NULL){LARGE_INTEGER Offset;PVOID ApcContext;Offset.u.LowPart = lpOverlapped->Offset;Offset.u.HighPart = lpOverlapped->OffsetHigh;lpOverlapped->Internal = STATUS_PENDING;ApcContext = (((ULONG_PTR)lpOverlapped->hEvent & 0x1) ? NULL : lpOverlapped);Status = NtReadFile(hFile,lpOverlapped->hEvent,NULL,ApcContext,(PIO_STATUS_BLOCK)lpOverlapped,lpBuffer,nNumberOfBytesToRead,&Offset,NULL);/* return FALSE in case of failure and pending operations! */if (!NT_SUCCESS(Status) || Status == STATUS_PENDING){if (Status == STATUS_END_OF_FILE &&lpNumberOfBytesRead != NULL){*lpNumberOfBytesRead = 0;}SetLastErrorByStatus(Status);return FALSE;}if (lpNumberOfBytesRead != NULL){*lpNumberOfBytesRead = lpOverlapped->InternalHigh;}}else{IO_STATUS_BLOCK Iosb;Status = NtReadFile(hFile,NULL,NULL,NULL,&Iosb,lpBuffer,nNumberOfBytesToRead,NULL,NULL);/* wait in case operation is pending */if (Status == STATUS_PENDING){Status = NtWaitForSingleObject(hFile,FALSE,NULL);if (NT_SUCCESS(Status)){Status = Iosb.Status;}}if (Status == STATUS_END_OF_FILE){/* lpNumberOfBytesRead must not be NULL here, in fact Win doesn'tcheck that case either and crashes (only after the operationcompleted) */*lpNumberOfBytesRead = 0;return TRUE;}if (NT_SUCCESS(Status)){/* lpNumberOfBytesRead must not be NULL here, in fact Win doesn'tcheck that case either and crashes (only after the operationcompleted) */*lpNumberOfBytesRead = Iosb.Information;}else{SetLastErrorByStatus(Status);return FALSE;}}DPRINT("ReadFile() succeeded\n");return TRUE;
}
ReadFile函数的核心代码
BOOL STDCALL
ReadFile(IN HANDLE hFile,IN LPVOID lpBuffer,IN DWORD nNumberOfBytesToRead,OUT LPDWORD lpNumberOfBytesRead OPTIONAL,IN LPOVERLAPPED lpOverlapped OPTIONAL)
{NTSTATUS Status;// ...Status = NtReadFile(hFile,NULL,NULL,NULL,&Iosb,lpBuffer,nNumberOfBytesToRead,NULL,NULL);//...return TRUE;
}
1,ReadFile函数的分析,转变为对函数NtReadFile函数的分析。
NtReadFile函数的分析请看本专栏NtReadFile函数的分析
相关文章:

2.1.ReactOS源码分析ReadFile函数分解
2.1.ReactOS源码分析ReadFile函数分解 2.1.ReactOS源码分析ReadFile函数分解 文章目录 2.1.ReactOS源码分析ReadFile函数分解ReadFile函数的分析ReadFile函数的声明ReadFile函数的核心代码 ReadFile函数的分析 BOOL WINAPI ReadFile(HANDLE,PVOID,DWORD,PDWORD,LPOVERLAPPED)…...

Gridview配置数据源--信任服务器证书
目录 背景过程Gridview配置数据源GridView与数据源:数据库连接与安全:信任服务器证书:配置信任服务器证书:注意事项: 生成连接字符串程序运行报错问题解决 总结 背景 Gridview配置数据源之后,程序报错 过…...

【Next.js 入门教程系列】08-发送邮件
原文链接 CSDN 的排版/样式可能有问题,去我的博客查看原文系列吧,觉得有用的话, 给我的库点个star,关注一下吧 上一篇【Next.js 入门教程系列】07-身份验证 发送邮件 Setting Up React Email React Email 是一个高效便捷的 E…...

Echarts合集更更更之树图
实现效果 写在最后🍒 源码,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云...

线性代数 行列式
一、行列式 1、定义 一个数学概念,主要用于 线性代数中,它是一个可以从方阵(即行数和列数相等的矩阵)形成的一个标量(即一个单一的数值) 2、二阶行列式 ,像这样将一个式子收缩称为一个 2*2 的…...

Ubuntu 通过 Docker 搭建 GitLab
准备工作 1.)更新软件。确保你的系统是最新 sudo apt update sudo apt upgrade -y 2.)安装 Docker 和 Docker Compose。 参考:Ubuntu 上安装 Docker-CSDN博客 1. 创建 GitLab 目录 创建一个用于存储 GitLab 数据和配置的目录࿱…...

原来CDC数据同步可以这么简单,零代码可视化一键数据同步
当前企业实时同步与分析场景中面临的挑战: 随着业务发展需要,实时分析成为企业目前的强需求,成为支撑企业业务发展的必须项。 一般来说,要满足数据实时分析的诉求,通常有两种方案: 第一种是直接使用源端…...

Ubuntu环境使用 Whisper 与 ZhipuAI 实现本地批量视频转录与文本标点复原(本地亲测可用)
使用 Whisper 与 ZhipuAI 实现批量视频转录与文本标点添加 在本篇博客中,我们将介绍一个实用的项目,帮助初学者了解如何使用 Whisper 和 ZhipuAI 的 API 来进行视频转录和文本处理。这个项目主要功能是将视频转录成文本,并利用大语言模型为转…...

SPI机制
一、SPI简介 SPI(Service Provider Interface)机制是一种服务发现机制,广泛用于Java生态中。它允许框架或库通过接口解耦具体实现,用户可以在运行时动态地提供接口的实现,而不是在编译时确定。这种机制在很多场景下非…...

生信分析流程:从数据准备到结果解释的完整指南
介绍 生物信息学(生信)分析是一个复杂的过程,涉及从数据准备到结果解释的多个步骤。随着高通量测序技术的发展和生物数据的迅猛增长,了解和掌握生信分析的标准流程变得尤为重要。这不仅有助于提高分析的准确性,还能优…...

golang语法
参考链接:https://www.runoob.com/go/ 创建变量 // 3种方法 var a int a : 10 // 类型推断 a : make() // 复合类型循环 // 3种循环 for i : 0; i < 10; i {// 循环体} // 传统for循环 for index, num : range nums {// 循环体} // nums是可迭代的复合类型…...

【fisco学习记录2】多群组搭建
说明 文档参考: 多群组部署 — FISCO BCOS 2.0 v2.11.0 文档 (fisco-bcos-documentation.readthedocs.io) 多群组搭建之前,先暂停之前的单群组,并删除: cd fisco bash nodes/127.0.0.1/stop_all.sh rm -rf nodes/ 实现图&…...

深度解读:路由交换、负载均衡与防火墙的网络交响
一、路由交换:网络流动的“大动脉” 1. 路由:决定命运的“路径规划师” 路由技术如同现代交通网络中的导航系统,决定了数据从起点到终点的最佳路径。路由器基于网络层IP地址,对每个数据包进行精确的路径选择,并确保其…...

linux线程 | 线程的控制(二)
前言: 本节内容是线程的控制部分的第二个小节。 主要是列出我们的线程控制部分的几个细节性问题以及我们的线程分离。这些都是需要大量的代码去进行实验的。所以, 准备好接受新知识的友友们请耐心观看。 现在开始我们的学习吧。 ps:本节内容适合了解线程…...

npm install报错一堆sass gyp ERR!
执行npm install ,出现一堆gyp含有sass错误的情况下。 解决办法: 首页可能是node版本问题,太高或者太低,也会导致npm install安装错误(不会自动生成node_modules文件),本次试验,刚开…...

微知-BlueField DPU在lspci中显示Flash Recovery是什么意思?
效果: lspci |grep BlueField10:00.0 Memory controller: Mellanox Technologies MT42822 Family [BlueField-2 SoC Flash Recovery] (rev 01)*原因: 表示此时flash是empty空的,或者在flash中的FW是无法工作的。比如烧录错误。 这里指的一提…...

【前端知识点】前端笔记
css 引入css文件的文件路径 <!-- 引入外部 CSS 文件 --> <!-- 当前文件所在文件夹目录 --> <link rel"stylesheet" href"./"> <!-- 当前文件所在父文件夹目录 --> <link rel"stylesheet" href"../">j…...

Sping Cache 使用详解
缓存是提升应用性能的常用手段。它通过将耗时的操作结果存储起来,下次请求可以直接从缓存中获取,从而避免重复计算或查询数据库,显著减少响应时间和服务器负载。Spring 框架提供了强大的缓存抽象 Spring Cache,它简化了缓存的使用…...

动手学深度学习60 机器翻译与数据集
1. 机器翻译与数据集 import os import torch from d2l import torch as d2l#save d2l.DATA_HUB[fra-eng] (d2l.DATA_URL fra-eng.zip,94646ad1522d915e7b0f9296181140edcf86a4f5)#save def read_data_nmt():"""载入“英语-法语”数据集"&qu…...

Python网络爬虫技术
Python网络爬虫技术详解 引言 网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定规则自动抓取互联网信息的程序或脚本。它们通过遍历网页链…...

黑马程序员-redis项目实践笔记1
目录 一、 基于Session实现登录 发送验证码 验证用户输入验证码 校验登录状态 Redis代替Session登录 发送验证码修改 验证用户输入验证码 登录拦截器的优化 二、 商铺查询缓存 缓存更新策略 数据库和缓存不一致解决方案 缓存更新策略的最佳实践方案 实现商铺缓…...

ES-入门聚合查询
url 请求地址 http://192.168.1.108:9200/shopping/_search {"aggs": { //聚合操作"price_group":{ //名称,随意起名"terms":{ //分组"field": "price" //分组字段}}} } 查询出来的结果是 查询结果中价格的平均值 {&q…...

七维大脑: 探索人类认知的未来之路
七维大脑: 探索人类认知的未来之路 随着科技的不断发展,人们对于大脑的认知也在不断扩展。近年来,科学家们提出了一个名为“七维大脑”的概念,试图通过七个维度来理解人类的认知过程。这个概念的提出,让人们开始思考&…...

spring |Spring Security安全框架 —— 认证流程实现
文章目录 开头简介环境搭建入门使用1、认证1、实体类2、Controller层3、Service层3.1、接口3.2、实现类3.3、实现类:UserDetailsServiceImpl 4、Mapper层3、自定义token认证filter 注意事项小结 开头 Spring Security 官方网址:Spring Security官网 开…...

Django+vue自动化测试平台---正式开源!!!
自动化测试:接口、Web UI 与 App 的全面探索 在此郑重声明:本文内容未经本人同意,不得随意转载。若有违者,必将追究其法律责任。同时,禁止对相关源码进行任何形式的售卖行为,本内容仅供学习使用。 Git 地…...

电子电气架构 --- 智能网联汽车未来是什么样子?
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...

docker安装elasticsearch(es)+kibana
目录 docker安装elasticsearch 一.准备工作 1.打开docker目录 2.创建elasticsearch目录 3.打开elasticsearch目录 4.拉取elasticsearch镜像 5.检查镜像 二.挂载目录 1.创建数据挂载目录 2.创建配置挂载目录 3.创建插件挂载目录 4.权限授权 三.编辑配置 1.打开con…...

大厂面试真题-说说redis的雪崩、击穿和穿透
缓存雪崩、击穿、穿透是缓存系统中常见的三种问题,它们都会对系统的性能和稳定性造成严重影响。以下是对这三种问题的详细解释以及相应的解决方案: 一、缓存雪崩 问题解释: 缓存雪崩指的是因为某些原因导致缓存中大量的数据同时失效或过期…...

【Spring】获取Cookie和Session(@CookieValue()和@SessionAttribute())
获取 Cookie 传统获取 Cookie 这是没有 Spring 的时候,用 Servlet 来获取(获取所有的 Cookie) Spring MVC 是基于 Servlet API 构建的原始 Web 框架,也是在 Servlet 的基础上实现的 RequestMapping("/getcookie") …...

【C++打怪之路Lv8】-- string类
🌈 个人主页:白子寰 🔥 分类专栏:重生之我在学Linux,C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持…...