news 2026/5/13 14:36:04

34、在C中与VxD进行汇编编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
34、在C中与VxD进行汇编编程

在C中与VxD进行汇编编程

1. 添加“Thunk”以支持来自VMM/VxD的回调

许多VMM和VxD服务要求调用的VxD注册一个回调函数,之后VMM/VxD会调用这个回调函数,以通知调用的VxD发生了某些有趣的事情。例如:
- 一个VxD可能会调用VPICD_Virtualize_IRQ来注册一个硬件中断处理程序,当硬件中断发生时,VPICD会调用已注册的处理程序。
- 一个VxD可能会调用VMM服务Install_IO_Handler来注册一个端口陷阱处理程序,当Ring 3应用程序访问特定的I/O端口时,VMM会调用这个处理程序。

在大多数情况下,提供给回调函数的参数是通过寄存器传递的,而不是通过栈。不过,配置管理器VxD是个明显的例外,它使用栈来向回调函数传递参数。因此,注册的回调函数通常位于汇编语言模块中,这样回调函数就可以访问寄存器参数。

示例VxD遵循这样的约定:所有注册的回调函数都位于VxD的汇编模块(包含DDB和设备控制过程的那个模块)中,但回调函数在调用VxD的C模块中的函数进行实际处理之前,只进行最少的处理。在示例VxD中,汇编回调函数的名称总是以“Thunk”结尾,而它调用的C函数的名称基名相同,但以“Handler”结尾。例如,PORTTRAP示例中,VxD的汇编语言模块中有函数PortTrapThunk,它会调用位于VxD的C模块中的PortTrapHandler

每个需要回调的VMM/VxD服务使用不同的寄存器集合来向回调函数传递参数。因此,在使用回调时,必须参考服务文档,了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 5:35:41

从“读不懂”到“读透”:科研小白必学的文献阅读三步法

刚接触科研的你,是不是也有过这样的困扰?面对动辄几十页的英文文献,翻了几页就头晕脑胀,要么抓不住核心观点,要么读完就忘,花了大量时间却收效甚微?其实,文献阅读从来不是“逐字逐句…

作者头像 李华
网站建设 2026/5/13 10:30:57

38、电影制作全攻略:从素材导入到特效添加

电影制作全攻略:从素材导入到特效添加 在当今数字化时代,制作属于自己的电影不再是遥不可及的梦想。借助强大的视频编辑工具,我们可以轻松地将各种素材整合在一起,创作出令人惊艳的作品。本文将详细介绍如何使用视频编辑软件进行电影制作,涵盖从素材导入到特效添加的各个…

作者头像 李华
网站建设 2026/5/13 2:23:48

AI动画制作工具选择指南:从新手到专业的决策路径

AI动画制作工具选择指南:从新手到专业的决策路径 【免费下载链接】awesome-ai-painting AI绘画资料合集(包含国内外可使用平台、使用教程、参数教程、部署教程、业界新闻等等) stable diffusion tutorial、disco diffusion tutorial、 AI Pla…

作者头像 李华
网站建设 2026/5/12 0:52:02

理解Linux和Windows的区别

Linux 和 Windows 是目前主流的两类操作系统,二者的核心区别可以从定位与起源、权限与安全、定制性、使用场景、生态这几个核心维度来区分: 定位与起源 Linux:是一款基于 Unix 的开源操作系统,最初由林纳斯・托瓦兹在 1991 年开发…

作者头像 李华
网站建设 2026/5/6 8:38:32

Vue3组件库终极指南:企业级UI开发完整教程

Vue3组件库终极指南:企业级UI开发完整教程 【免费下载链接】vue-devui 基于全新 DevUI Design 设计体系的 Vue3 组件库,面向研发工具的开源前端解决方案。 项目地址: https://gitcode.com/DevCloudFE/vue-devui 还在为Vue3项目选择UI组件库而烦恼…

作者头像 李华