MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (1)

C# 操作Excel的时候,出现"被呼叫方拒绝接受呼叫的异常"的解决方案(参考官方给出的解决方案) 首先官方有对这个错误给出解释和解决方案,连接如下: https://docs.microsoft.com/zh-cn/previous-versions/ms228772(v=vs.120)#%E5%8F%AF%E9%9D%A0%E7%BC%96%E7%A8%8B 简单来说,貌似是线程问题,我猜。。。 之前我尝试着在代码中添加 Thread.Sleep(1000); 来进行解决,这种办... 阅读详情

随学随记,暂时未经编程验证 Written by HOOK_TTG(Jamie Jiang)

 

 

1、            设备对象概述

操作系统用device objects(设备对象)来表示设备。每个设备可以有一个或者多个设备对象与之关联。通过操作设备对象来作为对设备的所有操作的目标对象。

         内核模式驱动程序必须为每个设备创建至少一个设备对象,下面情况例外:

l  与类型或者端口驱动程序关联的Minidrivers(微型驱动程序)不需要创建他们自己的设备对象。有类型或者端口驱动程序来创建设备对象,并将操作转发到这个微型驱动程序上。

l  在一些特定类型子系统中,驱动程序是设备的一部分,就像NDIS微型端口驱动程序,它们的设备对象是由这个子系统创建的。

要确定一个驱动程序是否需要创建它自己的设备对象,需要参看这个特定设备类型的文档。

有些设备对象表示的不是一个实际的物理设备。它仅仅是一个软件设备驱动程序,只是用来处理I/O请求而不会将这些请求传递给实际硬件。这些驱动程序仍然必须一个创建设备对象来作为对设备操作的目标对象。

设备通常有多个设备对象来表示,它们是处理某个设备I/O请求的驱动程序栈中的每个驱动程序所关联的设备对象的其中一个。设备的设备对象组成了一个device stack(设备栈)。当要处理一个对设备的操作时,系统会将一个IRP数据结构传递给设备栈中最顶层设备的驱动程序。每个驱动程序要么处理这个IRP,要么将这个IRP传递给这个设备栈中下一个紧邻的设备对象的驱动程序。

设备对象由一个 DEVICE_OBJECT结构来表示,这个结构由对象管理器来管理。就像对其他系统对象一样,对象管理器为设备对象提供一样的功能。特别是,设备对象可以被命名,一个被命名的设备对象还可以处理对其的打开操作。

系统为每个设备对象提供了一个称为 device extension(设备扩展)的专用存储区,驱动程序可以使用其存储设备特有的信息。这个设备扩展的创建和释放都是由系统负责的,设备对象无需关心。

下面用一个图片来说明设备对象和I/O管理器之间的关系。对于驱动程序编写者,要多关注下图中DEVICE_OBJECT结构的成员。

 

2、            WDM设备对象和设备栈

1)         WDM设备对象的类型

WDM设备对象有三种类型:

1.         Physical Device Object (PDO):物理设备对象,为一个总线驱动程序表示总线上的一个设备。

2.         Functional Device Object (FDO):为一个功能驱动程序表示一个设备。

3.         Filter Device Object (Filter DO):为一个过滤驱动程序表示一个设备。

这三种类型的设备对象都是DEVICE_OBJECT类型,但用法不同,还有不同的设备扩展。

驱动程序将自己添加到驱动程序栈中,通过创建一个设备对象(IoCreateDevice)来处理一个设备的I/O操作,并且将这个设备对象附加到设备栈中(IoAttachDeviceToDeviceStack)。IoAttachDeviceToDeviceStack函数计算设备栈的当前栈顶位置,并将这个新的设备对象加入到这个设备栈的顶部。

2)         举例说明一个WDM设备对象

下面的图片显示了表示键盘和鼠标设备的设备对象,就是前面的键盘和鼠标的硬件配置章节中图表所示的。下图所示的键盘和鼠标驱动程序层次结构中的键盘和鼠标驱动程序,通过调用I/O支持例程(IoCreateDevice)来创建它们的设备对象。

键盘和鼠标的设备对象

