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结构体详解相关推荐

  1. 串口之OVERLAPPED结构体详解

    typedef struct _OVERLAPPED {  DWORD Internal;  DWORD InternalHigh;  DWORD Offset;  DWORD OffsetHigh; ...

  2. 大数据开发笔记(四):Hive分区详解

      ✨大数据开发笔记推荐: 大数据开发面试知识点总结_GoAI的博客-CSDN博客_大数据开发面试​本文详细介绍大数据hadoop生态圈各部分知识,包括不限于hdfs.yarn.mapreduce.h ...

  3. Android开发笔记(3) 应用程序之间内容分享详解

    PS:改变文章标题只为更加详细说明功能和排版,以方便日后复习.这两篇文章已经写得很详细 Android 应用程序之间内容分享详解(一) 转载请注明地址:http://blog.csdn.net/xia ...

  4. linux中c语言结构体详解,Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  5. qml开发笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  6. 微信公众号Java开发-笔记02【开发接入准备、开发接入】

    学习视频网址:哔哩哔哩网站 微信公众号开发-Java版 [P01-P02]微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] [P03-P04]微信公众号Java开发-笔记02[开发接入 ...

  7. [安卓开发笔记一]Android开发配置opencv环境超详细教程

    [安卓开发笔记一]Android开发配置opencv环境超详细教程 [更新于 2022年4月] 再次提醒,建议现在看到这篇文章的,仅仅把此文做一个流程参考,4年前android studio就使用cm ...

  8. Windows进程与线程学习笔记(一)—— 进程结构体

    Windows进程与线程学习笔记(一)-- 进程结构体 进程结构体 EPROCESS +0x000 Pcb : _KPROCESS +0x1b0 Peb : Ptr32 _PEB 练习 解题步骤 第一 ...

  9. iOS开发——使用Charles进行https网络抓包详解

    我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们 ...

最新文章

  1. c语言程序中变量先引用声明,C语言如何跨文件调用函数定义中声明的变量
  2. SMRT single molecular real time Sequencing
  3. java. 算法分析,Java常用算法分析
  4. SystemCenter2012SP1实践(27)VMM和HyperV的PowerShell
  5. 电脑快捷键横屏变竖屏,电脑显示器竖屏横屏来回切换怎么设置
  6. 【Scratch】青少年蓝桥杯_每日一题_4.01_踢足球
  7. QTextStream 的简单理解
  8. Git 企业中常用分支管理策略
  9. SQL Server 行列转换(1)
  10. Java 线程状态之 TIMED_WAITING
  11. 线程池的简单创建和实现
  12. CSS属性选择器温故-4
  13. 利用filter替换字符串中的空格
  14. Leetcode每日一题:861.score-after-flipping-matrix(反转矩阵后的得分)
  15. JVM监控及诊断工具命令行篇之jstatd
  16. jquery进度条组件
  17. 一句话详解常见的心理学效应
  18. 微博三方登录账号注册
  19. excel图片 html,微商相册生成EXCEL表格中将原图按HTML格式显示的实例
  20. 【热门】2004年十大网络流行语征集ing

热门文章

  1. node.js 中Mysql 查询报错 ,解决方法。
  2. js实现数据量换算问题
  3. Android 属性动画 原理 和 使用(Kotlin)
  4. 世界杯 -- 战术玩的都是心脏<宝藏文> — — 小黑日常超细详解
  5. Xiaojie雷达之路---拉伸信号处理
  6. Generative Models(生成模型)简介
  7. 数据库慢查询监控配置
  8. Intel Skylake (Client) 架构/微架构/流水线 (3) - 乱序执行引擎
  9. php+strncmp+绕过,PHP strncmp函数
  10. 前端——给button制作一个简单的爱心特效(2)