自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

听风的雨滴

沉溺于开发技术而不知日月旋转的工程师

  • 博客(13)
  • 资源 (2)
  • 收藏
  • 关注

原创 集中打印调试信息的模版函数

有时候我更喜欢集中打印出一个代码块中所有的我需要看到调试信息。而不需要单步跟踪的打印//打印调试信息的框架函数VOID Dump(IN PDRIVER_OBJECT pDriverObject){ KdPrint(("--------------------------------------------")); KdPrint(("Begin Dump...\n")); //打印

2015-03-31 19:18:40 672

原创 物理设备对象和功能设备对象

在WDM驱动模型中,完成一个设备的操作。至少需要2个设备对象共同完成。其中一个是物理设备对象PDO。还有一个是功能设备对象FDO。他们之间的关系是附加和被附加的关系。有点像我们处理过滤驱动的样子。比如,当我们向PC插入某一个设备的时候。PDO就会由总线驱动程序自动创建。PDO不能单独的操作设备,需要FDO配合在一起才能完成设备的操作。这个时候,系统会提示我们检测到新设备,这个时候我们安装的设备

2015-03-31 16:15:59 1686

原创 一个WDM驱动开发框架

下面是我起初学习WDM的时候的一个驱动开发框架。分享之。。。。。#include "DriverWDM.h"#pragma INITCODE extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING RegistryPath){ NTSTATUS status; KdPrin

2015-03-31 16:13:04 1426

原创 宏参数的连接

先看下面一段程序:#include #include #define STR(s) #s#define CONS(a,b) (int)(a##e##b)int main(){        printf(STR(abcde));        printf("\n");        printf(

2015-03-31 15:08:08 834

原创 怎么创建一个设备

先给出代码。如下;这里我把创建设备的过程封装在了一个函数CreateMyDevice中NTSTATUS CreateMyDevice(IN PDRIVER_OBJECT pDriverObject){        NTSTATUS status;        UNICODE_STRING devName;        //设备名 

2015-03-30 21:28:57 1002

原创 理解设备扩展

我们的设备对象记录的是一些比较“通用“的设备信息。也就是每个设备都具有的一些共性。而另外一下”特殊“的、”个性化“的信息记录在设备对象的设备扩展里面。所以每个同类型的设备扩展也不相同。设备扩展由哦我们自己定义,但是她却是由I/O管理器来创建。并且保存在非分页内存中。假如我么吧设备扩展保存在分页内存中,那么-------蓝屏。。。       除了这个以外。在驱动程序的开发中,尽量不要使用全局变

2015-03-30 20:36:47 642

原创 理解设备对象

设备对象的结构体中有3个域(1)DriverObject。这个比较好理解。就是这个设备对象所属的驱动对象。毕竟设备对象是由驱动对象创建的。(2)NextDevice。指向下一个设备对象。这里的指向:指的是由同一个驱动对象的创建的设备对象。他们之间由NextDevice形成链表。我们可以枚举这些设备。红色的“链表”很重要!!(3)AttachedDevice。这个也是指向一个设备的。那么

2015-03-30 20:25:45 724

原创 理解驱动对象(DriverObject)

每个驱动程序都会有唯一一个驱动对象表示,驱动对象是对驱动程序的实例化。她由Ring0层的执行体组件中的IO管理器负责加载,并且每个驱动只加载一个实例。在wdm.h头文件中。DriverObject结构如下:typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; // // The following

2015-03-30 19:47:02 3926

原创 C++中main函数执行完毕后还可以执行其他语句么?

很多时候我们在程序退出以前。需要做一些比如资源释放的事情。但是当main函数退出的时候,我们是否有办法来做一些其他事情呢?但是是我们可以使用atexit()函数实现。这个函数来注册程序正常终止的时候。要被调用的函数。函数原型:int  atexit(void (*)(void));这个函数在main函数结束时,它调用函数的顺序与注册他们的顺序相反。示例代码如下#includ

2015-03-30 15:49:07 1970

转载 可重入函数与不可重入函数(转)

转自:http://www.cppblog.com/franksunny/archive/2007/08/03/29269.html主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被

2015-03-27 10:35:56 438

转载 第二章 驱动入口DriverEntry概述

操作系统在初始化驱动程序的时候会调用DriverEntry,通常会用这个函数来填充dispatch例程的指针,这就象注册回调函数一样。有的设备要创建设备的对象,或者还要创建一个设备名字,以及其他的初始化操作。它的原型:NTSTATUS DriverEntry(    IN PDRIVER_OBJECT DriverObject,    IN PUNICODE_STRIN

2015-03-17 11:53:09 7514

转载 第一章 Windows设备驱动程序设计Hello World

Hello World是程序设计的经典,几乎所有的语言教学都以此为开头。本教程也借此开篇。先看看C的Hello World:int main(){    printf("Hello World!\n");    return 0;} 把它存为hello.c,用VC或者gcc hello.c就可以生成执行文件,运行执行文件就可以

2015-03-17 11:47:16 1470

原创 pragma INITCODE的作用

pragma INITCODE的作用:              将driverEntry()函数设在分页内存中,当驱动加载的成功后,这个函数就在内存中被移除。

2015-03-16 12:55:45 1297

idea汉化包

idea汉化包,98%汉化。运行及其稳定。目前支持idea14,15,16,17等版本。极少部分由于不确定具体功能,没有汉化,后续有的话会更新。汉化方法和jar包在压缩文件中。汉化不易,尊重劳动成果,拒绝盗用,支持正版。谢谢

2018-01-03

网文快捕破解补丁

破解补丁支持网文快捕最新5.5。这个软件经常看博客需要要记录的内容的人士可谓是利器啊。

2014-07-27

空空如也

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

TA关注的人

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