自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 学习windows驱动(32位与64位兼容)

32位和64位Windows驱动有什么不同? 怎么兼容32位和64位Windows驱动?在编程的时候,32位系统跟64位系统数据类型是有些不一样的。在64位环境下,指针、句柄是64位的。 Windows为64位环境提供了一些指针类型的数据类型。固定精度的数据类型 类型 定义DWORD32 32位无符号整数DWORD64 64位无符号整数INT32 32位有符号整数INT64

2015-10-30 14:30:51 8796

原创 学习windows驱动(温习3)

今天没有下雨,虽然漫天的阴云,但经过昨天一天雨的洗涤,空气显得分外干净清澈。连马路都干净的锃光瓦亮的。虽然早晨六点多醒来,但没有立马起床。 而是打开手机上会儿网,似乎手机网络已经成为许多人的身体的一部分,无论走到哪里,无论是什么样的人,在走路的行人,或是坐在一旁休息的人,大人、小孩子,你都可以看得到他们都手持着一个现代的电子显示设备,把玩着各种电子设备。他们完全忘我的融入到了另一个电子世界里。

2015-10-30 10:11:18 129

原创 学习windows驱动(WDF USB设备驱动开发)

学习WDF USB驱动开发, 那么怎么进行WDF USB设备驱动开发呢? 我们需要懂什么? 需要做什么呢? 根据《竹林蹊径 深入浅出Windows驱动开发》第4章 WDF USB设备驱动开发里介绍的目录可以初见端倪,需要了解USB设备硬件结构,USB软件结构,内核开发, 数据I/O操作,设备控制,用户程序。USB设备硬件结构。 USB是Universal Serial Bus(通用串行总

2015-10-29 18:01:04 5927

原创 学习windows驱动(PNP和电源模型)

WDF为PNP、电源、电源策略三者定义了许多的状态值。 分WDF_DEVICE_PNP_STATE、WDF_DEVICE_POWER_STATE和WDF_DEVICE_POLICY_STATE,三个状态枚举量加起来超过270个。WDF对电源和PNP的设计方式是,进行最基本的处理,框架向程序提供回调接口,如果程序注册了某个回调,则框架在对应的状态变化时调用此回调,否则就使用默认的处理方式。可以找时间

2015-10-29 16:38:07 1408

原创 学习windows驱动(创建IO请求)

现在框架只把5种IRP请求封装层WDFREQUEST对象,实际上可以把任何IRP请求封装成WDFREQUEST对象。WDF驱动程序除了使用框架通过事件回调传递的WDFREQUEST对象外,还可以自己新建任何类型的WDFrequest对象。有两种方法创建WDFREQUEST对象。 第一种是创建空对象,在调用格式化函数,将对象格式化成指定类型的命令,现在框架只提供4种格式化函数,这种方法只能创建4种W

2015-10-29 16:19:19 1018

原创 学习windows驱动(队列)

WDF驱动里的队列类型种类有如下定义:typedef enum _WDF_IO_QUEUE_DISPATCH_TYPE { WdfIoQueueDispatchInvalid = 0, WdfIoQueueDispatchSequential, WdfIoQueueDispatchParallel, WdfIoQueueDispatchManual, WdfI

2015-10-29 15:35:30 1497

原创 学习windows驱动(框架和IO请求)

框架处理IO请求的过程是怎样子的? 应用程序调用Kernel32的接口函数ReadFile读。ReadFile调用Ntdll.dll里的NtReadFile函数,进入内核调用内核服务NtReadFile,IO管理器接管读操作处理。IO管理器为读请求构造IRP_MJ_READ类型的IRP。IO管理器找到由WDF框架创建的设备对象(DEVICE_OBJECT),将IRP发送到它的读分发函数(Dis

2015-10-29 14:56:09 1740

原创 学习windows驱动(内存对象)

内存对象有METHOD_BUFFERD、METHOD_DIRECT和METHOD_NEITHER三种。METHOD_NEITHER方式缓冲区在WDF里处理时比较复杂。 METHOD_NEITHER的IO请求不是来自用户程序,来自内存模块,获取缓冲区方式跟其它两种一样。特别的是如果IO请求来自用户程序,则缓冲区是在用户空间申请的,在内核使用用户缓冲,有许多限制,它要与指定的进程上下文相关才有效。这时

2015-10-29 14:11:49 1535

原创 学习windows驱动(温习2)

hello,今天的中环边界靠近徐汇区的天气不太好,下着雨。打着雨伞,背着双肩包,踩着单车,我就踏上了上班的路。一路上车流不息。虽然是雨天,骑自行车、电瓶车、摩托的人数依然不见有所减少。人们有的披雨披,有的打伞。照样行进在马路上。说到对象这个概念,它是一个具象的东西。以人类为例子,每个人都是一个人类对象,它有眼睛、鼻子、耳朵等属性,人能说话,看见东西,听见声音,走路等等,这些就是人有的方法。这样子就好

2015-10-29 11:03:02 643

原创 学习windows驱动(内存对象)

IRP里的用户缓冲区有:METHOD_BUFFERED、METHOD_DIRECT、METHOD_NEITHER三类。 对于METHOD_BUFFERED和METHOD_DIRECT两种缓冲类型的IO请求,使用下面的方法获取对应的内存指针。 获取输入缓冲区对应的内存对象:_Must_inspect_result__IRQL_requires_max_(DISPATCH_LEVEL)NTSTA

2015-10-28 17:57:59 1205

原创 学习windows驱动(缓冲区溢出)

在WDF里,IO请求对象使用了WDFMEMORY对象来表示输入/输出缓冲区。 WDFMEMORY内部维护了内存指针、内存区长度、有效长度(字符串长度)。 维护内存区生命期,框架负责申请释放自己的内存,驱动自己创建内存,由驱动自己负责释放。 可以使用偏移量offset来实现内存区任意部分的使用。实际可用的内存区长度是总长度减去偏移值。 内存对象怎么使用?要使用内存对象,首先要创建内存对象。

2015-10-28 17:39:40 2576

原创 学习windwos驱动(IO模型)

IO管理器将IO请求封装成IRP结构体发往内核驱动。 WDF能够判断成IRP请求是直接在框架内部处理,还是调用WDF驱动注册过的事件回调,交回驱动处理。如果调用事件回调,就必须将IRP封装成框架请求,也就是WDFREQUEST对象。 一般情况,WDF驱动不直接操作IRP。IO目标对象叫做WDFIOTARGET。 WDFIOTARGET封装了DEVICE_OBJECT,它跟WDFDEVICE对象

2015-10-28 13:28:24 727

原创 学习windows驱动(设备对象设备栈)

IO相关的操作是围绕设备对象进行的。设备对象分下几类:1、功能设备对象(FDO): 功能驱动为设备创建一个FDO,在设备栈里它位于物理设备(PDO)的上层。2、物理设备对象(PDO): 总线驱动创建PDO,逻辑上代表物理设备本身,功能设备对象(FDO)代表系统对这个PDO做的处理。FDO为什么会被总线驱动创建?是因为FDO代表的物理设备连接到此总线设备上,总线驱动起了承担总线设备的功能驱动作用。3.

2015-10-28 10:50:48 2274

原创 学习windows驱动(回顾1)

温故而知新。到现在为止,我们来回想一下已经接触了哪些windows驱动的知识点。 首先,windows驱动是什么? 驱动是一个软件,负责承上启下, 承上就是与用户程序打交道,提供接口给用户使用; 启下就是跟系统内核和硬件打交道,负责读写操作硬件。 那么,驱动是怎么实现的? 需要掌握哪些概念和知识呢? 万丈高楼平地起, 说明基础是很重要的, 因此,我们首先得从基础开始。在window

2015-10-28 09:50:12 754

原创 学习windows驱动(驱动对象)

驱动对象是框架中第一个被创建的对象,最后一个被删除的对象。 当驱动对象不存在了以后,其它子对象也就不存在了。 当获得驱动对象,就可以遍历获得它的所有子对象。 可以通过WdfGetDriver函数获得驱动对象句柄。WDFDRIVER driver = WdfGetDriver();驱动对象代表加载到系统空间的驱动模块。相同驱动文件,不管同时作用于多少设备,驱动对象总是唯一的。 可以把全局变量

2015-10-28 09:02:32 1172

原创 学习windows驱动(对象同步)

对象是一种会被争抢的共享资源,因此就要为它设置同步机制。框架对象内部包含了同步锁机制。 可以通过WdfObjectAcquireLock 和WdfObjectReleaseLock实现手动同步。简单方面的做法是采用自动同步机制。采用自动同步,先是确定同步范围,有两种可选同步范围: 设备同步(WdfSynchronizationScopeDevice)、队列同步(WdfSynckronizatio

2015-10-27 17:40:04 820

原创 学习windows驱动(父子关系)

WDF对象模型使用了父子概念,存在父对象和子对象的关系。 父对象和子对象是具象的,面向对象编程语言里所说的父类和子类是抽象的。 父对象对子对象有控制权,父对象被销毁时,会先销毁子对象。 一个驱动对应一个驱动对象,驱动对象是WDF对象的根对象。 在WDF驱动里,所有WDF对象,要么是驱动对象的子对象,要么是子对象的子对象。驱动对象生命周期由框架维护。 WDF框架对象间的父子关系是树型结构,父

2015-10-27 17:16:14 464

原创 学习windows驱动(DDI接口)

DDI接口就是形式如WdfXXXX()的函数。 进行WDF驱动开发,就是基于WDF提供的WdfXXXX()函数, 程序员在符合WDF框架要求下,填充自己的代码,达到驱动自己的硬件的目的。

2015-10-27 16:48:25 2759 1

原创 跟我一起学习windows驱动(PME接口)

WDF编程接口类似PME(Property/Method/Event)接口模型。 属性描述对象特性,通过Get或Retrieve获得属性,通过Set或者Assign设置属性。就像WdfDeviceGetDevicePnpState、WdfDeviceGetDevicePowerState和WdfDeviceSetDeviceState,都是设备对象的属性方法。 除了属性接口,WDF其它接口函数是

2015-10-27 16:36:03 1336

原创 跟我一起学习windows驱动编程(引用计数、上下文空间)

引用计数内核管理器为每个全局对象维护一个引用计数。 内核对象有一个对象头结构体_object_header。 _object_header里变量PointerCount和HandleCount,就是引用计数。 内核程序可以通过对象指针直接使用内核对象, 用户程序通过获取的有效HANDLE间接使用内核对象。WDF框架对象不是全局对象,因此,对象管理器不管理WDF框架对象。 通过句柄方式引用W

2015-10-27 14:47:42 1168

原创 跟我一起学习windows驱动编程(对象和句柄)

上回书说到对象,咱们是看不到对象的,我们可以使用句柄。 什么是句柄? 句柄是一个指针。 它的定义是:typedef void *HANDLE;在c:\Program Files (x86)\Windows Kits\8.1\Include\wdf\kmdf\1.11\wdftypes.h里可以看到句柄的定义://wdftypes.h//// General Handle Type, shou

2015-10-27 13:32:08 1297

原创 对象object

在编程语言里,对象是object的翻译。 Object翻译成汉语是物体或事物,从它的本意出发对象就是一个东西。 内核中称作对象的基本上都是结构体变量,像驱动对象DRIVER_OBJECT、设备对象DEVICE_OBJECT。 WDF里很多地方使用了“对象”的概念。 WDF对象成员包括:驱动对象、设备对象、内存对象、队列对象、IO请求对象、文件对象等。

2015-10-27 13:11:46 415

原创 认识一下WDF

概念WDF(Windows Driver Framework, Windows驱动框架)包含UMDF(User Mode Driver Framework, 用户模式驱动框架)和KMDF(Kernel Mode Driver Framework, 内核模式驱动框架)。内容概括:WDF是基于对象的框架,它包含:驱动对象、设备对象、IO请求对象、队列对象、目标对象等。 框架管理对象的生命周期。 框架

2015-10-27 11:57:02 4919

原创 svn的应用

摘要:svn是一个版本控制系统。 它分客户端和服务端。 服务端使用VisualSVN Server,客户端使用TortoiseSVN。服务端下载链接: https://www.visualsvn.com/files/VisualSVN-Server-3.4.2-x64.msi客户端下载链接: http://nchc.dl.sourceforge.net/project/tortoisesvn

2015-10-27 09:57:13 466

原创 一点一滴的积累坚持

无论做任何事,能持之以恒,当大多数都放弃时,你依然坚持不懈地学习、研究、解决一个个问题困难,你就可以掌握一门技术。简单讲,善于运用自己掌握的知识,不断增加自己知识面,才是学有成效的学习,对自己和团队都能带来很多益处。无论技术,还是管理,都要学习到家,精益求精,在几年的积累后,就会形成自己的东西。只要自己有了东西,才能得心应手的自由发挥。下面是windows驱动的简单示例代码,简单的打印一个字符串

2015-10-26 16:11:21 531

原创 驱动编程学习杂谈

当面对一个不熟悉的开发环境,或新基础平台,先弄明白新环境或平台它是如何工作,它提供哪些功能。 代码也许很复杂,甚至让人一时不能理解, 一般好的代码是简单易懂的。 比如用vs开发windows应用程序, 你就要理解vs的基本功能,比如消息分发机制、各种图形功能等。 阅读一些vs的demo例子程序的代码,能快速找到直观的感觉。 如果java程序员局限于java语言本身,很难写出高质量的实用

2015-10-26 14:42:23 360

原创 windows驱动开发学习笔记

编写程序,是一件什么一样的事情? 是一件很奇妙的事情吗? 它可以带来什么? 它能带给人什么感受? 它能带给人创造和控制的欲望吗? 每当一个人在阅读或者写一段代码时,脑子里会怎么想的? 脑子会想象那段代码怎样完成预定逻辑。 对于写代码或者维护代码的人来说,体现能力的地方不在代码本身,而是对下层开发平台的理解和驾驭能力。 怎么样子算熟练掌握windows驱动开发? windows驱动是

2015-10-26 11:49:04 773

C_C+++函数库.chm

c、c++编程语言的语法、运算符、基本库函数。便于查阅。

2013-12-19

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除