windows 驱动
文章平均质量分 72
seasonpplp
这个作者很懒,什么都没留下…
展开
-
关于win32环境下多线程编程的总结
①信号量 声明:CSemaphore xx(n,m); 信号量xx,资源最多访问线程n个,当前可访问线程数m个 等待信号量: DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds);WaitForSingleObject(xx.m_hObject,INFINITE);释放信号量:BOOL ReleaseSemaphore( HANDLE hSemaphore, LON原创 2010-11-08 02:26:00 · 620 阅读 · 0 评论 -
IRP和IO_STACK_LOCATION的内存分布
画这个图的目的主要是为了反编译驱动之后的地址计算 0 15 31 DS:0x0000 Type Size DS:0x0004 MdlAddress DS:0x0008 Flags DS:0x0原创 2011-07-14 13:35:34 · 860 阅读 · 0 评论 -
win32驱动开发中的内存偏移问题
在反汇编一个windows下的usb设备驱动的过程中,我发现windows环境下的内存地址偏移计算结果与IDA计算结果的差异。最主要体现在偏移量的计算上,windows环境下的偏移是按照源地址类型来确定偏移量的。 源代码:.text:00010C78 ; ---------原创 2011-07-14 13:37:47 · 794 阅读 · 0 评论 -
IWDFIoRequest::SetCompletionCallback(设置完成回调函数)
SetCompletionCallback 方法为OnCompletion方法注册了接口,当I/O请求完成时,框架会调用这个回调函数. void SetCompletionCallback( IN IRequestCallbackRequestCompletion* pCompletionCallback, IN void* pContext ); 参数 pCompletionCallback 这个指针指向IReque原创 2010-11-17 06:32:00 · 1256 阅读 · 0 评论 -
应用程序与驱动程序的通信
Windows应用程序与WDM通信的一般过程是: ①应用程序先用CreateFile函数打开设备, ②然后用ReadFile从WDM中读取数据,用WriteFile函数向WDM写数据,用DeviceIoControl函数向WDM发送自定义的控制信息, ③最后用CloseHandle函数关闭设备。对于异步IO请求还可以用CancelIo函数取消。 IRP的详细图示如下: 这些函数调用使得IO管理器产生相应的IRP发送给驱动程序 用户空间函数原创 2010-11-18 10:05:00 · 1978 阅读 · 0 评论 -
驱动编程学习笔记之IO处理
<br /><br />出处我也找不到,谁知道出处,我再添加<br /> <br />典型的i/o处理过程<br />=================<br />操作系统将所有的i/o请求都抽象成针对一个虚拟文件的操作,从而掩盖了“一个i/o操作的目标可能不是一个文件结构的设备“这样的事实。这一抽象也使得应用程序对待设备的接口变得泛化。<br />用户模式api<br /> |<br />i/o系统服务api(Ntxxx)<br /> |<br />i/o管理器(Ioxxx)<br /> |<转载 2010-11-11 15:15:00 · 3030 阅读 · 0 评论 -
有效使用内存的 6 条技巧(来自微软官网)
<br />有效使用内存的 6 条技巧本页内容有效布局数据结构并尽可能重用它们。在启动时将未分页的池内存用于长期用途。经济有效地使用内存使用后备列表避免频繁地建立和取消虚拟地址空间的映射测试与验证资源<br />本文提供在 Microsoft Windows 家族操作系统内核模式驱动程序中有效使用内存的技巧。有效使用内存有助于提高驱动程序性能。以下是有效使用内存的 6 条技巧。有效布局数据结构并尽可能重用它们。<br />设计驱动程序时,根据内存类型、大小和生命周期来计划内存分配。合并类似生存期的内存分配,转载 2010-11-11 15:04:00 · 1043 阅读 · 0 评论 -
内核同步对象(下)
<br />出处:http://hi.baidu.com/wukongafei/blog/item/76766a43a13dc6159213c646.html<br /> 内核互斥对象<br />互斥(mutex)就是互相排斥(mutual exclusion)的简写。内核互斥对象为多个竞争线程串行化访问共享资源提供了一种方法(不一定是最好的方法)。如果互斥对象不被某线程所拥有,则它是信号态,反之则是非信号态。当线程为了获得互斥对象的控制权而调用KeWaitXxx例程时,内核同时也做了一些工作以帮助避免可能转载 2010-11-11 16:23:00 · 1663 阅读 · 0 评论 -
inf安装文件详解
<br />出处:http://blog.csdn.net/floweronwarmbed/archive/2008/11/03/3208544.aspx<br />INF是Device INFormation File的英文缩写,是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF文件中包含硬件设备的信息或脚本以控制硬件操作。在INF文件中指明了硬件驱动该如何安装到系统中,源文件在哪里、安装到哪一个文件夹中、怎样在注册 表中加入自身相关信息等等。安装监视器、调制解调器和打印机等转载 2010-11-11 15:20:00 · 1310 阅读 · 0 评论 -
实战DeviceIoControl 之一:通过API访问设备驱动程序
<br /><br />出处:http://www.moon-soft.com/doc/37898.htm<br />Q 在NT/2000/XP中,我想用VC编写应用程序访问硬件设备,如获取磁盘参数、读写绝对扇区数据、测试光驱实际速度等,该从哪里入手呢?<br />A 在NT/2000/XP中,应用程序可以通过API函数DeviceIoControl来实现对设备的访问―获取信息,发送命令,交换数据等。利用该接口函数向指定的设备驱动发送正确的控制码及数据,然后分析它的响应,就可以达到我们的目的。<br />D转载 2010-11-11 15:18:00 · 544 阅读 · 0 评论 -
使用 C++ 编写内核模式驱动程序的优点与缺点
<br />使用 C++ 编写内核模式驱动程序的优点与缺点本页内容简介内核模式代码注意事项将 C++ 编译器用于内核模式代码内核模式驱动程序的 C++ 问题结束语参考资料<br /> <br />C++ 及其对象特性似乎与 Microsoft Windows Driver Model (WDM) 和 Windows Driver Foundation (WDF) 驱动程序的语义非常吻合。但是,对于内核模式驱动程序,C++ 语言的一些特性可能导致难以发现和解决的问题。为了帮助您进行合理选择,本文将与您分享来自转载 2010-11-11 15:05:00 · 1389 阅读 · 0 评论 -
WDM驱动之IRP处理:取消IRP
IRP请求的最终结局无非有两个:要么被完成了,要么被取消了。完成IRP请求的过程已经在前面讲过了,这里仔细讲一个IRP请求的取消。 为什么要取消IRP请求呢?一般来讲,原因不外乎是本请求操作超时或设备故障导致的。具体理解,可以考虑如下两种情形: 情形1:驱动发送一个请求到下级驱动,下级驱动由于忙,将它放到自己的请求队中去,下级驱动一直忙,请求一直没有得到处理,而这个请求又比较重要,如果一直得不到处理就会造成系统处于死锁。于是,驱动就会给这个请求加上超时机制,若超过一定的时间还没有得到处理结果,就通转载 2010-11-11 13:03:00 · 883 阅读 · 0 评论 -
内核同步对象(上)
<br />出处:http://hi.baidu.com/wukongafei/blog/item/6abdeeca42047e42f31fe746.html<br />Windows NT提供了五种内核同步对象(Kernel Dispatcher Object),你可以用它们控制非任意线程(普通线程)的流程。表4-1列出了这些内核同步对象的类型及它们的用途。在任何时刻,任何对象都处于两种状态中的一种:信号态或非信号态。有时,当代码运行在某个线程的上下文中时,它可以阻塞这个线程的执行,调用KeWaitFor转载 2010-11-11 16:24:00 · 1321 阅读 · 0 评论 -
如何从内核模式设备驱动程序中打开一个文件以及如何读取或写入文件(来自微软官网)
如何从内核模式设备驱动程序中打开一个文件以及如何读取或写入文件对象名称来引用文件内核模式设备驱动程序对象名称来引用文件。 此名称是 /DosDevices 一起与该文件的完整路径。 是例如 C:/Windows/Examp...对象名称来引用文件内核模式设备驱动程序对象名称来引用文件。 此名称是 /DosDevices 一起与该文件的完整路径。 是例如 C:/Windows/Example.txt 文件的对象名称将是 /DosDevices/C:/Windows/Example.txt。 然后通过调用 In转载 2010-11-11 15:08:00 · 2623 阅读 · 0 评论 -
开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表
<br /><br />下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表:一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING。一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution。 它会使系统死锁。一定不要将 DeviceObject->Flags 设置为 DO_BUFFERED_IO 和 DO_DIRECT_IO。 它会扰乱系统并最终导致致命错原创 2010-11-11 14:59:00 · 454 阅读 · 0 评论 -
开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表
<br /><br />下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表:一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING。一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution。 它会使系统死锁。一定不要将 DeviceObject->Flags 设置为 DO_BUFFERED_IO 和 DO_DIRECT_IO。 它会扰乱系统并最终导致致命错原创 2010-11-11 14:59:00 · 499 阅读 · 0 评论 -
在内核模式下创建和终止线程
出处:http://5233studio.bokee.com/6570280.html// Globals to communicate with our system threadPVOID ThreadObjectPointer=NULL; // Thread pointerBOOLEAN ExitNow; // Set t转载 2010-11-11 15:17:00 · 2627 阅读 · 0 评论