- 博客(96)
- 资源 (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
9236
原创 学习windows驱动(温习3)
今天没有下雨,虽然漫天的阴云,但经过昨天一天雨的洗涤,空气显得分外干净清澈。连马路都干净的锃光瓦亮的。虽然早晨六点多醒来,但没有立马起床。 而是打开手机上会儿网,似乎手机网络已经成为许多人的身体的一部分,无论走到哪里,无论是什么样的人,在走路的行人,或是坐在一旁休息的人,大人、小孩子,你都可以看得到他们都手持着一个现代的电子显示设备,把玩着各种电子设备。他们完全忘我的融入到了另一个电子世界里。
2015-10-30 10:11:18
181
原创 学习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
6117
原创 学习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
1491
原创 学习windows驱动(创建IO请求)
现在框架只把5种IRP请求封装层WDFREQUEST对象,实际上可以把任何IRP请求封装成WDFREQUEST对象。WDF驱动程序除了使用框架通过事件回调传递的WDFREQUEST对象外,还可以自己新建任何类型的WDFrequest对象。有两种方法创建WDFREQUEST对象。 第一种是创建空对象,在调用格式化函数,将对象格式化成指定类型的命令,现在框架只提供4种格式化函数,这种方法只能创建4种W
2015-10-29 16:19:19
1124
原创 学习windows驱动(队列)
WDF驱动里的队列类型种类有如下定义:typedef enum _WDF_IO_QUEUE_DISPATCH_TYPE { WdfIoQueueDispatchInvalid = 0, WdfIoQueueDispatchSequential, WdfIoQueueDispatchParallel, WdfIoQueueDispatchManual, WdfI
2015-10-29 15:35:30
1657
原创 学习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
1846
原创 学习windows驱动(内存对象)
内存对象有METHOD_BUFFERD、METHOD_DIRECT和METHOD_NEITHER三种。METHOD_NEITHER方式缓冲区在WDF里处理时比较复杂。 METHOD_NEITHER的IO请求不是来自用户程序,来自内存模块,获取缓冲区方式跟其它两种一样。特别的是如果IO请求来自用户程序,则缓冲区是在用户空间申请的,在内核使用用户缓冲,有许多限制,它要与指定的进程上下文相关才有效。这时
2015-10-29 14:11:49
1665
原创 学习windows驱动(温习2)
hello,今天的中环边界靠近徐汇区的天气不太好,下着雨。打着雨伞,背着双肩包,踩着单车,我就踏上了上班的路。一路上车流不息。虽然是雨天,骑自行车、电瓶车、摩托的人数依然不见有所减少。人们有的披雨披,有的打伞。照样行进在马路上。说到对象这个概念,它是一个具象的东西。以人类为例子,每个人都是一个人类对象,它有眼睛、鼻子、耳朵等属性,人能说话,看见东西,听见声音,走路等等,这些就是人有的方法。这样子就好
2015-10-29 11:03:02
703
原创 学习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
1291
原创 学习windows驱动(缓冲区溢出)
在WDF里,IO请求对象使用了WDFMEMORY对象来表示输入/输出缓冲区。 WDFMEMORY内部维护了内存指针、内存区长度、有效长度(字符串长度)。 维护内存区生命期,框架负责申请释放自己的内存,驱动自己创建内存,由驱动自己负责释放。 可以使用偏移量offset来实现内存区任意部分的使用。实际可用的内存区长度是总长度减去偏移值。 内存对象怎么使用?要使用内存对象,首先要创建内存对象。
2015-10-28 17:39:40
2679
原创 学习windwos驱动(IO模型)
IO管理器将IO请求封装成IRP结构体发往内核驱动。 WDF能够判断成IRP请求是直接在框架内部处理,还是调用WDF驱动注册过的事件回调,交回驱动处理。如果调用事件回调,就必须将IRP封装成框架请求,也就是WDFREQUEST对象。 一般情况,WDF驱动不直接操作IRP。IO目标对象叫做WDFIOTARGET。 WDFIOTARGET封装了DEVICE_OBJECT,它跟WDFDEVICE对象
2015-10-28 13:28:24
801
原创 学习windows驱动(设备对象设备栈)
IO相关的操作是围绕设备对象进行的。设备对象分下几类:1、功能设备对象(FDO): 功能驱动为设备创建一个FDO,在设备栈里它位于物理设备(PDO)的上层。2、物理设备对象(PDO): 总线驱动创建PDO,逻辑上代表物理设备本身,功能设备对象(FDO)代表系统对这个PDO做的处理。FDO为什么会被总线驱动创建?是因为FDO代表的物理设备连接到此总线设备上,总线驱动起了承担总线设备的功能驱动作用。3.
2015-10-28 10:50:48
2414
原创 学习windows驱动(回顾1)
温故而知新。到现在为止,我们来回想一下已经接触了哪些windows驱动的知识点。 首先,windows驱动是什么? 驱动是一个软件,负责承上启下, 承上就是与用户程序打交道,提供接口给用户使用; 启下就是跟系统内核和硬件打交道,负责读写操作硬件。 那么,驱动是怎么实现的? 需要掌握哪些概念和知识呢? 万丈高楼平地起, 说明基础是很重要的, 因此,我们首先得从基础开始。在window
2015-10-28 09:50:12
832
原创 学习windows驱动(驱动对象)
驱动对象是框架中第一个被创建的对象,最后一个被删除的对象。 当驱动对象不存在了以后,其它子对象也就不存在了。 当获得驱动对象,就可以遍历获得它的所有子对象。 可以通过WdfGetDriver函数获得驱动对象句柄。WDFDRIVER driver = WdfGetDriver();驱动对象代表加载到系统空间的驱动模块。相同驱动文件,不管同时作用于多少设备,驱动对象总是唯一的。 可以把全局变量
2015-10-28 09:02:32
1255
原创 学习windows驱动(对象同步)
对象是一种会被争抢的共享资源,因此就要为它设置同步机制。框架对象内部包含了同步锁机制。 可以通过WdfObjectAcquireLock 和WdfObjectReleaseLock实现手动同步。简单方面的做法是采用自动同步机制。采用自动同步,先是确定同步范围,有两种可选同步范围: 设备同步(WdfSynchronizationScopeDevice)、队列同步(WdfSynckronizatio
2015-10-27 17:40:04
893
原创 学习windows驱动(父子关系)
WDF对象模型使用了父子概念,存在父对象和子对象的关系。 父对象和子对象是具象的,面向对象编程语言里所说的父类和子类是抽象的。 父对象对子对象有控制权,父对象被销毁时,会先销毁子对象。 一个驱动对应一个驱动对象,驱动对象是WDF对象的根对象。 在WDF驱动里,所有WDF对象,要么是驱动对象的子对象,要么是子对象的子对象。驱动对象生命周期由框架维护。 WDF框架对象间的父子关系是树型结构,父
2015-10-27 17:16:14
535
原创 学习windows驱动(DDI接口)
DDI接口就是形式如WdfXXXX()的函数。 进行WDF驱动开发,就是基于WDF提供的WdfXXXX()函数, 程序员在符合WDF框架要求下,填充自己的代码,达到驱动自己的硬件的目的。
2015-10-27 16:48:25
2973
原创 跟我一起学习windows驱动(PME接口)
WDF编程接口类似PME(Property/Method/Event)接口模型。 属性描述对象特性,通过Get或Retrieve获得属性,通过Set或者Assign设置属性。就像WdfDeviceGetDevicePnpState、WdfDeviceGetDevicePowerState和WdfDeviceSetDeviceState,都是设备对象的属性方法。 除了属性接口,WDF其它接口函数是
2015-10-27 16:36:03
1429
原创 跟我一起学习windows驱动编程(引用计数、上下文空间)
引用计数内核管理器为每个全局对象维护一个引用计数。 内核对象有一个对象头结构体_object_header。 _object_header里变量PointerCount和HandleCount,就是引用计数。 内核程序可以通过对象指针直接使用内核对象, 用户程序通过获取的有效HANDLE间接使用内核对象。WDF框架对象不是全局对象,因此,对象管理器不管理WDF框架对象。 通过句柄方式引用W
2015-10-27 14:47:42
1304
原创 跟我一起学习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
1421
原创 对象object
在编程语言里,对象是object的翻译。 Object翻译成汉语是物体或事物,从它的本意出发对象就是一个东西。 内核中称作对象的基本上都是结构体变量,像驱动对象DRIVER_OBJECT、设备对象DEVICE_OBJECT。 WDF里很多地方使用了“对象”的概念。 WDF对象成员包括:驱动对象、设备对象、内存对象、队列对象、IO请求对象、文件对象等。
2015-10-27 13:11:46
445
原创 认识一下WDF
概念WDF(Windows Driver Framework, Windows驱动框架)包含UMDF(User Mode Driver Framework, 用户模式驱动框架)和KMDF(Kernel Mode Driver Framework, 内核模式驱动框架)。内容概括:WDF是基于对象的框架,它包含:驱动对象、设备对象、IO请求对象、队列对象、目标对象等。 框架管理对象的生命周期。 框架
2015-10-27 11:57:02
5305
原创 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
543
原创 一点一滴的积累坚持
无论做任何事,能持之以恒,当大多数都放弃时,你依然坚持不懈地学习、研究、解决一个个问题困难,你就可以掌握一门技术。简单讲,善于运用自己掌握的知识,不断增加自己知识面,才是学有成效的学习,对自己和团队都能带来很多益处。无论技术,还是管理,都要学习到家,精益求精,在几年的积累后,就会形成自己的东西。只要自己有了东西,才能得心应手的自由发挥。下面是windows驱动的简单示例代码,简单的打印一个字符串
2015-10-26 16:11:21
583
原创 驱动编程学习杂谈
当面对一个不熟悉的开发环境,或新基础平台,先弄明白新环境或平台它是如何工作,它提供哪些功能。 代码也许很复杂,甚至让人一时不能理解, 一般好的代码是简单易懂的。 比如用vs开发windows应用程序, 你就要理解vs的基本功能,比如消息分发机制、各种图形功能等。 阅读一些vs的demo例子程序的代码,能快速找到直观的感觉。 如果java程序员局限于java语言本身,很难写出高质量的实用
2015-10-26 14:42:23
417
原创 windows驱动开发学习笔记
编写程序,是一件什么一样的事情? 是一件很奇妙的事情吗? 它可以带来什么? 它能带给人什么感受? 它能带给人创造和控制的欲望吗? 每当一个人在阅读或者写一段代码时,脑子里会怎么想的? 脑子会想象那段代码怎样完成预定逻辑。 对于写代码或者维护代码的人来说,体现能力的地方不在代码本身,而是对下层开发平台的理解和驾驭能力。 怎么样子算熟练掌握windows驱动开发? windows驱动是
2015-10-26 11:49:04
854
原创 寻找期盼、渴求和激情
已经有许久没有浏览网页,浏览网页,就像饿了的时候吃快餐,快,垫个饥,只是满足最低层次的需求,根本没有什么精华和美味的享受和体验。 价值,在你最需要的时候实现你的需求的东西,其他都是浮云。 当然有幸选择合适的机会,那也是很幸运的。 不知道是自己脑子不灵光,还是作者写作水平的问题,很多情况下,我们根本不清楚作者讲的是什么?我甚至怀疑作者是否清楚自己要做什么了?真是浪费人的精力
2014-03-10 10:03:04
543
原创 讲究
讲究。它分两个方面,一个是自我,另一个是外在。自我的对自我的讲究,自我对外在的讲究,外在对自我的讲究,外在对外在的讲究。曾经听过,人活一世,图啥?不就是为了人前的脸面,为了一口气,为了更有优越感和存在感,或者说能够被众星捧月就更好了。凡是都是有个规则。国有国法,家有家规,狼有狼法。一切都有一个一般法则,甭管这个规则怎么样,它就是个讲究。讲究什么,就会在乎什么。一个人很讲究卫生,
2013-12-20 09:57:47
533
原创 跟着感觉走
日子,一天天的过。日出而做,日落而息。生活不停地的重复,显得单调乏味,像是永远走不到终点的楼梯,走来走去,依然是没有什么变化,仿佛从未干过什么。生活是很有意思的,要么随波逐流,要么特立独行,走自己的路,让别人去说吧。说好也是别人说,说坏也是别人说。听进去了,就是你自己的事情,听不进去,那就是个屁。走在路上,形形色色的事物,各有各的心思,各有各的想法。唯一共同的是时间和地点,其他
2013-12-19 15:52:58
614
原创 程序员人生00
最近几天的天气不太好,雾气沉沉的。我每天都是走路来交通,显然这样的天气对于走路的人是个极其坏的。走下一程来,感觉肚子里快成了黄土高坡了。言归正传,话题是程序员人生,就得回到这茬儿上来。在我的感觉, 程序员的程度各有千秋,他们很少有销售人员那般滔滔不绝的讲话机会,似乎没有了讲话这一技能。程序员跟翻译非常的相似,在不同交流对象之间搭建了另一个沟通的桥梁。什么样程度和
2013-11-08 14:11:25
467
原创 开启智慧之门
秋高气爽,很舒适。桌上的绿叶在随风招展,像淘气的小孩在跳着混乱的舞蹈。每天,到了四点多的时候,都会有一个小男孩儿,背着个小书包,叽里呱啦的从旁边经过。这孩子的爹妈就在这里。作为一观察着,我很是好奇。小孩儿奔奔跳跳,自己幻想着各种各样的有戏和伙伴,一会儿奔跑,一会儿蹲下,一会儿静悄悄,一会儿大叫:“快,怪兽追来了,赶紧逃...”短短的时间里,小男孩已经经历过多种角色,从小人物
2013-09-05 11:14:03
477
原创 编程这个行当
行业不同,人员不同。 编程这个行当,有多少人从事其中?有多少故事可述可评? 所见之处,编程速成,编程简单,这是个什么行当? 见得深山狂野,高原辽阔,了解一个对象,需要多少心情和汗水? 光有心情和汗水就能通晓其吗? 既然不知其然,就更难知其所以然了。 计算机的诞生,衍生了编程这个行当。 从事这个行当的人,都在做什么事呢?
2013-08-02 14:18:14
510
原创 CmdExec(FileAccess *s,LocalDirectory *c)方法研究
CmdExec::CmdExec(FileAccess *s,LocalDirectory *c) : SessionJob(s?s:new DummyProto){ init(c);}该构造函数有两个参数s和c。首先用s初始化SessionJob,在执行方法init(c)。SessionJob(FileAccess *s)是CmdExec的基类Sessio
2013-08-01 09:20:33
721
原创 lftp是什么
lftp是什么?是little ftp,还是large ftp,还是什么lxxx ftp。 不晓得,也应该猜的不对,或许有其他意想不到的原因。 作为摸索,加些胡思乱想,自然情有可原。 lftp.cc,使用CmdExec类对象来实现程序运行功能。 先来看看CmdExec是啥玩意儿?有什么作用?简单看一下类结构。
2013-07-31 15:25:45
1131
原创 想象力 拆解lftp 1
天气火热,那劲头着实让人惊叹。让生灵怎么过活。 室外走一圈,被晒得火辣辣的痛,感觉脸皮快要从脸上被剥掉似的。 困惑时不时会有一点,就像云雾时不时会有的。 怎么拨开云雾见得天日?想象力和执行力让一切皆有可能。 lftp。c++语言设计的ftp应用程序。 从使用的直观体验来看,跟shell一样,在终端上输入一串字符串,回车,终端来执行命令解析,命令运算
2013-07-31 14:16:18
506
原创 思维
坐着。 闭起眼睛。 开始体会思维的感觉。 状态不错,从何开始呢? 炎炎夏日,就像火炉。 让思维引着肉体进入冰雪世界。 身体装模做样配合一下,瑟瑟的发抖。不热,一点都不热,好冷,冷得手都冻僵了。 思维,创造另一种可能。 创造一种奇迹。 书静静躺在那里。
2013-07-30 19:14:40
451
原创 Growing diary 1
What do you want? What do computer do? How does it works? From inside to outside, it works with electron.It gets and send messages. The message ,physical or virtu
2013-07-30 17:39:17
681
原创 lftp源代码gdb
Breakpoint 1, main (argc=1, argv=0xbfb9f854) at ../../src/example1.cc:1515 FileAccess *f=FileAccess::New("ftp","ftp.yar.ru");(gdb) sFileAccess::New (proto=0x80bf14f "ftp", host=0x80bd028
2013-07-30 16:47:34
760
原创 运行程序,报没有libxxx.so的问题
【Q】/mnt/hgfs/VM_SHARE/cpp_prj/so_build在目录上目录面建立一个so_example.c //so_example.c#include void foo(){ printf("calling library function\n");}编译动态库:gcc -fPIC -shared so_example.c -o
2013-07-15 17:08:43
891
opensuse12.2系统下Qt-4.8.4库流媒体视频播放问题
2014-09-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