首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏J博士的博客

    基于WDF的PCIPCIe接口卡Windows驱动程序(1)-WDF概述及开发环境搭建

    WDM与WDF样例驱动程序对比如下表所示。通过该表可以看到基于WDF框架的驱动程序,代码量显著减少,开发起来更加容易。 ? 》,WDF抽象的框架如下图所示: ? WDF已经把驱动程序开发做了很好的封装,开发者只需要定义框架对象和编写事件回调函数。WDF中也采用对象,但是它和C++这种编程语言中的对象不相同,毕竟WDF是C写的。 如何解释WDF的对象我也做不到,我的一直把WDF中的对象看做一种数据结构,比如WDFDRIVER对象,其实就是一个与驱动程序相关的结构体。 下一篇博客将讲述PCIe的WDF驱动程序中几个非常重要的概念,对初学者了解WDF非常有用。

    2.7K21发布于 2020-03-12
  • 来自专栏Eureka的技术时光轴

    谈WDM与WDF (windows驱动开发)

    这个基础就是WDFWDF虽然已经是经过封装和定义的对象模型,但对内核模式和用户模式对象来说,WDF又是两者的父对象。换言之两者都是继承了WDF才得到的,或者都是从WDF派生而来的。 为了一劳永逸,WDF干脆将即插即用和电源管理封装了进了对象之内,一举成了对象的缺省(默认)行为。 WDF和WDM的关系有点类似于MFC和Windows SDK的关系。 WDF只是在WDM上面加了一层,来简化driver的开发,特别是PNP,power和IO cancellation 等几个方面有很大改进。 现在学习WDF最好的资料还是DDK带的sample code。

    3.4K30发布于 2019-07-24
  • Windows驱动程序开发:WDF应用程序编写

    WDF并非仅仅是WDM之上的一层薄薄封装,它是一次彻底的范式转移,旨在将驱动开发从“机械式的代码堆砌”提升到“面向对象的模型设计”。本文将带您深入WDF的内核原理,并探讨其如何赋能实战项目开发。 一、内核原理:从“响应式”到“声明式”的哲学转变WDF框架的核心思想是简化和强化。 WDF的内核原理可以概括为以下几个关键点:对象化抽象(Object-Based Abstraction):WDF将驱动中的各种元素(如驱动本身、设备、队列、请求、定时器等)都抽象为“对象”。 而在WDF中,驱动变成了一个“事件处理机”。 二、实战项目开发:如何用WDF思维构建一个驱动假设我们现在要为一个自定义的PCIe数据采集卡开发驱动程序,WDF将如何指导我们的开发过程?

    49910编辑于 2025-09-12
  • Windows驱动程序开发:WDF应用程序编写

    WDF 的核心思想是让驱动程序开发者从繁琐的底层细节中解放出来,更多地关注于设备本身的业务逻辑。 本文将重点介绍如何使用 WDF(主要是 KMDF)来编写驱动程序应用程序。 一、WDF 的核心优势与传统 WDM (Windows Driver Model) 相比,WDF 具有压倒性优势:面向对象模型:WDF 提供了一个面向对象的抽象层,将设备、队列、请求等概念封装成对象(如 二、WDF 驱动程序的基本结构一个典型的 WDF 驱动程序包含以下几个关键部分:DriverEntry 例程:这是驱动程序的入口点,相当于 main() 函数。 , RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE); }EvtDriverDeviceAdd 回调函数:这是驱动程序中最重要的回调函数之一

    54910编辑于 2025-09-15
  • 来自专栏J博士的博客

    基于WDF的PCIPCIe接口卡Windows驱动程序(2)-开发者需要了解的WDF中的一些重要的概念

    原文出处:http://www.cnblogs.com/jacklu/p/4646601.html 本科毕业设计是这方面的工作,所以想开几篇博客来介绍使用WDF开发PCI/PCIe接口卡的驱动程序方法。 在上一篇简要介绍了WDF和开发环境搭建后,本篇将讲述几个WDF中的概念,对开发者了解WDF非常有帮助,属于“内功部分”; 本篇文章结构将没那么清晰,当句句都是作者通过看书、看论文、看MSDN提炼出来的, Design of a PCIe Interface Card Control Software Based on WDF. IEEE, 2016:767-770. 1、WinDBG是唯一的内核驱动调试利器,但是开发PCIe的WDF驱动可以采用“黑盒”方式,所以windbg不是必须的; 2、WDF比WDM好,别再用WDM了; 好吧,先写到这里吧,想到后再补充,下一篇应该就会介绍WDF驱动程序中的几个重要的例程了。

    2.2K20发布于 2020-03-12
  • 来自专栏数字芯片

    DDR3 接口分析

    (app_wdf_data), .app_wdf_end (app_wdf_end), . app_wdf_wren (app_wdf_wren), ? (app_wdf_data), .app_wdf_end (app_wdf_end), .app_wdf_wren (app_wdf_wren 写入数据接口 app_wdf_end 实际中和app_wdf_wren一样(app_wdf_end=app_wdf_wren即可) app_wdf_wren 写入数据接口app_wdf_wren的使能 app_rdy :在app_rdy拉高的时候拉高app_en,地址app_addr才有效; app_wdf_rdy:在app_wdf_rdy拉高的时候拉高app_wdf_wren,写入数据app_wdf_data

    1.5K41发布于 2020-07-20
  • 来自专栏全栈程序员必看

    驱动程序模型:wddm2.0_编写一个简单的驱动

    WDF大大简化了WDM中的pnp和电源管理的开发。WDF框架为设备停止、设备删除、电源状态切换等pnp和电源管理事件提供了适合的缺省行为,驱动程序本身不再纠缠于复杂的pnp和电源管理事件处理。 WDF设备驱动程序的结构 与WDM驱动程序一样,WDF驱动程序得标准入口函数是DriverEntry。 与WDM不同,WDF的DriverEntry只负责创建和初始化WDFDRIVER对象,告诉WDF框架处理增加新设备连接的回调函数。 ; WDF_IO_QUEUE_CONFIG ioCallbacks; WDF_INTERRUPT_CONFIG interruptConfig; // 初始化pnpPowerCallbacks ,设置与 , WDF_NO_EVENT_CALLBACK, WDF_NO_EVENT_CALLBACK); ioCallbacks.EvtIoDeviceControl = MyEvtDeviceControlIoctl

    1.4K20编辑于 2022-09-28
  • 来自专栏根究FPGA

    DDR3篇第一讲、MIG用户接口介绍

    5、app_wdf_data app_wdf_data[APP_DATA_WIDTH-1: 0 ]该接口提供写入外部存储器的数据,MIG内部的运行频率为800Mhz,所以一次的话,需要提供256bit的数据 6、app_wdf_end 输入到MIG,该输入表示当前周期中app_wdf_data[]总线上的数据是当前请求写入到外部DDR存储器的数据。 程序中使用的是 app_wdf_end = app_wdf_wren; //两个相等即可 7、app_wdf_mask app_wdf_mask[APP_MASK_WIDTH-1: 0]该信号输入到 8、app_wdf_rdy 由MIG输出,表示写入数据FIFO准备好接收数据,接收写入数据操作要在app_wdf_rdy和app_wdf_wren都断言时进行。 9、app_wdf_wren 该信号输入到MIG,表示app_wdf_data[]总线上的数据有效,该信号的赋值操作为: assign app_wdf_wren =ProsessIn1?

    4.1K42发布于 2020-06-30
  • 来自专栏李家杂货铺zi

    Zynq PL DDR4读写测试工程

    (c0_ddr4_app_wdf_wren), .app_wdf_end (c0_ddr4_app_wdf_end), .app_cmd (c0_ddr4_app_cmd), .app_wdf_data (c0_ddr4_app_wdf_data), .state (state (c0_ddr4_app_wdf_end), // input wire c0_ddr4_app_wdf_end .c0_ddr4_app_wdf_wren(c0_ddr4 (c0_ddr4_app_wdf_data), // input wire [127 : 0] c0_ddr4_app_wdf_data .c0_ddr4_app_wdf_mask (app_rdy && app_wdf_rdy)) ?

    1.9K20编辑于 2023-03-21
  • 来自专栏数字芯片

    DDR3读写数据

    前面说 command 时关注接口 app_cmd、app_addr、app_en 和 app_rdy,这里写数据则需要关注接口 app_wdf_data、app_wdf_wren、app_wdf_end 和 app_wdf_rdy。 对于前者,app_wdf_end 始终为 1 就可以了;而对于后者,app_wdf_end 每 2 个写数据时钟周期内,前一次拉低,后一次拉高。 余下3个信号app_wdf_data、app_wdf_wren和app_wdf_rdy,他们的工作原理和command时序类似。 app_wdf_data 有效,且 app_wdf_wren 拉高,必须 app_wdf_rdy 也为高,才表示当前数据写入 DDR3 控制器。

    1.9K10发布于 2020-07-20
  • 来自专栏黑客技术家园

    木马盗号《二》

    开发环境: VisualStudio2015 ,驱动开发使用WDF驱动模型 目标: 这一篇我们实现驱动的开发。完成驱动模拟键盘点击。 //回掉函数的申明 DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD Trojan_EvtDeviceAdd; EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL = WdfDriverCreate(driverObject, registerPath, WDF_NO_OBJECT_ATTRIBUTES, &driverConfig, WDF_NO_HANDLE) ioQueueConfig; WDF_OBJECT_ATTRIBUTES queueAttributes; WDFQUEUE queue; //定时器对象 WDF_TIMER_CONFIG timerConfig ; WDF_OBJECT_ATTRIBUTES timerAttributes; //创建设备对象 status = WdfDeviceCreate(&deviceInit, WDF_NO_OBJECT_ATTRIBUTES

    2K30发布于 2021-04-02
  • 南京观海微电子---快速上手DDR读写例程——DDR接口专栏(三)

    :高有效,指示当前app_wdf_data为最后一个数据;app_wdf_mask:提供app_wdf_data屏蔽码;app_wdf_rdy:指示UI可以接收写数据写入;app_wdf_wren:高有效 ,指示app_wdf_data数据有效;app_wdf_data:用户待写入DDR的数据。 蓝色框为写具体的DDR数据操作,由于app_wdf_rdy一直为高,因此UI接口上一次性将8个数据都写入到DDRIP核的数据缓存FIFO中。 4:1,突发长度为8,故两个信号相同assignapp_wdf_end=app_wdf_wren;assignapp_cmd=(cur_state==READ)? <=0;rd_addr_cnt<=0;app_addr<=0;endWRITE:beginif(wr_proc)begin//写条件满足app_wdf_data<=app_wdf_data+1;//写数据自加

    28510编辑于 2025-12-08
  • 来自专栏FPGA开源工作室

    mig IP用户读写时序

    e. app_wdf_end:此输入指示当前周期中app_wdf_data []总线上的数据是当前请求的最后一个数据。 f. app_wdf_wren:此输入表示app_wdf_data []总线上的数据有效。 g. app_wdf_rdy:此输出表示写数据FIFO已准备好接收数据。 当app_wdf_rdy和app_wdf_wren都被声明时,接受写入数据。 例如,如果应用程序数据宽度为256,则掩码宽度取值为32. app_wdf_data的最低有效字节[7:0]使用app_wdf_mask的Bit [0]屏蔽,app_wdf_data的最高有效字节[255 1,①表示写命令(app_cmd),写当前地址(app_addr)和写数据(app_wdf_data)以及写控制信号(app_en,app_rdy,app_wdf_rdy,app_wdf_wren,app_wdf_end

    1.2K10发布于 2019-10-29
  • 来自专栏网络安全攻防

    【免杀手法】红队免杀木马快速生成

    Sleep_mask)、360全家桶(物理机)、Norton(加白程序资源)、WDF(PC)、WDF(Server)、Symantec(加白程序资源) nobypass: CreateThreatPoolWait )、WDF(服务器) nobypass: Fiber+VEH Hook Load bypass:金山(数字签名)、火绒、ESET、360全家桶(物理机)、WDF(PC)、WDF(服务器提示复查(关云保护 5s 抖动50 Sleep_mask)、360全家桶(物理机)、Norton(加白程序资源)、WDF(PC)、WDF(服务器)、McAfee nobypass: Callback+IAT Hook Load plus(x86) bypass:360全家桶(物理机)、WDF(PC)、ESET、金山(数字签名)、火绒、WDF(服务器提)、McAfee、卡巴企业版 nobypass:Norton(静态) memoryMapInjection +Syscall+Ntdll bypass:360全家桶(物理机)、WDF(PC)、ESET、金山(数字签名)、火绒、WDF(服务器)、McAfee、卡巴企业版(时间5s 抖动50 Sleep_mask

    78510编辑于 2025-01-02
  • 来自专栏Seebug漏洞平台

    原创Paper | Windows 驱动开发入门

    从最早期的 VXD(Virtual X Driver)(已废弃)到 windows 2000 上推出的 WDM(Windows Driver Model)驱动模型,随后从 windows vista 推出的 WDF (Windows Driver Foudation)驱动模型,沿用至今;WDF 是 WDM 的升级版,并且在一定程度上兼容,WDF 是微软目前推荐的驱动开发模型。 参考资料 根据官方教程,我们在 Visual Studio 中创建空的 KMDF 项目,并在其中创建 Driver.c 文件,编写代码如下: #include <ntddk.h> #include <wdf.h , &config, WDF_NO_HANDLE ); return status; } NTSTATUS KmdfHelloWorldEvtDeviceAdd 创建 KMDF 项目并编写代码如下: #include <ntddk.h> #include <wdf.h> VOID OnUnload(IN PDRIVER_OBJECT DriverObject)

    1.9K41编辑于 2023-08-23
  • 来自专栏全栈程序员必看

    siamFC_memorytest代码

    #mermaid-svg-jhH2wdF6vIwm6h2S .node rect,#mermaid-svg-jhH2wdF6vIwm6h2S .node circle,#mermaid-svg-jhH2wdF6vIwm6h2S .task0,#mermaid-svg-jhH2wdF6vIwm6h2S .task1,#mermaid-svg-jhH2wdF6vIwm6h2S .task2,#mermaid-svg-jhH2wdF6vIwm6h2S important}#mermaid-svg-jhH2wdF6vIwm6h2S .done0,#mermaid-svg-jhH2wdF6vIwm6h2S .done1,#mermaid-svg-jhH2wdF6vIwm6h2S important}#mermaid-svg-jhH2wdF6vIwm6h2S .crit0,#mermaid-svg-jhH2wdF6vIwm6h2S .crit1,#mermaid-svg-jhH2wdF6vIwm6h2S 1}#mermaid-svg-jhH2wdF6vIwm6h2S .commit-id,#mermaid-svg-jhH2wdF6vIwm6h2S .commit-msg,#mermaid-svg-jhH2wdF6vIwm6h2S

    89330编辑于 2022-11-10
  • 来自专栏J博士的博客

    基于WDF的PCIPCIe接口卡Windows驱动程序(4)- 驱动程序代码(源文件)

    WDF框架分配给硬件资源的具体过程如下: (1)用户插入PnP设备,总线驱动识别设备并枚举; (2)WDF框架调用总线驱动的EvtDeviceResourcesQuery,创建资源列表; (3)WDF框架调用总线驱动的 在WDF驱动程序中,处理I/O请求的关键判断哪些类型的I/O请求由驱动程序处理,哪些类型的I/O请求由WDF框架自动处理。 第3步,I/O管理器为读请求构造类型为IRP_MJ_READ的请求包;第4步,I/O管理器找到由WDF框架创建的设备对象,并将请求包发送到它的读派遣函数;第5步,WDF框架收到请求包后,查看WDF驱动是否注册了读回调例程 ,如果注册了,就将请求包封装成一个I/O请求对象把它放到WDF驱动的某个指定队列中;第6步,队列将I/O请求对象发送给WDF驱动处理,WDF驱动注册的读回调例程被执行。 Windows设备驱动程序WDF开发 孔鹏. 基于WDF的光纤传输卡PCIe接口驱动的研究和实现 杨阿锋基于WDF的PCIe接口高速数据传输卡的驱动程序开发

    2.9K31发布于 2020-03-12
  • 来自专栏J博士的博客

    基于WDF的PCIPCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)

    Design of a PCIe Interface Card Control Software Based on WDF. Spw_PCIeEvtDeviceAdd; 33 EVT_WDF_OBJECT_CONTEXT_CLEANUP Spw_PCIeEvtDriverContextCleanup; 34 35 EVT_WDF_DEVICE_D0 _ENTRY Spw_PCIeEvtDeviceD0Entry; 36 EVT_WDF_DEVICE_D0_EXIT Spw_PCIeEvtDeviceD0Exit; 37 EVT_WDF_DEVICE_PREPARE_HARDWARE 10-18行定义了与设备相关的变量,把这些变量参数封装在一个结构体中,体现WDF中的一种“对象封装”的思想。 31-40行声明了一些WDF事件回调例程,声明后,我们可以直接使用自定义的回调函数名,这些声明的作用只起到开发者方便编写程序的作用。

    2K20发布于 2020-03-12
  • 来自专栏根究FPGA

    DDR3篇第三讲、DDR3读写测试项目分析

    ; wire app_wdf_end; wire [APP_MASK_WIDTH-1:0] app_wdf_mask (app_wdf_data), .app_wdf_end (app_wdf_end), .app_wdf_wren =app_wdf_wren;//两个相等即可 //根据是否允许数据写入,之后等待app_wdf_rdy为一,再等待app_rdy的应答信号,在输入请求中使用 app_rdy&&app_wdf_rdy:1'd0; //app_rdy:用户提交的请求已经被接受 //app_wdf_rdy:写入数据fifo已经准备好接收数据 always@(posedge clk 1'd0:1'd1; Count_64_1 <=app_rdy&&app_wdf_rdy?

    3.9K31发布于 2020-06-30
  • 来自专栏根究FPGA

    DDR3篇第四讲、DDR3操作时序与关键参数

    该时序图说明,写入的数据可以在三个时间点给出,以command发起为基准,在command发起前后的1,2,3不同时间都可以指定写入数据,需要注意的是写入数据的有效通过app_wdf_wren和app_wdf_end app_wdf_en为高表示数据写入,在第158个时钟周期,app_wdf_rdy拉低持续5个用户时钟周期,此时即使app_wdf_en一直拉高也无法完成数据写入操作,app_wdf_data必须保持直到第 163个时钟周期app_wdf_rdy拉高。

    9K10发布于 2020-06-30
领券