对于键盘和鼠标设备,都是它们的各自的端口和类型驱动程序创建设备对象。端口驱动程序创建一个代表物理端口的物理设备对象(PDO)。每个类型驱动程序创建它们自己的功能设备对象(FDO),这个FDO代表了一个键盘和鼠标的I/O请求的目标对象。

每个类型驱动程序调用一个I/O支持例程来获取一个指针,这个指针指向了紧邻的下一个驱动程序的设备对象,因此类型驱动程序可以将自己链接到一个端口驱动程序之上。这样一来,类型驱动程序就可以将I/O请求下发到代表物理设备的端口驱动程序。

可以像上述配置中加入一个可选的过滤驱动程序,这个过滤驱动程序将创建一个过滤设备对象(filter DO)。就像类型驱动程序一样,这个可选的过滤驱动程序将自己链接到在设备栈中紧邻的下一个驱动程序,而且还会将目标PDO的I/O请求下发到紧邻的下一个的驱动程序。

上图中所示,每个端口驱动程序就是一个总线(低级的)驱动程序,所以每个产生中断的设备的端口驱动程序,必须建立中断对象和注册一个ISR。

一个双端口设备驱动程序,就像用于键盘和辅助设备控制器的i8042驱动程序,如果每个设备使用不同的中断向量,那么就必须分别建立设备特定的中断对象。一旦要编写一个这样的驱动程序,那么既可以为每个设备分别实现一个单独的ISRs,也可以为这两这个设备实现一个单一ISR。

3)         WDM设备对象何时会被创建?

下图说明了在一个设备栈中可能有的设备对象类型,描述了那些处理设备I/O请求的驱动程序。

        

从上图的底部开始:

l  一个总线驱动程序为其总线上的每个设备创建一个PDO。

一旦总线驱动程序枚举到一个设备,他就会给这个子设备创建一个PDO。总线驱动程序从PnP管理器中枚举对BusRelations的IRP_MN_QUERY_DEVICE_RELATIONS做出相应的设备。如果自从上次总线驱动程序响应一个BusRelations的查询关系请求起就被加入到这个总线的话(或者这时从系统启动后的第一个查询关系请求),总线驱动程序会为这个子设备创建一个PDO。

一个PDO代表一个总线驱动程序的设备,就像其他内核模式系统组件一样,比如电源管理器、PnP管理器和I/O管理器。

其他设备驱动程序会将设备对象附加在PDO之上,但是PDO始终处于设备栈的底部。

l  可选的总线过滤驱动程序为每个它们过滤的设备创建过滤DOs。

一旦PnP管理器在BusRelations列表中检测到一个新的设备,它会检测是否有适用于这个设备的总线过滤驱动程序。如果有,则对于每个这样的驱动程序,PnP管理器将确保将其加载运行(如果有必要的话会调用DriverEntry)并且调用这些驱动的AddDevice例程。一旦总线过滤驱动程序要过滤设备的操作,那么过滤驱动程序会创建一个设备对象,并且会在它的AddDevice例程中将这个设备对象附加到设备栈上。如果与这个设备相关的总线过滤驱动程序不止一个,那么每个过滤驱动程序都会创建设备对象,并将其附加到设备栈上。

l  可选的低级过滤驱动程序为每个它们过滤的设备创建过滤DOs。

如果设备有一个可选的低级过滤驱动程序,则PnP管理器将确保将其加载到总线驱动程序和任何总线过滤驱动程序之后。而且PnP管理器还会调用过滤驱动程序的AddDevice例程。在AddDevice例程中,低级过滤驱动程序为设备创建一个过滤DO,并将其附加在设备栈中。如果有不止一个低级过滤驱动程序,那么每个驱动程序都将创建自己的fileter DO并将其附加在设备栈中。

l  功能驱动程序为这个设备创建一个FDO。

PnP管理器确保设备的功能驱动程序被加载,并且调用功能驱动程序的AddDevice例程。功能驱动程序创建一个FDO,并将其附在到设备栈上。

l  可选的较高级过滤驱动程序为每个它们过滤的设备创建一个过滤DO。

