第3章 Windows运行机理-3.1 内核分析(3)
如果一个VxD只是为了某个应用提供某种服务选择动态加载就比较好因为VxD能在需要时加载在用完后就立即卸载。这两种加载方式所响应的VMM消息有一点不同有的只能响应静态VxD有的则只能响应动态VxD。但大多数消息对这两种方式都能响应。③ DDB的结构设备描述块The Device Descriptor Block简称DDB是VMM联系VxD的句柄。DDB中包括了VxD的信息和指向VxD主要的入口指针。当然为了给其他的应用程序使用也可以包括指向其他入口的指针。表3.1是DDB的数据结构。表3.1 DDB的数据结构字段区域描述Name8个字节的VxD名称Major VersionVxD的主版号与Windows的版本号无关Minor VersionVxD的从版号与Windows的版本号无关Device Control Procedure设备控制过程的地址Device IDMicrosoft分配的惟一的ID号Initialization Order通常是Undefine_Init_Order 。如果要强制在某个指定的VxD初始化之前或结束之后进行初始化那就在VMM.INC中找到相应的Init_Order加1或减1Service Table服务表的地址V86 API ProcedureV86 API函数的地址PM API ProcedurePM API函数的地址VxD源程序中的标号是不区分大小写的大写、小写或者混合起来用都可以。下面对这些字段做些说明 Name VxD的名字最多8个字符。它必须是大写在系统中的所有VxD程序里它们的名字不能重复每个VxD的名字应该是惟一的。这个宏同时也会根据这个名字产生DDB的名字产生的办法就是在这个名字的后面加上_DDB。 MajorVer和MinorVerVxD的主要的和次要的版本。 CtrlProcVxD程序的设备控制函数的名字。设备控制函数是一个接受和处理VxD程序的控制消息的函数。你可以把设备控制函数看做Windows函数的等价物。 DeviceIDVxD程序的16位惟一标识符当且仅当VxD程序需要处理以下情况时需要用到这个ID● VxD程序导出一些供其他VxD程序使用的VxD服务。因为20H中断接口用设备ID来定位/区分VxD程序所以一个惟一的ID对你的VxD程序是必要的。● VxD程序要在初始化中断2FH、1607H时通知实模式程序它的存在。● 有一些实模式软件TSR要用中断2FH、1605H来加载VxD程序。如果VxD程序不需要一个惟一的设备ID则可以把这一项设为UNDEFINED_DEVICE_ID如果需要它则可以向Microsoft申请一个。 InitOrder初始化的顺序。简单地说就是加载的顺序。VMM就按照这个次序来加载VxD程序。每个VxD程序都有一个加载次序号例如VMM_INIT_ORDER EQU 000000000HDEBUG_INIT_ORDER EQU 000000000HDEBUGCMD_INIT_ORDER EQU 000000000HPERF_INIT_ORDER EQU 000900000HAPM_INIT_ORDER EQU 001000000H可以看到VMM, DEBUG和DEBUGCMD是首先加载的VxD程序然后是PERF和APM。初始化顺序值越低的VxD程序越先被加载。如果VxD程序在初始化时需要用到其他VxD程序提供的服务那么必须把初始化顺序的值设得比你所要调用的那个VxD程序的值大。这样当VxD程序加载时所要的VxD就已经在内存中为你准备好了。如果不想去管VxD的初始化顺序就把这个参数填写为UNDEFINED_INIT_ORDER 。 V86Proc和PMProc程序可以导出供V86和保护模式程序使用的API这两个参数就是用来填写这些API的地址。记住VxD程序除了监控系统虚拟机外还要监控一个或多个运行在DOS或者保护模式下的虚拟机程序。VxD程序理所当然要为DOS和保护模式程序提供API支持。如果你不导出这些API则可以不填这两个参数。 RefData这是输入输出监视器IOS要用到的参考数据。只有在一种情况下要用到这个参数即当在为IOS编写一个层驱动程序时。否则可以不填这个参数。④ VxD的事件处理当实模式初始化完成后VMM将通过专门的消息方法来通知所有的VxD发生了什么。VxD的消息处理就像Windows的窗口消息处理一样能通过如下一组切换函数switch (事件){case 系统初始化事件处理此消息代码case VM初始化处理此消息代码…case 其他…}为了给VxD发送消息VMM就会从VxD的DDB中取得设备控制函数的地址在EAX中放置的是消息的值EBX中放入当前VM的句柄接着调用对应的函数。

相关新闻

Qwen3-TTS语音合成实战:打造个性化多语言智能助手

Qwen3-TTS语音合成实战:打造个性化多语言智能助手

