当前位置: 首页 > news >正文

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 数据和配置的目录&#xff1…...

原来CDC数据同步可以这么简单,零代码可视化一键数据同步

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

Ubuntu环境使用 Whisper 与 ZhipuAI 实现本地批量视频转录与文本标点复原(本地亲测可用)

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

SPI机制

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

生信分析流程:从数据准备到结果解释的完整指南

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

golang语法

参考链接&#xff1a;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】多群组搭建

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

深度解读:路由交换、负载均衡与防火墙的网络交响

一、路由交换&#xff1a;网络流动的“大动脉” 1. 路由&#xff1a;决定命运的“路径规划师” 路由技术如同现代交通网络中的导航系统&#xff0c;决定了数据从起点到终点的最佳路径。路由器基于网络层IP地址&#xff0c;对每个数据包进行精确的路径选择&#xff0c;并确保其…...

linux线程 | 线程的控制(二)

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

npm install报错一堆sass gyp ERR!

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

微知-BlueField DPU在lspci中显示Flash Recovery是什么意思?

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

【前端知识点】前端笔记

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

Sping Cache 使用详解

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

动手学深度学习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():"""载入“英语&#xff0d;法语”数据集"&qu…...

Python网络爬虫技术

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

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...