如果设备有一个可选的较高级过滤驱动程序,PnP管理器将确保将其加载到功能驱动程序之后,并调用它们的AddDevice例程。每个过滤驱动程序都会将其设备对象附加到设备栈中。

总的来说,设备栈包含了每个驱动程序的设备对象,这些驱动程序都是专门处理某一设备I/O操作的。父总线驱动程序有一个PDO,功能驱动程序有一个FDO,还有每个可选的过滤驱动程序都有一个filter(过滤)DO。

需要注意的是,所有的设备,包括总线适配器/控制器设备和非总线设备,在它们的设备栈中都有一个PDO和一个FDO。总线适配器/控制器的PDO是总线驱动程序为其父总线创建的。例如,一个SCSI适配器插入到一个PCI总线上,那么PCI总线驱动程序将为这SCSI适配器创建一个PDO。

如果一个设备以原始模式使用,那就没有功能和过滤驱动程序。其父总线驱动程知只有一个PDO以及零个或者多个总线过滤Dos。

设备栈为一个设备附加上一些额外的信息组成了这个设备的devnode。PnP管理器维护设备devnode中的信息,比如,设备是否已经启动或者属于哪些驱动程序,如果有的话,还有是否注册了设备改变通知。内核调试器命令 !devnode 会显示devnode的相关信息。

4)         举例说明WDM设备栈

本节描述了由一组可能的USB硬件驱动程序创建的设备对象,以此来阐述WDM设备对象和他们的分层结构。

下图显示了由前文描述的样例驱动程序创建的设备对象。,参看MSDN中 WDM Driver Layers: An Example章节。

        

这是一个USB游戏杆的WDM设备对象分层样例。

从这个图的底部开始,在这个样例设备对象栈中的设备对象包括以下内容:

1.         PCI总线的一个PDO和一个FDO。

根总线驱动程序枚举内部的系统总线,并且为每个发现的设备创建一个PDO。这些PDOs中的一个是代表PCI总线的。(上图没有显示,根总线的PDO和FDO。)

PnP管理器将PCI驱动程序等同于一个PCI总线的功能驱动程序,并将加载这个驱动程序(如果还没有加载的话),还将这个PDO传递给PCI驱动程序。在这个PCI驱动程序的AddDevice例程中,PCI驱动程序为PCI总线创建一个FDO,并将这个FDO附加到这个PCI总线的设备栈上(使用IoAttachDeviceToDeviceStack函数)。PCI驱动程序创建并将这个FDO作为PCI总线功能驱动程序的一部分。

这个例子中PCI总线没有过滤驱动程序。

2.         USB主控制器的一个PDO和一个FDO。

PnP管理器指引PCI驱动程序来启动它的设备(IRP_MN_START_DEVICE)并为其子设备查询适合的PCI驱动程序(使用BusRelations关联的IRP_MN_QUERY_DEVICE_RELATIONS)。作为回应,PCI驱动程序会枚举在其总线上的设备。在这里例子中,PCI驱动程序找到了一个USB主控制器并为这个设备创建了一个PDO。图中的宽箭头表明USB主控制器是PCI总线的“子”设备。PCI驱动程序为其子设备创建PDO,这是作为PCI总线驱动程序应有职能的一部分。

PnP管理器将USB主控制器miniclass/class(微类型/类型)驱动程序对等同于一个USB主控制器的功能驱动程序,并加载这个驱动程序对。PnP管理器在适当的时候调用这个驱动程序对来为USB主控制器创建并附上一个FDO。

在这个例子中,USB主控制器没有过滤驱动程序。

3.         USB hub的一个PDO和一个FDO。

USB主控制器枚举它的总线,在一个单独的端口中定位到一个USB hub,并为这个hub创建一个PDO。USB hub驱动程序为这个hub创建并附上一个FDO。

这个例子中的USB hub没有过滤驱动程序。

4.         游戏杆设备的一个PDO、一个FDO和两个过滤

USB hub驱动程序枚举它的总线,定位到了一个HID设备(就是这里的游戏杆),并为其创建一个PDO。

在这个例子中,已经为游戏杆设备在注册表中建立了一个低级的过滤驱动程序,因此PnP管理器就加载这个过滤驱动程序。这个过滤驱动程序检测与之关联的设备,然后为设备栈创建并附上一个过滤DO。

