IoSkipCurrentIrpStackLocation .(转)】的更多相关文章

原文链接:http://m.blog.csdn.net/blog/ruanben/19758769# 当驱动被分层以后,他们被注册到一个chain中,IRP会在这个chain中传递,从最上面,到最下面,再回到最上面 为适应这种体制,IRP的结构的大小是不固定的,大体结构如下: -------------------- | IRP header | -------------------- |IO_STACK_LOCATION |<-----lowest driver stack location…
今日遇见一个开超市的朋友,真没想到在高校开超市一个月可以达到月净利润50K,相比起我们程序员的工资,真是不可同日而语,这个世道啊,真是做程序员不如经商开超市, 我们高科技的从业者,真是造原子弹不如卖茶叶蛋. 请见代码详细注释 //  修复涉及后视列表的Win2K兼容性 //  Fixes Win2K compatibility regarding lookaside lists. // #ifndef _WIN2K_COMPAT_SLIST_USAGE // Add content(增加内容)…
WDM驱动的基本结构: WDM驱动模型是建立在NT式驱动程序模型基础之上的.对于WDM驱动程序来说,一般都是基于分层的,即完成一个设备的操作,至少要由两个驱动设备共同完成. 1)物理设备对象和功能设备对象 物理设备对象(Physical Device Object,PDO)和功能设备对象(Function Device Object,FDO)的关系是“附加”与“被附加”的关系. 当PC插入某个设备时,PDO会自动创建.确切的说,是由总线驱动创建的.PDO不能单独操作设备,需要配合FDO一起使用.…
在学习内核过滤驱动的过程中,遇到了大量的涉及IRP操作的代码,这里有必要对IRP的数据结构和与之相关的API函数做一下笔记. 1. 相关阅读资料 <深入解析 windows 操作系统(第4版,中文版)> --- 9章 <windows driver kit 帮助文档> http://support.microsoft.com/kb/115758/zh-cn  IRP 结构中各地址字段的含义 http://www.programlife.net/io_stack_location-i…
原文链接:http://www.cnblogs.com/zhuyp1015/archive/2012/03/14/2396595.html IRP(I/O request package)是操作系统内核的一个数据结构.应用程序与驱动程序进行通信需要通过IRP包.当上层应用程序需要与驱动通信的时候,通过调用一定的 API函数,IO管理器针对不同的API产生不同的IRP,IRP被传递到驱动内部不同的分发函数进行处理.对于不会处理的IRP包需要提供一个默认的分 发函数来处理. 现在我们来看一下IRP的…
原文链接:http://www.programlife.net/io_remove_lock.html IO_REMOVE_LOCK(删除锁)的具体结构没有公开,WDK的文档中中查不到IO_REMOVE_LOCK.最开始看到IO_REMOVE_LOCK是在WDK的例子event中.下面是参考网上的一些资料之后的一点总结,错误的地方请指正.新增内容:WDK8.1 中是可以看到这个结构的,在wdm.h中. 为什么要用IO_REMOVE_LOCK? WDM 驱动程序在处理设备删除 IRP 并释放驱动程…
和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧.因为,很多PCI的例子都是对S5933,就连微软出版的<Programming the Microsoft Windows Driver Model>都提供了一个完整的S5933的例子. 在这篇有关DDK的开发论文里.我将分两个例子来构建PLX9054的驱动,第一个,是对<Windows2000 设备驱动程序设计指南>里的分段DMA例子的扩充,它的结构比较简单,对理解DDK的运作很有帮助:第二个,我将…
键盘过滤第一个例子ctrl2cap(4.1~4.4)汇总,测试 完整源代码 /// /// @file ctrl2cap.c /// @author wowocock /// @date 2009-1-27 /// #include <wdm.h> #include <ntddkbd.h> #include "ctrl2cap.h" typedef struct _C2P_DEV_EXT { // 这个结构的大小 ULONG NodeSize; // 过滤设备对…
分层驱动程序概念 分层的目的是将功能复杂的驱动程序分解成多个简单的驱动程序.一般来说,他们是指两个或两个 以上的驱动程序,它们分别创建设备对象,并且形成一个由高到低的设备对象栈.IRP请求一般会被传送到设备栈的最顶层的设备对象,顶层的设备对象可以选择 直接结束IRP请求,也可以选择将IRP请求向下层的设备对象转发.如果是向下层设备对象转发IRP请求,当IRP请求结束时,IRP会顺着设备栈的反方 向原路返回.当得知下层驱动程序已经结束IRP请求时,本层设备对象可以选择继续将IRP向上返回,或者选择…
和S5933比较起来,开发PLX9054比较不幸,可能是第一次开发PCI的缘故吧.因为,很多PCI的例子都是对S5933,就连微软出版的<Programming the Microsoft Windows Driver Model>都提供了一个完整的S5933的例子. 在这篇有关DDK的开发论文里.我将分两个例子来构建PLX9054的驱动,第一个,是对<Windows2000 设备驱动程序设计指南>里的分段DMA例子的扩充,它的结构比较简单,对理解DDK的运作很有帮助:第二个,我将…