- 博客(10)
- 收藏
- 关注
转载 支持 PS/2 与 USB 的键盘过滤驱动(可卸载)
支持 PS/2 与 USB 的键盘过滤驱动(可卸载) Author: sinisterEmail: sinister@whitecell.orgHomepage:http://www.whitecell.org Date: 2007-02-26/************************************************************
2009-06-15 19:55:00 690
转载 IoCompleteRequest深入学习之二
接上篇还原为c的代码如下:VOID FASTCALL IopfCompleteRequest( IN PIRP Irp, IN CCHAR PriorityBoost ){ UCHAR uC
2009-06-15 16:08:00 1699
转载 IoCompleteRequest深入学习之一
lkd> u IoCompleteRequestnt!IoCompleteRequest:804f04e2 8bff mov edi,edi804f04e4 55 push ebp804f04e5 8bec mov ebp,esp804f04e7 8a550c mov dl,by
2009-06-15 16:07:00 1449
转载 Windows NT 驱动程序开发人员提示 -- 应注意避免的事项
下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表: 一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING。 一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution。 它会使系统死锁。 一定不要将 DeviceObject->
2009-06-15 11:00:00 391
转载 _EPROCESS数据结构
0:000> dt _EPROCESS +0x000 Pcb : _KPROCESS +0x06c ProcessLock : _EX_PUSH_LOCK +0x070 CreateTime : _LARGE_INTEGER +0x078 ExitTime : _LARGE_INTEGER +0x080 Rundo
2009-06-11 18:11:00 504
转载 线程警惕和APC
在内部,Windows NT内核有时使用线程警惕(thread alert)来唤醒线程。这种方法使用APC(异步过程调用)来唤醒线程去执行某些特殊例程。用于生成警惕和APC的支持例程没有输出给WDM驱动程序开 发者使用。但是,由于DDK文档和头文件中有大量地方引用了这个概念,所以我想在这里谈一下。当某人通过调用KeWaitXxx例程阻塞一个线程时,需要指定一个布尔参数,该参
2009-06-11 18:01:00 1147
转载 IRP的创建
1. 有四种方法来创建IRPØ IoBuildAsynchronousFsdRequest创建异步IRP,不需要等待其完成;Ø IoBuildSynchronousFsdRequest创建同步IRP, 需要等待其完成,这种方法和上面的只能创建某些特定类型IRPØ IoBuildDeviceIoCtontrolRequest创建一个类型为 IRP_
2009-06-11 17:59:00 632
转载 IRP的完成例程
1.最高层驱动总是运行在发起该请求的程序所处的线程中。DriverEntry总是处在系统线程中,系统线程的空间不涉及到线性地址 0 - 2G。APC 是处在任意上下文中,它所在的线程取决于系统运行APC之前最后被挂起的那个线程。2. 所有不返回 STATUS_MORE_PROCESSING_REQUIRED的完成回调例程,需要使用下面的代码:NTSTATUS MyCompletionRou
2009-06-11 17:33:00 603
转载 Windows NT如何处理I/O完成
以前我们描述了在内核中如何“创建你的IRPs”(roll your own IRPs)来执行I/O操作。这是一个很强大的技术,对于那些编写设备驱动程序,文件系统驱动程序和过滤器驱动程序的人是非常有用的。这次我们讨论I/O管理器如何完成IRPs。虽然看起来是个简单的话题,但是它包含了许多细微的主题。如果你没有完全理解I/O完成,你的驱动程序会面临危险。例如,回顾在编写驱动程序代码时我们经常遇
2009-06-11 16:29:00 1056
转载 使用IoMarkPending的原因及原理
为了使系统吞吐量最大化,I/O管理器希望驱动程序推迟其耗时IRP的完成。驱动程序通过在某个派遣例程中调用IoMarkIrpPending函数并返回STATUS_PENDING来表示完成操作被推迟。(注意:以下讨论未加说明均指在操作被推迟情况下)I/O管理器的原始调用者通常希望在继续执行之前等待操作完成,所以I/O管理器在处理推迟完成时有下面类似的逻辑(不代表真正的Microsoft源代码):
2009-06-11 16:28:00 706
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人