![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动
文章平均质量分 62
satadriver
唯有强大才能救赎。
你生而有翼,为何竟愿一生匍匐前进,形如虫蚁?
当家作主, 不屈从于控制, 不证明自己。
展开
-
linux驱动基础
使用module_init(xxx)/module_exit(xxx)标记后的函数会被当做驱动程序的入口/出口函数。反汇编后显示为__init/__exit函数。对于非模块化的驱动程序来说是忽略的。在驱动程序初始化后被抛弃。不要标记pci_driver结构体。函数或变量前加关键字:__init。函数或变量前加关键字:__exit。原创 2024-08-02 13:41:01 · 201 阅读 · 0 评论 -
FNM和SFNM的区别
SFNM模式下,从片中断有优先级的区别,高优先级的中断会打断低优先级的中断处理程序。FNM模式下,从片的中断都是同一个级别,因此从片中断不会抢占,只能按顺序处理。一般情况下,主片设置为SFNM,从片设置为FNM。原创 2024-03-02 22:18:59 · 403 阅读 · 0 评论 -
【windows驱动开发必须掌握的技巧】
https://www.cnblogs.com/iBinary/p/11704838.html原创 2023-09-07 13:41:53 · 45 阅读 · 0 评论 -
wfp框架解析
与此函数相对的是FwpmEngineClose,关闭引擎。此函数参数为FWPM_CALLOUT0,而FwpsCalloutRegister0的参数为FWPS_CALLOUT0。我一直对wfp框架含混不清,搞驱动开发有一段时间了,拿着老板的钱,到对自己手头工作的一些基础概念都弄不明白,实在是说不过去,寝食难安,特此加深一下记忆和理解。FwpsCalloutRegister0:注册回调函数。此函数参数比较复杂,主要是用来注册实现网络过滤功能操作的回调函数。这6个API参数比较复杂,详细的参数可自行MSDN。原创 2023-08-31 11:58:04 · 698 阅读 · 0 评论 -
驱动开发错误汇编
出现这种情况的原因是,驱动的编译环境忽略了所有的默认库,但是像"FltMgr.lib"等内核库也被忽略,因此在文件中添加"#pragma comment(lib,“FltMgr.lib”)"也是无效的,只能在”属性->链接->输入->附加依赖项“中,手动添加需要的内核lib库。FltRegisterFilter函数参数检查合法,但是返回STATUS_OBJECT_NAME_NOT_FOUND,原因是安装驱动时注册表下缺少Instance等项。以便记录我的驱动开发生涯中的一些点点滴滴的技术细节和琐事。原创 2023-08-29 16:13:47 · 857 阅读 · 0 评论 -
驱动完成例程中为何要调用IoMarkIrpPending?
IRP完成的时候,需要在IRP原始发起线程里做一些事情,此时IO管理器会判断IRP->flag,和IrpSp->Control,FLAG就不说了,如果此时Control有SL_PENDING_RETURNED,那么他会插入一个APC到发起线程里,如果没有这个标记,他就以为当前线程就是发起线程,就不插入APC了,所以你的完成例程必须要按规定传递PENDING_RETURNED标记,否则系统可能会误判的。原创 2023-06-05 22:25:31 · 105 阅读 · 0 评论 -
驱动设备的读写方式汇总
下面就这两种情景分别罗列出来以加深理解和记忆,若是实在记不住的话,也可以提高clip©代码时的查询效率:)。输出缓冲区地址:**MmGetMdlVirtualAddress(IRP->MdlAddress)**或者MmGetSystemAddressForMdlSafe(IRP->MdlAddress)或者MmGetSystemAddressForMdlSafe(IRP->MdlAddress)读的时候被当作用户程序的输入缓冲区,写入的时候被当作用户程序的输出缓冲区。驱动设备的读写方式有3种,分别对应于。原创 2023-06-03 20:07:09 · 749 阅读 · 0 评论 -
关于windows驱动中的IO_STACK_LOCATION
理解IO_STACK_LOCATION是驱动入门的一个重要知识点,该结构体是理解驱动工作过程的核心知识之一。闲话不多时,直接看代码,看完下面几段windows源码,你要还不能理解,直接来找我。原创 2023-06-04 23:30:44 · 685 阅读 · 0 评论 -
关于windows驱动中断的几个小问题
答曰:APIC的24个中断被映射到从3-26的24个IRQL中断级别中。其中passive, apc ,dispatch三个软件中断级别为0,1,2 ,而硬件中断除了3-26的24个APIC中断外,还有high_level, power_level, IPI_level, clock2_level, clock1_level1, profile_level等多个级别(这几个级别的具体含义不明)。答曰:IRQ2是芯片上的引脚,而int2是中断向量表的第2项,两者有很大区别。1:到主片IRQ2的引脚。原创 2023-05-31 22:39:32 · 595 阅读 · 0 评论