windows内核开发笔记七:内核开发OVERLAPPED结构体详解
windows内核开发笔记七:内核开发OVERLAPPED结构体详解
typedef struct _OVERLAPPED {
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
HANDLE hEvent;
} OVERLAPPED
Internal: 预留给操作系统使用。它指定一个独立于系统的状态,当GetOverlappedResult函数返回时没有设置扩展错误信息ERROR_IO_PENDING时有效。
InternalHigh: 预留给操作系统使用。它指定长度的数据转移,当GetOverlappedResult函数返回TRUE时有效。
Offset: 该文件的位置是从文件起始处的字节偏移量。调用进程设置这个成员之前调用ReadFile或WriteFile函数。当读取或写入命名管道和通信设备时这个成员被忽略设为零。
OffsetHigh: 指定文件传送的字节偏移量的高位字。当读取或写入命名管道和通信设备时这个成员被忽略设为零。
hEvent: 在转移完成时处理一个事件设置为有信号状态。调用进程集这个成员在调用ReadFile、 WriteFile、TransactNamedPipe、 ConnectNamedPipe函数之前。
作用:
设备处理必然让主程序停下来干等I/O的完成,解决这个问题,可以使用OVERLAPPED。
OVERLAPPED I/O是WIN32的一项技术, 可以用来要求操作系统传送数据,并且在传送完毕时通知传送者。这项技术使程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来I/O完成OVERLAPPED I/O。你可以获得线程的所有利益,而不需付出什么痛苦的代价。也就是说,OVERLAPPED主要是设置异步I/O操作,异步I/O操作是指应用程序可以在后台读或者写数据,而在前台做其他事情。
OVERLAPPED结构主要在一些重叠IO等异步操作中起作用。下面就是其应用的场景:
即:你需要操作系统传递一批数据,于是填了一个overlapped的订单,订单上写着从哪里(数据的偏移位置)开始传输,于是你去干别的事去了。系统完成传输就打个电话(激活hEvent)叫你验收,你看到overlapped订单上系统写着的传输的数据数量验收接收的数据。
以上是一个经典的例子,你需要作更多的实验熟悉它,如:用重叠IO读取文件或完成端口。记住运用多线程。
windows内核开发笔记七:内核开发OVERLAPPED结构体详解相关推荐
- 串口之OVERLAPPED结构体详解
typedef struct _OVERLAPPED { DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; ...
- 大数据开发笔记(四):Hive分区详解
✨大数据开发笔记推荐: 大数据开发面试知识点总结_GoAI的博客-CSDN博客_大数据开发面试本文详细介绍大数据hadoop生态圈各部分知识,包括不限于hdfs.yarn.mapreduce.h ...
- Android开发笔记(3) 应用程序之间内容分享详解
PS:改变文章标题只为更加详细说明功能和排版,以方便日后复习.这两篇文章已经写得很详细 Android 应用程序之间内容分享详解(一) 转载请注明地址:http://blog.csdn.net/xia ...
- linux中c语言结构体详解,Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- qml开发笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
- 微信公众号Java开发-笔记02【开发接入准备、开发接入】
学习视频网址:哔哩哔哩网站 微信公众号开发-Java版 [P01-P02]微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] [P03-P04]微信公众号Java开发-笔记02[开发接入 ...
- [安卓开发笔记一]Android开发配置opencv环境超详细教程
[安卓开发笔记一]Android开发配置opencv环境超详细教程 [更新于 2022年4月] 再次提醒,建议现在看到这篇文章的,仅仅把此文做一个流程参考,4年前android studio就使用cm ...
- Windows进程与线程学习笔记(一)—— 进程结构体
Windows进程与线程学习笔记(一)-- 进程结构体 进程结构体 EPROCESS +0x000 Pcb : _KPROCESS +0x1b0 Peb : Ptr32 _PEB 练习 解题步骤 第一 ...
- iOS开发——使用Charles进行https网络抓包详解
我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们 ...
最新文章
- c语言程序中变量先引用声明,C语言如何跨文件调用函数定义中声明的变量
- SMRT single molecular real time Sequencing
- java. 算法分析,Java常用算法分析
- SystemCenter2012SP1实践(27)VMM和HyperV的PowerShell
- 电脑快捷键横屏变竖屏,电脑显示器竖屏横屏来回切换怎么设置
- 【Scratch】青少年蓝桥杯_每日一题_4.01_踢足球
- QTextStream 的简单理解
- Git 企业中常用分支管理策略
- SQL Server 行列转换(1)
- Java 线程状态之 TIMED_WAITING
- 线程池的简单创建和实现
- CSS属性选择器温故-4
- 利用filter替换字符串中的空格
- Leetcode每日一题:861.score-after-flipping-matrix(反转矩阵后的得分)
- JVM监控及诊断工具命令行篇之jstatd
- jquery进度条组件
- 一句话详解常见的心理学效应
- 微博三方登录账号注册
- excel图片 html,微商相册生成EXCEL表格中将原图按HTML格式显示的实例
- 【热门】2004年十大网络流行语征集ing
热门文章
- node.js 中Mysql 查询报错 ,解决方法。
- js实现数据量换算问题
- Android 属性动画 原理 和 使用(Kotlin)
- 世界杯 -- 战术玩的都是心脏<宝藏文> — — 小黑日常超细详解
- Xiaojie雷达之路---拉伸信号处理
- Generative Models(生成模型)简介
- 数据库慢查询监控配置
- Intel Skylake (Client) 架构/微架构/流水线 (3) - 乱序执行引擎
- php+strncmp+绕过,PHP strncmp函数
- 前端——给button制作一个简单的爱心特效(2)