当前位置:首页 > 芯闻号 > 充电吧
[导读]        在Win CE5.0驱动程序中:        MapPtrToProccess()函数允许将一个指针从一个地址空间映射到另一个地址空间,通过调用该函数,用于获得对应用程序空间数据的访

        在Win CE5.0驱动程序中:

        MapPtrToProccess()函数允许将一个指针从一个地址空间映射到另一个地址空间,通过调用该函数,用于获得对应用程序空间数据的访问。

        GetCallerProccess()函数则用于获取调用进程的句柄。

         他们的用法如下:

pReadBuffer=MapPtrToProccess(pBuffer,GetCallerProccess());
*pReadBuffer=g_Temp;                      //返回函数

其中pReadBuffer是驱动程序中一个函数的实参变量,用来保存转换后的指针,pBuffer是这个函数的形参,对应于调用这个函数的应用程序的实参,而g_Temp 变量则是驱动程序的一个全局变量。应用程序调用驱动程序的这个函数来取得驱动的全局变量,但是驱动程序和应用程序的加载地址空间不是一个,他们两个的指针是不能通用的,应该转换,这两个函数的作用就是这个,第一行转换指针空间,使pReadBuffer指针指向应用程序的实参,这样的话,往pReadBuffer里面写入数据(即第二行代码),应用程序就会通过调用驱动中的这个函数来得到传回的全局变量的值,达到读取驱动中全局变量的目的。

       另外插一段付林林老师的经典语录,以供参考:

       驱动程序和应用程序之间传递数据时何时调用MapPtrToProcess?
因为设备管理器负责加载驱动程序DLL,这意味着当应用程序调用驱动程序接口函数的时候,WINCE内核会将调用驱动程序接口函数的线程转移到设备管理器的进程空间然后执行具体的驱动程序代码,应用程序和设备管理器处于两个进程空间,这就造成设备管理器无法访问应用程序传递的指针(虚拟地址),所以当我们在应用程序中传递指针给流驱动程序接口函数时,WINCE内核从中作了一个地址映射,例如ReadFile、WriteFile、DeviceIoControl函数的参数凡是指针都经过了映射才传递给驱动程序,所以很多驱动程序开发者并不了解其中的奥秘就可以编程了。但是如果参数是一个指向一个结构体的指针,而结构体里包括一个或多个指针,那么WINCE内核并不负责映射,所以就需要开发者在驱动程序接口函数中调用API函数MapPtrToProcess来映射地址。例如:pPointer_retval = MapPtrToProcess(pPointer, GetCallerProcess());  

        我起初读到这篇文章时如获至宝,读完一编之后便欣然尝试,结果试了N个小时,居然不灵,还以为是自己对结构体操作错误,但当我再次细致的阅读此语录后,赫然发现我的理解有误,他老人家说的是结构体中的每一个指针成员都要转换映射,而我理解的却是把传过来的结构体指针变量映射,结果是该映的我没映,不该映的让我映的一塌糊涂,悲哉!哀哉!

        最后总结一句话,大意、马虎猛于(真)虎也!!!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

(全球TMT2022年7月28日讯)凯睿德制造宣布与企业开源解决方案提供商红帽(Red Hat)达成战略合作,为工业领域的更大创新铺平道路,并提供解决方案以支持基于开源技术的 MES 部署。 红帽在从数据...

关键字: 应用程序 开源 数据中心 程序开发

本文内容来源于麦克泰技术RISC-V指令集架构和生态系统正在全球范围内快速崛起,RISC-V处理器已经在嵌入式与物联网市场中崭露头角,开发者生态日渐成熟。面对风起云涌的处理器市场,兆易创新与麦克泰软件诚邀您9月29日上午...

关键字: 物联网 RISC-V 程序开发

摘 要:启动装载程序是嵌入式系统的重要组成部分。文章结合在ARM平台上广泛使用的U-Boot,详细讨论了Boot Loader开发中用到的主要技术,分析引导程序的执行流程,提出了WinCE和Linux在ARM平台下...

关键字: 启动装载程序 U-Boot 嵌入式系统 WinCE Linux

摘 要:火车货运在高速发展的同时,也带来了越来越多的不安全因素,货运物资被盗是铁路货运事故的主要原因之一。 基于此,设计和实现了基于ZigBee和WinCE技术的火车货运防盗预警系统,用于解决站停、待编、待卸和运行途中...

关键字: 火车货运 智能防盗 Zigbee WinCE PDA软件

电源大家都知道,为我们的社会的发展,贡献了很大的能量,现有的所有的电子产品都离不开电源,那么你知道电源管理吗?伴随着移动嵌入式产品的普及,电源管理已经成为重要技术指标和产品的有机组成。典型移动嵌入式设备对能耗越来越敏感,...

关键字: 电源管理 WinCE 有机组成

  车载操作系统(AutomoTIve OperaTIng System,简称AOS)是管理和控制车载硬件与车载软件资源的程序系统,是直接运行在AB上的最基本的系统软件,任何上层软件,HMI,数

关键字: iOS Linux WinCE

随着网络威胁变得更加强大和普遍,组织时刻检查应用程序中的安全漏洞至关重要。 应用程序安全性是通过查找、修复和增强应用程序安全性来使应用程序更安全的过程。这大部分发生在其开发阶段,但其中包

关键字: 应用程序 AC CODE 程序开发

区块链技术一直在颠复和传播数据的民主化。这促进了它的使用。区块链范式已经从金融用途转向了应用程序开发用途。 在使用区块链技术的应用中,游戏应用是使用区块链技术开发最为广泛的应用。比特币通

关键字: 区块链 应用程序 程序开发 节点

如果你最近一直在关注科技新闻,那么可能已经读到了有关人工智能的新闻,无论好坏。它在你能想到的每个行业都留下了自己的印记。诸如Google,Facebook和Microsoft之类的科技巨头都将赌

关键字: 应用程序 AI 移动应用 程序开发

如果你最近一直在关注科技新闻,可能会读到一些有关人工智能的新闻,或好或坏。人工智能已影响了大量行业。 特别是伴随着人工智能的发展与应用逐步成为世界各国的发展战略,谷歌、脸书、微软、百度等

关键字: 应用程序 程序开发 AI技术 移动应用
关闭
关闭