PnP管理器确定这个游戏杆设备的功能驱动程序是一个HID class/miniclass驱动程序对,并加载那些驱动。这个驱动程序对由一个链接到一个类型驱动程序DLL的微类型驱动程序组成,他们一起为这个设备服务,就像一个完整的功能驱动程序一样。这个类型/微类型驱动程序对创建只一个设备对象,就是这里的FDO,并将其附到设备栈上。

一个较高级的过滤驱动程序为设备栈创建并附上一个过滤DO,在一定程度上类似低级的过滤器。

需要注意的是,对一个特定设备来说,由父总线驱动程序创建的PDO总是在设备栈的底部。在驱动程序处理PnP或者电源IRPs时,他们必须将每个IRP在设备栈中一直向下传递到PDO,还有与之关联的总线驱动程序。

下图显示了与上图一样的设备栈,只是特别强调了哪些设备被创建和由哪个驱动程序管理。

 

一个总线驱动程序会涉及不止一个设备栈。一个总线驱动程序为其总线适配器/控制器创建FDO,并且为其每个子设备都创建一个PDO。

 

搭建AutoSAR开发环境 任何开发都需要一套开发环境,包括软硬件环境,笔者后续将介绍的是 NXP 的 S32K144 配套的开发板。接下来详细介绍怎么获取这些软硬件工具。仅供个人学习使用! 阅读详情

相关推荐

用Bus Hound和MIDIOX抓包分析USB MIDI数据流:从硬件接口到软件解析的完整实战

本文详细介绍了如何使用Bus Hound和MIDIOX工具抓包分析USB MIDI数据流,从硬件接口到软件解析的完整实战过程。通过解析MIDI协议、捕获Note On/Off事件、控制变更消息等实例,帮助开发者深入理解音乐数字接口的底层通信机制,并提供了常见问题的解决方案和调试技巧。

weixin_42692935的博客 406

透明加密系统设计及实现-WINDOWS内核分析及编程方法

本文主要介绍Windows内核的基本结构,了解Windows的基本结构是进行内核编程的必不可少的内容。透明文件加密系统最为核心的单元是采用Windwos 内核过滤驱动进行设计和实现的,故而必须准确认识和理解Windwos内核驱动模型的原理才能设计出合理高效的透明加密的驱动程序。过滤驱动...

1057

工程经验分享:PCIE(1)

本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。

weixin_42415266的博客 3842

RT-Thread内核移植

  记录代码移植过程,成功一步记录一步 第一步:建立裸机程序 使用STM32CubeMx建立一个裸机程序 生成MDK5工程 第二步:参考0-bare-metal完成board.c、board.h文件 在Drivers组下添加board.c、board.h文件 添加board.c文件实现board.c里面关于关于时钟配置、串口初始化、GPIO初始化等函数 void bsp_...

Mr.w的博客 6377

宝塔面板添加站点及运营商SSL免费证书的申请与使用

本文详细介绍在宝塔面板下如何正确添加站点、配置站点,及在运营商如何申请免费SSL证书,将其配置到宝塔站点里。 给你的网站加一把锁,教你免费SSL证书申请,配置到自己的网站中。 环境:Ubuntu server 18 工具:宝塔控制面板 平台:阿里云 Web服务器:Nginx 宝塔:https://www.bt.cn/ 阿里云:https://www.aliyun.com/ 腾讯云:https://cloud.tencent.com/ 要求: 1.宝塔控制面板搭建完毕。 2掌握域名解析的原理。 3.了解ht

贺兰山长老 5058

【DaVinci Developer实战指南】从入门到精通:软件组件设计与配置全解析

本文详细解析了DaVinci Developer在汽车电子开发中的核心应用,从软件组件设计到配置实战,涵盖Application SWC创建、RunnableEntity设计及Exclusive Area配置等关键环节。通过实际案例分享,帮助开发者快速掌握AUTOSAR架构下的ECU软件开发技巧,提升工作效率与系统稳定性。

weixin_30952535的博客 249

获得DISK的DeviceObject

