- 博客(47)
- 资源 (2)
- 收藏
- 关注
翻译 Page Flipping and BackBuffering
Page flipping is key in multimedia,animation, and game software. Software page flipping is analogous to the way animation can be done with a pad of paper. On each page the artist changes the figure sl
2012-06-28 14:26:04 1139
原创 关于向量的点积和叉乘
设向量A=(x1,y1,z1),B=(.(一)向量的点积向量的点积定义: AB=|A||B|cos其运算结果是一个常量。将其转换成矩阵乘法是AB = matrix(A)*matrix(B)=(x1,y1,z1)*(x2,y2,z2)=x1*x2 + y1*y2 + z1*z2 。(
2012-06-19 12:09:29 13230
原创 用 Graphviz 可视化函数调用
为了捕获并显示调用图,您需要4个元素: ①GNU编译器工具链 ②pvtrace ③instrument.c ④Graphviz使用方法:1.安装pvtrace和graphviz工具:$ Sudo apt-get instal
2012-03-27 15:15:36 1739
原创 win32驱动开发中的内存偏移问题
在反汇编一个windows下的usb设备驱动的过程中,我发现windows环境下的内存地址偏移计算结果与IDA计算结果的差异。最主要体现在偏移量的计算上,windows环境下的偏移是按照源地址类型来确定偏移量的。 源代码:.text:00010C78 ; ---------
2011-07-14 13:37:47 809
原创 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 874
原创 bat脚本编写
今天在编译驱动的时候为了能够实现一键编译 写了下面的一个脚本: C:/windows/system32/cmd.exe -k C:/WinDDK/7600.16385.1/bin/setenv.bat C:/WinDDK/7600.16385.1/ chk x86 WXP L: cd L:/Xnet/ build pause 运行之后不见没有效果,还是在命令提示符下面,连L盘都没有进去,编译环境还是没有设置对,查看了bat的语法规则只有,修改成: call C:/WinDDK/7
2011-04-08 15:28:00 1120
原创 WDK中的Prefast工具使用
如何使用PREfast 你可以使用PREfast来分析内核模式的驱动(KMDF)和其他内核模式的组件。你也可以使用PREfast来分析用户模式的驱动,即UMDF。PREfast是WDK自带的,你不需要自己再次安装。 默认情况下, PREfast是根据KMDF的规则来分析代码的。为了能够分析UMDF,你必须设置分析模式为__user_driver,详情见 “如何指定PREfast分析模式”, 或者更简单的方式是,直接忽略内核相关的警告. 如何指定PREfast 分析模式 PREfast分析模式决定了它
2011-01-13 10:18:00 4037
原创 如何设置IRP中的功能码?
I/O栈的结构体定义大概有440几行,定义了很多很多参数,让人应接不暇。我演示我们实际使用中需要使用的几个参数。 ⅠDeviceIoControl方式 传入I/O栈的参数结构体,详见IO_STACK_LOCATION结构体 struct { ULONG OutputBufferLength; ULONG
2010-11-19 10:30:00 679
原创 应用程序与驱动程序的通信
Windows应用程序与WDM通信的一般过程是: ①应用程序先用CreateFile函数打开设备, ②然后用ReadFile从WDM中读取数据,用WriteFile函数向WDM写数据,用DeviceIoControl函数向WDM发送自定义的控制信息, ③最后用CloseHandle函数关闭设备。对于异步IO请求还可以用CancelIo函数取消。 IRP的详细图示如下: 这些函数调用使得IO管理器产生相应的IRP发送给驱动程序 用户空间函数
2010-11-18 10:05:00 1993
原创 IWDFIoRequest::SetCompletionCallback(设置完成回调函数)
SetCompletionCallback 方法为OnCompletion方法注册了接口,当I/O请求完成时,框架会调用这个回调函数. void SetCompletionCallback( IN IRequestCallbackRequestCompletion* pCompletionCallback, IN void* pContext ); 参数 pCompletionCallback 这个指针指向IReque
2010-11-17 06:32:00 1272
转载 内核同步对象(上)
<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 1333
转载 内核同步对象(下)
<br />出处:http://hi.baidu.com/wukongafei/blog/item/76766a43a13dc6159213c646.html<br /> 内核互斥对象<br />互斥(mutex)就是互相排斥(mutual exclusion)的简写。内核互斥对象为多个竞争线程串行化访问共享资源提供了一种方法(不一定是最好的方法)。如果互斥对象不被某线程所拥有,则它是信号态,反之则是非信号态。当线程为了获得互斥对象的控制权而调用KeWaitXxx例程时,内核同时也做了一些工作以帮助避免可能
2010-11-11 16:23:00 1676
转载 WINDOWS 蓝屏错误代码说明一览表
<br /><br />出处:http://blog.csdn.net/floweronwarmbed/archive/2008/11/01/3201554.aspx<br /> <br />数 值 叙 述<br /> <br />0 0x0000作业完成。<br />1 0x0001不正确的函数。<br />2 0x0002系统找不到指定的档案。<br />3 0x0003系统找不到指定的路径。<br />4 0x0004系统无法开启档案。<br />5 0x0005拒绝存取。<br />6 0x0006
2010-11-11 15:22:00 686
转载 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 1331
转载 实战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 555
转载 在内核模式下创建和终止线程
出处: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 2640
转载 驱动编程学习笔记之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 3051
转载 如何从内核模式设备驱动程序中打开一个文件以及如何读取或写入文件(来自微软官网)
如何从内核模式设备驱动程序中打开一个文件以及如何读取或写入文件对象名称来引用文件内核模式设备驱动程序对象名称来引用文件。 此名称是 /DosDevices 一起与该文件的完整路径。 是例如 C:/Windows/Examp...对象名称来引用文件内核模式设备驱动程序对象名称来引用文件。 此名称是 /DosDevices 一起与该文件的完整路径。 是例如 C:/Windows/Example.txt 文件的对象名称将是 /DosDevices/C:/Windows/Example.txt。 然后通过调用 In
2010-11-11 15:08:00 2641
转载 使用 C++ 编写内核模式驱动程序的优点与缺点
<br />使用 C++ 编写内核模式驱动程序的优点与缺点本页内容简介内核模式代码注意事项将 C++ 编译器用于内核模式代码内核模式驱动程序的 C++ 问题结束语参考资料<br /> <br />C++ 及其对象特性似乎与 Microsoft Windows Driver Model (WDM) 和 Windows Driver Foundation (WDF) 驱动程序的语义非常吻合。但是,对于内核模式驱动程序,C++ 语言的一些特性可能导致难以发现和解决的问题。为了帮助您进行合理选择,本文将与您分享来自
2010-11-11 15:05:00 1413
转载 有效使用内存的 6 条技巧(来自微软官网)
<br />有效使用内存的 6 条技巧本页内容有效布局数据结构并尽可能重用它们。在启动时将未分页的池内存用于长期用途。经济有效地使用内存使用后备列表避免频繁地建立和取消虚拟地址空间的映射测试与验证资源<br />本文提供在 Microsoft Windows 家族操作系统内核模式驱动程序中有效使用内存的技巧。有效使用内存有助于提高驱动程序性能。以下是有效使用内存的 6 条技巧。有效布局数据结构并尽可能重用它们。<br />设计驱动程序时,根据内存类型、大小和生命周期来计划内存分配。合并类似生存期的内存分配,
2010-11-11 15:04:00 1063
原创 开发人员在使用 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 509
原创 开发人员在使用 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 462
转载 WDM驱动之IRP处理:取消IRP
IRP请求的最终结局无非有两个:要么被完成了,要么被取消了。完成IRP请求的过程已经在前面讲过了,这里仔细讲一个IRP请求的取消。 为什么要取消IRP请求呢?一般来讲,原因不外乎是本请求操作超时或设备故障导致的。具体理解,可以考虑如下两种情形: 情形1:驱动发送一个请求到下级驱动,下级驱动由于忙,将它放到自己的请求队中去,下级驱动一直忙,请求一直没有得到处理,而这个请求又比较重要,如果一直得不到处理就会造成系统处于死锁。于是,驱动就会给这个请求加上超时机制,若超过一定的时间还没有得到处理结果,就通
2010-11-11 13:03:00 895
原创 内核API之IoAllocateMdl
IoAllocateMdl IoAllocateMdl 函数分配足够映射一块缓存的MDL,给定缓存的起始地址和长度. PMDL IoAllocateMdl( __in_opt PVOID VirtualAddress, __in ULONG Length, __in BOOLEAN SecondaryBuffer, __in BOOLEAN ChargeQuota, __inout_opt PIRP Irp OPTIONAL
2010-11-11 12:43:00 10525
原创 内核API笔记之IoBuildPartialMdl
IoBuildPartialMdl VOID IoBuildPartialMdl( __in PMDL SourceMdl, __inout PMDL TargetMdl, __in PVOID VirtualAddress, __in ULONG Length ); 驱动程序可以使用IoBuildPartialMdl来把一个IRP请求分解成多个IRP请求. The physical pages that the s
2010-11-11 11:11:00 2516
原创 关于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 633
原创 Vs2005调试cpl(控制面板)程序的设置
<br /><br />cpl程序是一种特殊的dll程序。<br /> <br />它的入口点是CPlApplet<br /> <br />调试.cpl程序需要进行一些特殊的设置。<br /> <br />在工程的配置属性-->调试里,把<br /> <br />命令 设置为C:/WINDOWS/system32/rundll32.exe;<br /> <br />参数 设置为 shell32.dll,Control_RunDLL 要调试的CPL.cpl<br />工作目录 设置为C:/WINDOWS/SY
2010-10-10 16:04:00 630
转载 Visual studio 2005配置成WDK的开发环境
1:首先安装好WDK,然后进入"开始"->"所有程序"->"Windows Driver Kits"->"WDK XXXX.XXXX.X" ->"Windows XP"->"x86 Checked Build Environment"在弹出来的命令行窗口中输入"Build",让它自动生成所需要的库,等待它执行完2:打开VS2005,在菜单上选择"工具"->"选项"弹出"选项"窗口,选择"项目和解决方案"->"VC++目录","显示以下内容的目录" "可执行文件"中添加 "C:/WinDDK/7600.1
2010-10-09 15:34:00 1320
转载 Scrum简介
<br />一 什么是Scrum?<br /><br />Scrum (英式橄榄球争球队), 软件开发模型是敏捷开发的一种,在最近的一两年内逐渐流行起来。<br /><br />Scrum的基本假设是:<br /><br />开发软件就像开发新产品,无法一开始就能定义软件产品最终的规程,过程中需要研发、创意、尝试错误,所以没有一种固定的流程可以保证专案成功。Scrum 将软件开发团队比拟成橄榄球队,有明确的最高目标,熟悉开发流程中所需具备的最佳典范与技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑
2010-10-09 08:57:00 457
原创 利用OpenCV播放AVI的例子
// opencvhello.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include int AVI_position = 0; //当前播放到的位置 CvCapture
2010-08-17 06:16:00 2888
转载 syntax error : missing ';' before 'type'错误
<br /> <br />在VC6中运行以下代码<br />////////////////////////////////<br />//main.c<br />#include <stdio.h><br />int main()<br />{<br /> char a[100];<br /> memset(&a, 0, 100);<br /> char b;<br /> return 0;<br />}<br />/////////////////////////////////<br />编译器将会报
2010-06-23 10:18:00 613
转载 syntax error : missing ';' before 'type'错误
<br /> <br />在VC6中运行以下代码<br />////////////////////////////////<br />//main.c<br />#include <stdio.h><br />int main()<br />{<br /> char a[100];<br /> memset(&a, 0, 100);<br /> char b;<br /> return 0;<br />}<br />/////////////////////////////////<br />编译器将会报
2010-06-23 10:18:00 490
原创 常用命令
<br />删除一个文件夹:rm -r 文件夹名<br />挂在硬盘: mount /dev/sda1 /media/work<br />添加自定义命令:在/etc/bash.bashrc中添加下列语句<br /> alias ll=“ls -l”<br /> <br />
2010-06-23 10:16:00 321
原创 linux命令
删除一个文件夹:rm -r 文件夹名挂在硬盘: mount /dev/sda1 /media/work添加自定义命令:在/etc/bash.bashrc中添加下列语句 alias ll=“ls -l”
2010-03-26 10:06:00 456
原创 WinXP下用用户名和密码访问Ubuntu共享文件------Samba服务!
##########################下面代码里面的“dir”是指你自己共享文件夹的路径######################### 下面我们来共享群组可读写文件夹,假设你要共享的文件夹为: /home/ray/share首先创建这个文件夹 代码: #mkdir /dir/share #chmod 777 /di
2009-07-22 12:13:00 3579
转载 uC/OS-II如何使任务在就绪表中进入就绪态与退出就绪态
程序清单:使任务进入就绪态OSRdyGrp |= OSMapTbl[prio>>3]; (1)OSRdyTbl[prio>>3] |= OSMapTbl[prio&0x07];
2009-07-20 16:28:00 1289
原创 编译ARM-Linux-Gcc工具链!
昨天早晨就开始准备编译工具链了,这样就可以接下去学习第三章了,郁闷的是,我编译过程总是出错,我就在想是不是我输入错误呢,看出错提示,也不是这种类型的啊!就停在这里不动了。 今天下午,我着重比较了一下书中的步骤,我是按部就班的,所以应该不是步骤的错误,它使用的是ubuntu7,而我使用的是ubuntu9,隐隐感觉到是操作系统的原因,所以我查看了GCC的版本,是4.3的版本,感觉就是版本太高
2009-07-16 15:11:00 751
原创 ARM7的定时器配置!
ARM7的定时器是采用分频的方式来实现定时的,也就是说在配置定时器之前,一定要弄清楚Fpclk的频率是多少。 (ARM7的时钟概念,Fosc是晶振的频率,Fcclk是PLL输出频率(也就是处理器的时钟频率),Fcclk=M×Fosc,M是PLLCFG寄存器中的MSEL位的倍增器值。PLLCFG的MSEL[0~4].其中Fcclk最大不能超过60MHz)
2009-07-10 15:25:00 1512
转载 NXP ARM7 必须知道的例子!
寄存器和工作模式:7种工作模式:fiq/irq/abt/und/sys/usr/svc。通过"MSR cpsr_c,#0xdx"切换。上电时进入svc模式。svc和usr的区别是:svc可以通过"MSR cpsr_c,#0xdx"自由切换到其它任何模式,但是usr不可以。各模式下有自己的堆栈。要在程序启动后依次进入各个模式分别设置自己的堆栈,最后进入usr模式。好多个寄存器:r0 - r7 (a1
2009-07-10 09:22:00 6376 1
转载 嵌入式C 面试题
预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式
2009-07-08 16:05:00 3001
uCGUI3.94源码
2009-09-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人