设备驱动
windows设备驱动
Eugene800
这个作者很懒,什么都没留下…
展开
-
Driver Development for Windows 64-bit.
Abstract. Questions concerned with the release of drivers for 64-bit versions of Windows are considered in this article. Some typical problems and the ways of their solutions are listed in the article...转载 2018-08-05 14:51:59 · 381 阅读 · 0 评论 -
Call IoCompleteRequest while holding a spinlock
MS KB Q186775:《Tips for Windows NT Driver Developers -- Things to Avoid》一文(中译版)罗列了很多驱动开发过程中的注意点。微软仅仅提到了这些注意点,但是没有解释其背后的原因,只能结合网上的资料+自己分析其原因。我在osronline上看到有人针对item 20:"Never call IoCompleteRequest whil...原创 2018-08-05 14:49:00 · 261 阅读 · 0 评论 -
Windows NT 驱动程序开发人员提示 -- 应注意避免
转自:深秋哋黎明的专栏下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表: 一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING。 一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution。 它会使系统死锁。 一定不要将 Dev...转载 2018-08-04 21:12:44 · 659 阅读 · 0 评论 -
设备栈中各个设备加载顺序
如题,这是前几天某同事问我的问题。他假设设备栈中有Pdo,Fdo,以及附属于Fdo的设备上下过滤驱动以及类上下过滤驱动,在这种情况下,OS会以怎样的顺序加载这些设备? 我第一反应是当然先加载Fdo,然后再加载过滤驱动。不过,出于谨慎,我决定还是先调试一下,然后再找资料核对一下。至于调试的对象,肯定还是万能的toast了~先准备好驱动文件夹,看名字就知道里面包含了类上下过滤驱动,设备上...原创 2018-06-19 22:00:08 · 425 阅读 · 0 评论 -
IO_REMOVE_LOCK(删除锁)
转自:IO_REMOVE_LOCK(删除锁)IO_REMOVE_LOCK(删除锁)的具体结构没有公开,WDK的文档中中查不到IO_REMOVE_LOCK。最开始看到IO_REMOVE_LOCK是在WDK的例子event中。下面是参考网上的一些资料之后的一点总结,错误的地方请指正。为什么要用IO_REMOVE_LOCK?WDM 驱动程序在处理设备删除 IRP 并释放驱动程序分配的内存后可能接收到附加...转载 2018-05-16 23:30:57 · 1050 阅读 · 0 评论 -
IoGetDeviceObjectPointer引起的引用计数改变
上周同事的驱动遇到HLK测试失败:HLK测试项检测到传感器设备驱动在响应IRP_MJ_PNP/IRP_MN_REMOVEDEVICE时,有句柄扔打开设备,于是我也帮着一起查找原因。这个驱动的架构如下设计:上层App负责通知驱动,驱动响应这个过程时,用IoGetDeviceObjectPointer获得并保持(IoGetDeviceObjectPointer后没有对返回的文件对象调用ObDe...原创 2018-04-30 16:24:21 · 1095 阅读 · 0 评论 -
驱动中获取PsActiveProcessHead变量地址的五种方法
转自:http://blog.csdn.net/whatday/article/details/16916495PsActiveProcessHead的定义:在windows系统中,所有的活动进程都是连在一起的,构成一个双链表,表头是全局变量PsActiveProcessHead,当一个进程被创建时,其ActiveProcessList域将被作为节点加入到此链表中;当进转载 2017-09-23 15:48:00 · 1305 阅读 · 0 评论 -
Who owns this IRP? (Process ID)
There are cases that you need to know which process have launched a given IRP. This is very common in Firewalls or other security programs, which intercept I/O operations to check in their databases转载 2017-09-13 17:17:25 · 422 阅读 · 0 评论 -
内核驱动程序完整性校验的原理分析
转自:小刀志 在上一篇文章中提到了 Windows Vista 及之后版本的 Windows 操作系统在驱动程序加载完成后,驱动中调用的一些系统回调函数(如 ObRegisterCallbacks,可用来监控系统中对进线程句柄的操作,如打开进程、复制线程句柄等)等 API 中会通过 MmVerifyCallbackFunction 函数对该驱动程序进行完整性检查,检测未通过则会返转载 2017-08-31 21:42:32 · 5024 阅读 · 0 评论 -
进程创建通知回调通知例程的学习笔记
转自:小刀志在 Windows 操作系统中可以通过 PsSetCreateProcessNotifyRoutine 函数注册或移除一个进程创建通知回调例程。在 Vista 以及之后的版本中,微软加入 PsSetCreateProcessNotifyRoutineEx 新的函数来注册创建进程通知。通过判断系统版本来对应不同的操作系统调用不同的注册函数。而在 Vista 之前的系统转载 2017-08-31 21:16:42 · 2286 阅读 · 0 评论 -
windows设备停用启动杂记
公司(OEM厂商)的电脑升级到win10 RS2 RTM后,发现有部分MS inbox驱动在电源事件后会出现黄标的现象(ErrorCode=43--QueryRemove失败)甚至driver lost。MS虽然承认是他们的issue,但是至少要到6月底才修复。于是,部门决定让我做个work around:出现黄标时Reset设备(其实就是停用-启用设备),并额外要求由于这个WA需要给产线使用,所原创 2017-05-21 00:19:10 · 2020 阅读 · 2 评论 -
取消Irp引起蓝屏(BugCheck:0x18)
昨天写一个简单的驱动,驱动的write例程会将IRP挂起放进自定义的队列中,然后在另一个线程中取消这些挂起的IRP:NTSTATUS SampleCharWriteAsync(PDEVICE_OBJECT devObj, PIRP irp){ KIRQL oldIrql; SampleCharDevContext* devCtx = (SampleCharDevContext*)devO原创 2017-02-22 17:30:32 · 2389 阅读 · 0 评论 -
内核下各种同步处理方法(自旋锁、信号灯、互斥体…)
转自:http://www.blogfshare.com/kernel-synchronization.html1.在支持多线程的操作系统下,有些函数会出现不可重入的现象。所谓“可重入”是指函数的执行结果不和执行顺序有关。反之如果执行结果和执行顺序有关,则称这个函数是“不可重入”的。 2.Windows将中断的概念进行了扩展,提出一个中断请求级(IRQL)的概念。其中规定了32转载 2017-02-08 10:11:38 · 1068 阅读 · 0 评论 -
驱动程序安装之设备协安装器
年前想把一个功能驱动和过滤驱动传到wu上,但是因为过滤驱动和第三方厂商驱动的hardwareid一样,直接传到wu上后用户一旦更新会有问题。一个同事提到一个解决方案:把过滤驱动的hardwareid改成一个无关紧要的id,然后为功能驱动的inf文件附加一个coinstaller,把他们一起传到wu上。当用户更新功能驱动时,通过coinstaller运行某个程序加载过滤驱动。 这样说可能还原创 2017-01-29 22:23:02 · 1739 阅读 · 0 评论 -
驱动蓝屏0x50 PAGE_FAULT_IN_NONPAGED_AREA
想写个暴力搜索nt模块中未导出函数,结果一直蓝屏:原创 2017-01-12 10:55:03 · 9664 阅读 · 0 评论 -
多进程(线程)访问设备的一些疑惑
同事在看设备驱动同步时,问了我一个事:如果驱动程序创建了一个设备,在应用层是否允许多个进程同时打开这个设备;如果允许,这种方式应用层和驱动的通信方式是否会相互影响?我不是很确定,写了个测试代码并把结果记录下来。1.我们在DriverEntry/AddDevice中调用IoCreateDevice创建设备对象。这是IoCreateDevice的接口,倒数第二个参数用于设置设备是否支持独占式访问。原创 2017-01-05 14:26:47 · 3249 阅读 · 0 评论 -
调试遗漏IoStartNextPacket引起的阻塞
前面 driver verifier检测驱动死锁 一文中本想检测一下驱动中潜在的死锁来解决驱动无响应的bug,然而并没有实质性的进展。后来通过一系列的调试终于找到了根源所在,本文用于记录查找问题的过程。 下面是测试程序,主线程循环读驱动,子线程循环写驱动,由于是异步操作,每次读写结束后,线程都要调用WaitForSingleObject等待驱动完成IRP。可是由于驱动处理有误,Re原创 2016-12-13 11:12:16 · 675 阅读 · 0 评论 -
driver verifier检测驱动死锁
最近,在写字符驱动练手。读写相关的派遣函数以异步StartIo方式处理IRP,当应用层发出了几次ReadFile请求后,居然就无响应了。由于驱动是异步处理IO请求,因此,我猜测可能是驱动死锁了。本想借助windbg的!locks命令查看死锁,无奈,输出为空...绝望之余,想到可能可以用verifier工具检测驱动中潜在的死锁。 命令行下有2种方式激活verifier.exe的死锁检测功能原创 2016-12-12 17:28:03 · 4215 阅读 · 0 评论 -
Troubleshooting Device and Driver Installations
转自MSDNYou can use the following guidelines to either verify that your device is installed correctly or diagnose problems with your device installation:Follow the steps that are described in转载 2016-12-05 09:23:35 · 794 阅读 · 0 评论 -
设备管理器中 停用启用设备后设备上有YB 错误代码Code 31
闲暇时写个WDM驱动:CharSample。加载驱动后,在设备管理器中显示工作正常,甚是欣喜;然而这种欣喜没有持续几分钟就被冲散了:停用/再启用设备后,设备图标上有yellow bang,显示设备状态为:"This device is not working properly because Windows cannot load the drivers required for this dev原创 2016-12-03 16:42:24 · 4481 阅读 · 0 评论