很久没有写代码了,最近简单的看了一下disk相关的东西,写了段代码share一下。先用livekd看一下Disk.sys DriverObject的一些信息:kd> !drvobj /driver/diskDriver object (89885a08) is for:/Driver/DiskDriver Extension List: (id , addr)(f763e3be 898858f

1017

最新小旋风蜘蛛池X6.21解密版+绕过授权带教程

介绍: 1.站群管理:用你的域名在这里添加网站 2.站点优化:站点互链,内容优化 2.系统设置:开启蜘蛛池 3.采集管理(可开启自动采集) 4.缓存设置:推荐开启tkd缓存 其他的用户根据自己的实际情况后台进行配置,通常以下: 1.后台首页(这里显示系统的大致概况) 2.系统设置:蜘蛛池的基本设置(访问开关、跳转、统计等等) 3.站群管理: 1.网站管理(用你的域名在这里添加网站) 2.模型管理(可构建不同类型站点:电影、文章、论坛等等) 3.TKDB调用模板(即:title、keywords、descri

百度SEO程序下载 2937

MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (2)

一个整个的驱动程序必须为其所处理I/O请求的每个物理、逻辑或者虚拟设备都创建一个设备对象。没有创建为设备创建设备对象的驱动程序将不能接收来自设备的任何IRPs。

HOOK_TTG( Jamie Jiang )的专栏 2278

AgentScope实战训练营-Java开发HITL人机协作AI应用完整指南

本文手把手带你从零搭建一个基于 Spring Boot WebFlux + AgentScope + 通义千问的人机协作(HITL)AI 聊天应用。项目涵盖流式对话、工具调用、高危操作确认、对话中断、动态 MCP 工具接入、中英文双语界面等完整功能。文章从环境准备、pom.xml 配置、DTO 数据模型、Hook 机制、AgentService 核心服务、ChatController 接口到前端 HTML/CSS/JS 实现,逐一讲解每行代码的设计意图,并附带 REST API 接口说明、测试场景、常见问题

program哲学 713

UWB芯片DW3000之PDOA测向实现源码

本文详细介绍如何基于UWB芯片DW3000之PDOA测向的源码实现。

DT程序员的博客 2615

MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (4)

本节讲述如何让一个驱动程序的设备对象不被未授权访问。1)         控制对设备的访问对设备的访问由由一个安全描述符(它包含一个ACL=访问控制等级)控制。在设备对象被创建或者设置到注册表的时候,设备对象的安全描述符会被指定。控制WDM驱动程序的设备访问当WDM驱动程序(除了某些总线驱动程序)创建一个设备对象,即插即用管理器为设备确定一个安全描述符。

HOOK_TTG( Jamie Jiang )的专栏 1887

Node-RED教程(一):Node-RED的介绍与安装

最新最全的Node-RED,node-red教程都在这里。 本篇介绍node-red的安装。使用docker 安装node-red

知无涯 3万+

MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (3)

对于大多数中间层或者最底层的驱动程序,设备扩展是设备对象非常重要的数据结构。它的内部结构是由驱动程序定义的,通常用于: l 维护设备状态信息。 l 为任何内核定义的对象或者其他系统资源提供存储空间,比如自旋锁,驱动程序需要用到这些信息。 l 容纳任何驱动程序必须在系统空间常驻的用于执行其I/O操作的数据。

HOOK_TTG( Jamie Jiang )的专栏 2747

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MSDN Kernel-Mode Driver Architecture学习笔记(1)——Introduction to Windows Drivers(1)

关键词: NT-based 基于NT技术 User-Mode Drivers 用户模式驱动程序 Kernel-Mode Drivers 内核模式驱动程序 WDM(Windows Driver Mode) Windows驱动模型

HOOK_TTG( Jamie Jiang )的专栏 2162

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MSDN Kernel-Mode Driver Architecture学习笔记(2)——Windows Driver Model (2)

对于大多数种类的设备,Windows驱动程序工具包(WDK)都提供了一套全功能系统驱动程序样例。其中一些个别驱动程序样例可以作为要新开发的同类设备程序的参考模型。不管怎样,系统的驱动程序都有一个额外的设计要求:让开发新的设备驱动程序简单化。所以,许多系统驱动程序都有一个分层的架构,方便开发新的同类驱动可以重利用。

HOOK_TTG( Jamie Jiang )的专栏 2061

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MSDN Kernel-Mode Driver Architecture学习笔记(2)——Windows Driver Model (1)

为了让驱动程序开发者编写的设备驱动可以在源代码上兼容所有的微软Windows操作系统,引入了Windows Driver Model(WDM=Windows驱动程序模型)。符合WDM规则的内核模式驱动程序称之为WDM 驱动程序。

HOOK_TTG( Jamie Jiang )的专栏 1798

MSDN Kernel-Mode Driver Architecture学习笔记(4)——Kernel-Mode Driver Components (2)

每个驱动程序必须有一个DriverEntry例程,用来初始化驱动程序范围内的数据结构和资源。I/O管理器在加载驱动程序的时候调用DriverEntry例程。

HOOK_TTG( Jamie Jiang )的专栏 1679

MSDN Kernel-Mode Driver Architecture学习笔记(4)——Kernel-Mode Driver Components (5)

9) DispatchDeviceControl和DispatchInternalDeviceControl例程 一个驱动程序的DispatchDeviceControl和DispatchInternalDeviceControl例程分别处理IRP_MJ_DEVICE_CONTROL和IRP_MJ_INTERNAL_DEVICE_CONTROL I/O功能代码的IRPs。

