- 博客(82)
- 资源 (7)
- 收藏
- 关注
原创 windows实体机调试虚拟机内的应用程序
工具:VS的SDK内有目录Remote Debugger,下面的msvsmon.exe(1)将此工具拷贝的到虚拟机上的windows系统中(2)直接运行,设置如下:(3)在实体机上vs设置:调试--->附件到进程:到此就完成了联调,下面就可以开始调试了。。
2015-03-20 14:52:56
726
原创 MFC调用atl简单对象
#import "../comTest/Debug/comTest.tlb"using namespace comTestLib;void CcallComDlg::OnBnClickedButton1(){ CoInitialize(NULL); ////////////////////////////////////////////////////////////////////
2014-10-30 10:10:46
1420
原创 解析NDIS包描述符和缓冲区描述符---发送与接收数据的获取和处理
解析NDIS包描述符和缓冲区描述符///////////////////////////////////////////////////////////////////////////////////////////////解析数据包:(1)获取包描述符信息VOID NdisGetFirstBufferFromPacket( IN PNDIS_PACKET Packe
2014-09-11 17:18:16
758
原创 适配器模式
#pragma once#include #include using namespace std;/*//适配器模式定义:将一个类的接口转换成客户希望的另外的一个接口。使得原来不能在一起工作的类可以一起工作。应用:主要希望复用一些现存的类或第三方的插件库,但是接口又与复用环境要求不一致。两个类所做的事情相同或相似,但是具有不同的接口,并且在双方都不太容易修改的情况下再使用适配
2014-08-28 10:51:19
553
原创 命令模式和职责链模式
#include #include #include using namespace std;/*命令模式和职责链模式把这两个模式放在一起学习,因为觉得对比起来学习更有效果。前者是多个命令交付给一个指定的处理者去处理后者是将一个请求,按链式方式交付给多个执行者,找到其中适合执行的执行者去操作。命令模式中主要是处理多个命令,通过中间人对命令的整理与修改,最后将命令名单发送给执行
2014-08-26 15:22:46
792
原创 有关c/c++中位域的疑问
#include #include /*位域: 把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数(1)一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始(2)由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过 8 位二进位。(3)位域可以无位域名,
2014-08-26 10:17:05
723
原创 桥接模式
#include "stdafx.h"#include using namespace std;/*桥接模式定义:将抽象部分与它的实现部分分离,使它都可以独立的变化解释(1):抽象与实现分离,并不是说,让抽象与其派生类分离,因为这没有任何意义。实际指的是抽象类和它的派生类用来实现自己的对象。解释(2):实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让
2014-08-25 13:28:54
539
原创 创建类模式总结-简单工厂、工厂、抽象工厂、建造、原型
#pragma once#include #include using namespace std;#define SAMPLE_FACTORY 0#define FACTORY_MODE 0#define ABSTRACT_FACTORY 0#define ABSTRACT_FACTORY_OPTIMAL 0#define BUILDER_MODE 1
2014-08-19 11:37:30
562
原创 观察者模式
#pragma once#include #include #include using namespace std;/*观察者模式(适合设计一个事件触发处理机制的功能)(1)定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。其实质是被观察者类中关联一下观察者类,并且在处理一些事情后,遍历观察者类的相关的方法。角色:(a)
2014-08-18 16:33:44
497
原创 建造者模式
#pragma once#include #include using namespace std;/*建造者模式要素:(1)构建产品类Product,产品类实现具体制作的产品的各个组件。一般会有比较多的代码量。产品类可以是一个具体的类,也可以是抽象类。(2)构建抽象建造者类IBuilder,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一
2014-08-18 11:14:23
486
原创 工程模式(一)简单工厂模式
#pragma once#include #include using namespace std;/*简单工程模式(1)创建产品抽象类(2)创建不同派生类继承产品抽象类(3)创建工厂类,在工厂类中添加创建产品的方法,并返回产品抽象类的对象指针(4)在该方法中根据不同的产品类别,实例化对应的产品对象,并返回创建的产品对象的指针*/enum{ PRODUCT_PRO1 =
2014-08-17 21:57:52
1123
原创 单例模式(懒汉模式)
#pragma once#include #include using namespace std;/*懒汉单例模式(1)私有化构造函数禁止实例化对象(2)私有化静态类成员指针禁止外部直接操作此指针(3)初始化静态类成员指针为NULL(4)创建共有成员静态方法,判断并初始化静态类成员指针*/class signal{private: signal(){}; stati
2014-08-17 21:44:39
587
原创 windbg调试基础
(1)每个命令都有各自的使用范围,不支持的指令会显示“No export XXX Found”(2)调试命令分为三种:基本命令、元命令、扩展命令。基本命令和元命令是调试器自带的。元命令总是以“.”开始,而扩展命令是外部加入的,总是以“!”开头。(3)基本命令的帮助指令为“?” ,元命令的帮助指令为“.help [/D] ” ("/D"可以以DML的方式设置链接)(4)扩展命令从DLL
2014-08-15 10:37:53
1228
转载 应用程序与驱动通信的若干方式
应用程序与驱动传递数据方法:1. METHOD_BUFFERED 输入输出缓冲区都被映射到系统地址Irp->AssociatedIrp.SystemBuffer上 inBuf = Irp->AssociatedIrp.SystemBuffer outBuf = Irp->AssociatedIrp.SystemBuffer 因此在你打算通过outBuf输出数据时
2014-08-08 16:19:39
1904
原创 wdf模型开发虚拟磁盘
主要搞清楚物理磁盘的结构整个物理磁盘的第一个扇区为MBR,BIOS加载完后将调用MBR。MBR中主引导程序负责从活动分区中装载和运行系统引导程序。MBR的引导程序后面是硬盘分区表(DPT),用占64字节,记录物理磁盘的每个逻辑分区的起始位置,从这个起始位置开始的部分成为DBR(系统引导记录)。DPT的后面是有效结束标志(0x55AA),没有这个标志,操作系统会认为磁盘没有初始化,无法正确加载磁
2014-08-04 16:36:15
1271
原创 LIST_ENTRY
链表是驱动开发中经常遇到的一个数据结构,主要是双向循环链表;要使用链表,需要用到一个LIST_ENTRY的结构,其定义如下:typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; // 指向下一个节点 struct _LIST_ENTRY *Blink; // 指向前一个节点} LIST_E
2014-07-25 17:04:51
642
原创 NDIS驱动(一)协议驱动
NDIS网络驱动分类协议驱动:上层直接提供应用层socket使用的数据传输接口,下层绑定小端口驱动用于发送和接收以太网包、小端口驱动:直接针对网卡,给协议驱动提供接收和发生数据的能力中间层驱动:以一种特殊的方式插入到协议驱动和小端口驱动之间,作为过滤驱动的最佳选择。协议驱动使用wdk下的ndisport工程,不提供传输层接口,只是只有ReadFile、WriteFile
2014-07-25 15:31:19
4879
原创 8086寄存器
8086寄存器:概念:CPU访问内存(物理地址): 物理地址 = 基地址+偏移地址基地址是由端地址左移4位生成的,然后在寄存中和偏移地址在地址加法器中相加构成真正的物理地址。段:在编程时,将一段连续的内存单元看成是一个段,通过将一个段地址左移4位形成基地址(段起始地址),再通过偏移地址定位到段中的内存单元。段的起始地址肯定是16的整倍数(段地址左移4位),一个段
2014-07-24 09:35:14
1148
1
转载 使用Softice调试驱动程序
近日使用Softice的一些心得,主要是一些网上看到的相关资料,遇到的问题,自己探索的解决方法。 我使用softice的环境:操作系统XP( SP2 ),Softice是Driverstudio3.2自带的版本。 初级篇 1、不要使用USB的键盘和鼠标,这个Softice不支持。已试过。 2、显卡驱动很关键,要不会出现花屏现象。为了支持"Universal Vide
2014-07-22 14:14:33
1343
1
原创 vs2012+wdk8.0 搭建wdf驱动开发环境
开发环境搭建:系统:win7 x64工具:vs2012 + WDK8.0插件:wdfcoinstaller.msi(1)先安装vs2012,再安装wdk8.0,这样在打开vs2012时可以创建windows drivers类型的工程。注:vs2012不能安装wdk8.1,wdk8.1必须安装在vs2013上下载链接:http://msdn.microsoft.com/zh-
2014-07-15 16:18:38
2120
原创 WDF模型驱动-初稿
WDF特点:(1)系统兼容,内部磨合了系统、平台间的差异,对外提供了统一的DDI接口(2)基于对象的框架。 有一个最基本的对象,其他对象都是在这个对象上进行扩展。对象:驱动对象,设备对象,IO对象,队列对象和目标对象。(3)框架管着所有对象的声明周期。通过引用计数和父子层级关系来维护这个工作。(4)对框架对象所设计的一套设施,如:上下文空间、同步锁等。使得框架对象容易操作,又有安全
2014-07-10 16:39:23
2659
原创 Windows系统-----USB 设备驱动
注:Windows总线协议:对于每一台PC来说,都有一个或多个称为Host控制器的设备,该Host控制器和一个根Hub作为一个整体。每个hub可以级联多级的hub。Host控制器:就是一个PCI设备,挂载在PCI总线上。Host可能有多种驱动,分别为1.0 2.0 3.0 分别对用usb协议的1.0 2.0 3.0 USB Hub:每个Host控制器都会
2014-07-07 16:19:26
1207
原创 PCI设备驱动
PCI总线一种将系统外部设备连接起来的总线标准。如ISA、USB总线都挂载在PCI总线上。开发PCI设备驱动,需要获取PCI配置空间的各个数据。基础PCI局部总线与主处理器相连接的Host/PCI称为北桥基础PCI总线与中断控制器、IDE控制器、USB控制器、DMA控制器和ISA总线的 称为南桥。PCI配置空间:PCI三个相互独立的物理地址空间:设备存储器地址空间、
2014-07-04 15:55:11
1181
原创 wdm驱动,通过IRP_MN_QUERY_CAPABILITIES实现设备通过任务栏的绿色箭头弹出
电源事件相关的IRP包括 IRP_MJ_POWER和IRP_MN_QUERY_CAPABILITIES 此处关于IRP_MN_QUERY_CAPABILITIES的使用FDO通过向底层PDO请求此IRP,会得到DEVICE_CAPABILITIES结构体数据,此结构体会指明驱动程序支持的电源特新。驱动代码:
2014-07-03 15:05:50
2210
原创 WDM模式驱动简单例子
代码:///////////////////////////////////////////////////////////////////////////////////// Copyright (c) 2014 - ////// Original filename: HelloWdm.cpp/// Project : HelloWdm/// Date of c
2014-07-02 17:23:11
1191
原创 写点理解的东西-想到哪我就写到哪
Windows驱动编程,就目前涉及到的模型为NT和WDM模型(WDF还没学到^-^!),NT式的驱动是比较老一点的,WDM的最大更新便是支持的设备的即插即用(PNP),实现此功能是一个非常复杂的过程,先略。^0^....两者比较:NT式驱动,是在DriverEntry函数内创建驱动自己的设备,或者进行设备绑定等操作,并在函数内初始化各个IRP类型的派遣函数WDM式驱动,程序入口函数仍为
2014-07-02 08:39:42
604
原创 DO_DIRECT_IO方式 完成例程分解IRP
DriverA被挂载驱动,DO_DIRECT_IO方式NTSTATUS ReadDispath(PDEVICE_OBJECT pDevObj,PIRP pIrp){ KdPrint(("DriverA ReadDispath Enter....")); NTSTATUS status = STATUS_UNSUCCESSFUL; PIO_STACK_LOCATION pStack
2014-07-02 08:35:05
1274
转载 IRP完成例程解惑
1.最高层驱动总是运行在发起该请求的程序所处的线程中。DriverEntry总是处在系统线程中,系统线程的空间不涉及到线性地址 0 - 2G。APC 是处在任意上下文中,它所在的线程取决于系统运行APC之前最后被挂起的那个线程。2. 所有不返回 STATUS_MORE_PROCESSING_REQUIRED的完成回调例程,需要使用下面的代码:NTSTATUS MyCompletionRou
2014-06-30 13:37:42
1079
原创 私有ini文件操作类
#pragma onceclass CMIniOp{public: CMIniOp(void){}; ~CMIniOp(void){};private: CString m_csIniPath; CString m_csNode;public: void setFilepath(const CString& csIniPaht){m_csIniPath = csIniPa
2014-06-30 11:00:18
579
原创 IRP_完成例程(二)-返回STATUS_MORE_PROCESSING_REQUIRED
当IRP被IoCompleteRequest完成时,就开始
2014-06-27 16:50:47
2965
ListCtrl_Redraw_Class
2013-10-23
GPRS模块 sim300开发注意事项
2011-06-07
2410学习板 protels DXP设计
2011-01-13
基于VHDL的三层电梯控制器设计
2011-01-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人