Qwen3-TTS语音合成实战:打造个性化多语言智能助手 1. 引言:语音合成的智能化新时代 语音合成技术正在经历一场革命性的变革。传统的语音合成系统往往存在机械感强、缺乏情感表达、多语言支持有限等问题,难以满足现代智能应用对自然交互的需…

2026/7/9 1:44:45 阅读更多 →
文墨共鸣入门必看:中文转述识别(Paraphrase)水墨雅鉴系统部署案例

文墨共鸣入门必看:中文转述识别(Paraphrase)水墨雅鉴系统部署案例

文墨共鸣入门必看:中文转述识别水墨雅鉴系统部署案例 1. 项目介绍 文墨共鸣(Wen Mo Gong Ming)是一个将深度学习技术与传统水墨美学完美结合的中文语义相似度分析系统。这个项目基于阿里达摩院开源的StructBERT大模型,专门用于识…

2026/7/7 9:29:03 阅读更多 →
Janus-Pro-7B零基础入门:图文生成轻松上手

Janus-Pro-7B零基础入门:图文生成轻松上手

Janus-Pro-7B零基础入门:图文生成轻松上手 1. 认识Janus-Pro-7B:多模态AI新星 Janus-Pro-7B是一个创新的多模态大模型,它能同时理解和生成图片与文字。想象一下,有一个AI助手既能看懂你上传的图片内容,又能根据你的文…

2026/5/17 5:34:32 阅读更多 →

最新新闻

ASIC vs FPGA vs SoC:3类芯片选型指南,从成本、功耗到开发周期对比

ASIC vs FPGA vs SoC:3类芯片选型指南,从成本、功耗到开发周期对比

ASIC vs FPGA vs SoC:芯片选型三维决策模型与工程实践指南 当硬件架构师面对新一代智能硬件开发时,芯片选型往往成为决定项目成败的关键第一步。在消费电子、工业自动化、汽车电子等不同领域,ASIC、FPGA和SoC三类芯片呈现出截然不同的技术特性…

2026/7/9 1:43:55 阅读更多 →
Letter shell移植和使用

Letter shell移植和使用

一、Letter shell介绍 Letter shell 是一个用 C 语言编写的、专为嵌入式系统设计的开源命令行交互工具(嵌入式Shell),可以让你通过串口等通道像操作Linux终端一样调用和运行程序中的函数。 官方源码:https://github.com/Nevermi…

2026/7/9 1:41:54 阅读更多 →
信号反射仿真分析:ADS 2024 对比 4种阻抗突变场景下的波形畸变

信号反射仿真分析:ADS 2024 对比 4种阻抗突变场景下的波形畸变

信号反射仿真分析:ADS 2024 对比 4种阻抗突变场景下的波形畸变 在高速数字电路和射频系统设计中,信号完整性始终是工程师面临的核心挑战之一。当信号在传输线上遇到阻抗突变时,部分能量会反射回源端,导致波形畸变、时序错乱甚至系…

2026/7/9 1:41:54 阅读更多 →
西门子法提纯工业硅:从98%到11个9的电子级多晶硅完整工艺解析

西门子法提纯工业硅:从98%到11个9的电子级多晶硅完整工艺解析

西门子法提纯工业硅:从98%到11个9的电子级多晶硅完整工艺解析1. 工业硅提纯的技术挑战与西门子法原理半导体工业对硅材料纯度的要求近乎苛刻——当光伏行业满足于6个9(99.9999%)纯度时,芯片制造需要的是11个9(99.99999…

2026/7/9 1:39:54 阅读更多 →
昇腾 CANN 7.0 环境配置:Ubuntu 22.04 单机部署与 PyTorch 适配 3 步验证

昇腾 CANN 7.0 环境配置:Ubuntu 22.04 单机部署与 PyTorch 适配 3 步验证

昇腾 CANN 7.0 环境配置:Ubuntu 22.04 单机部署与 PyTorch 适配实战指南 在AI计算领域,硬件加速平台的选择直接影响着模型训练和推理的效率。对于希望从传统GPU转向专用AI加速器的开发者而言,昇腾NPU提供了一个极具竞争力的选择。本文将手把手…

2026/7/9 1:37:53 阅读更多 →
软件团队管理中的领导风格适配

软件团队管理中的领导风格适配

软件团队管理中的领导风格适配 在快速变化的软件开发领域,团队管理的成功往往取决于领导风格的适配性。不同的项目阶段、团队构成和业务目标需要灵活调整领导方式,否则可能导致效率低下或成员士气受挫。如何根据情境选择合适的领导风格,成为…

2026/7/9 1:35:52 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