HOOK_TTG( Jamie Jiang )的专栏 1507

MSDN Kernel-Mode Driver Architecture学习笔记(1)——Introduction to Windows Drivers(3)

基于NT技术的操作系统无论在单处理器还是对称多处理器(SMP)平台上运行的结果都是完全一致的,因此内核模式驱动程序也必须按照这个要求设计。

HOOK_TTG( Jamie Jiang )的专栏 1494

MSDN Kernel-Mode Driver Architecture学习笔记(4)——Kernel-Mode Driver Components (1)

本节介绍内核模式驱动程序包含的标准例程。这些标准驱动程序例程的一些是必需的,一些是可选。本节也介绍驱动程序对象,其包含了指向每个驱动程序标准例程的指针。

HOOK_TTG( Jamie Jiang )的专栏 1313

MSDN Kernel-Mode Driver Architecture学习笔记(1)——Introduction to Windows Drivers(2)

内核模式驱动程序涵盖了许多操作系统的设计目标,特别是系统的I/O管理器。 下面几点是设计内核模式驱动程序的目的: Portable(可移植性):便于从一个平台移植到另一个平台

HOOK_TTG( Jamie Jiang )的专栏 1269

MSDN Kernel-Mode Driver Architecture学习笔记(4)——Kernel-Mode Driver Components (4)

驱动程序的DispatchCleanup例程用来处理带有IRP_MJ_CLEANUP的I/O功能代码的IRPs。

HOOK_TTG( Jamie Jiang )的专栏 1110

MSDN Kernel-Mode Driver Architecture学习笔记(4)——Kernel-Mode Driver Components (3)

处理任何I/O请求包(IRP)开始于一个派遣例程,这个派遣例程是驱动程序提供来处理IRP主功能代码的(IRP_MJ_Xxx)。驱动程序的DriverEntry例程输出派遣例程的入口点到一个驱动程序的DRIVER_OBJECT结构的派遣表中。

HOOK_TTG( Jamie Jiang )的专栏 1102

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 424

设计模式(unity游戏研发版)

当你使用图形用户界面类时通常会遇到一个问题。比如,你创建了自定义按钮类并允许客户端在按钮中注入自定义代码,这样当用户按下按钮时就会触发这些代码。观察者模式允许任何实现了订阅者接口的对象订阅发布者对象的事件通知。你可在按钮中添加订阅机制,允许客户端通过自定义订阅类注入自定义代码。在Unity中,这就像UnityEvent在Inspector中绑定多个回调。

m0_63330263的博客 97
上一篇: MSDN Kernel-Mode Driver Architecture学习笔记(2)——Windows Driver Model (2)
下一篇: MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (2)
HOOKTTG
博客等级 码龄20年 25粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值