自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(67)
  • 收藏
  • 关注

原创 无法启动驱动

当动态加载驱动后,初次启动驱动。之后就无法再次启动该驱动,是因为驱动的卸载例程DriverUnload没有完成适当的卸载清理工作造成的。

2009-09-29 15:31:00 493

转载 将本层的IO_STACK_LOCATION拷贝到下一层的两种方法

方法一:调用MS提供的标准方法IoCopyCurrentIrpStackLocationToNext(...)    方法二:C++代码PIO_STACK_LOCATION IrpSp;    PIO_STACK_LOCATION NextIrpSp;       IrpSp = IoGetCurrentIrpStackLocation(Irp);    NextI

2009-09-29 10:46:00 471

转载 设备名称

为设备命名       Windows NT使用对象管理器集中管理大量的内部数据结构,包括我们讨论过的驱动程序对象和设备对象。David Solomon在《Inside Windows NT, Second Edition (Microsoft Press, 1998)》的第三章“System Mechanisms”中给出了关于Windows NT对象管理器和命名空间的一个比较完整的阐述。对象都有

2009-09-29 10:38:00 1931

转载 Windows磁盘驱动基础

本文讲述Windows磁盘驱动的主要结构功能与编写方法基础。本文描述的内容仅限于软件层面,并不与具体的硬件相关。 1.磁盘驱动基础    不少人把文件系统驱动和磁盘驱动混为一谈。实际上文件系统驱动应该与磁盘驱动是两类不同的驱动程序。文件系统仅仅考虑数据在存储设备上的保存格式(而不考虑具体是什么存储设备),而磁盘是存储设备的一种。    在存储设备驱动(storage driver)中,

2009-09-29 10:31:00 559

转载 如何编译驱动程序

驱动的编译和上层应用程序的编译完全不同,作为初学者应该先了解一下,即使你还不懂得怎么写驱动程序。   首先安装DDK,然后随便找一个例子来测试。在菜单中找到BUILD环境菜单执行,不同的系统要使用不同的BUILD环境。会打开一个DOS窗口,这时CD到那个例子程序,输入build –cZ回车就可以了。      为了使build能正确运行, 在需被编译的源文件目录下面必须有SOURCES文件, 注意

2009-09-29 10:22:00 703

转载 Windows文件系统过滤驱动开发教程

作者,楚狂人自述我长期网上为各位项目经理充当“技术实现者”的角色。我感觉Windows文件系统驱动的开发能找到的资料比较少。为了让技术经验不至于遗忘和引起大家交流的兴趣我以我的工作经验撰写本教程。我的理解未必正确,有错误的地方望多多指教。有问题欢迎与我联系。我们也乐于接受各种驱动项目的开发。邮箱为MFC_Tan_Wen@163.com,QQ为16191935。对于这本教程,您可以免费获

2009-09-29 10:17:00 859

转载 IO_STACK_LOCATION — I/O堆栈

I/O堆栈   任何内核模式程序在创建一个IRP时,同时还创建了一个与之关联的 IO_STACK_LOCATION 结构数组:数组中的每个堆栈单元都对应一个将处理该IRP的驱动程序,另外还有一个堆栈单元供IRP的创建者使用(见图5-3)。堆栈单元中包含该IRP的类型代码和参数信息以及完成函数的地址。下图显示了堆栈单元的结构。  I/O堆栈单元数据结构:       MajorF

2009-09-29 10:03:00 4256 6

转载 IRP中的各主功能号

#define IRP_MJ_CREATE                               0x00#define IRP_MJ_CREATE_NAMED_PIPE         0x01#define IRP_MJ_CLOSE                                   0x02#define IRP_MJ_READ                     

2009-09-28 17:08:00 909

转载 驱动程序经典入门

网上看到的一篇驱动入门文章,对于入门来说总结的是非常的详细与全面,但又很简单:      我们学习程序设计,都是从“Hello World”开始的,驱动程序也不例外,今天我就写一个驱动版的“Hello World”来热热身,目的希望大家能对驱动程序的基本框架有所了解。       驱动程序分为2类,一个是Kernel模式驱动,另一个是Windows模式驱动,2种模式本质是相同,但细节不同,本文

2009-09-28 15:45:00 602

转载 DEVICE_EXTENSION设备扩展

     设备扩展(DEVICE_EXTENSION)是与设备对象相关的另一种重要的数据结构。可以用它来保存与特定设备关联的信息。设备扩展其实只是一个未分页的池,由驱动开发者来定义它的大小和内容。并由I/O管理器自动把它分配给设备对象,即设备对象的PVOID DeviceExtension字段。由于此结构是驱动开发者自定义的,所以必须要让系统知道需要给此结构预留多少空间,因此要把设备扩展结构的大小

2009-09-27 16:27:00 1492

转载 设备栈

     http://blog.csdn.net/syf442/archive/2010/01/19/5211688.aspx 

2009-09-27 14:21:00 414

转载 绑定一个指定的卷

我们平时看sfilter的时候,发现它一方面面面俱到,一方面把人的眼睛弄得很混乱。特别是绑定卷的那一部分,到底是怎么实现的,总觉得七拐八拐的,拐弯太多。能不能写一个比较简单的绑定函数,比如我指定只要过滤c盘,那么我只要绑定c盘就够了。我试着写了一个,看我是怎么写的。我定义了一个函数:BOOLEAN Attach2C_Volume(PUNICODE_STRING nameString)nameStr

2009-09-25 17:26:00 554 1

原创 内核数据结构

关于开发驱动重要的内核数据结构,方便自己理解:DRIVER_OBJECT:typedef struct _DRIVER_OBJECT{        CSHORT      Type;        CSHORT      Size;        //一个链表,记录了该驱动创建的所有设备对象        PDEVICE_OBJECT  DeiceObject

2009-09-25 16:27:00 902

转载 文件过滤驱动总结

献给那些IFS   Fans,挑战那些IFS大牛。(部分用英文)     1>   IFS   流程图     a.生成一个控制设备.当然此前你必须给控制设置指定名称.     b.设置Dispatch   Functions.       c.设置Fast   Io   Functions.       d.编写一个my_fs_notify回调函数,在其中绑定刚激活的FS   CDO.    

2009-09-25 14:52:00 996 1

转载 Windows 文件过滤驱动经验总结

 看了 ChuKuangRen 的第二版《文件过滤驱动开发教程》后,颇有感触。我想,交流都是建立在平等的基础上,在抱怨氛围和环境不好的同时应该先想一想自己究竟付出了多少?只知索取不愿付出的人也就不用抱怨了,要怪也只能怪自己。发自己心得的人无非是两种目的,一是引发一些讨论,好纠正自己错误的认识,以便从中获取更多的知识使自己进步的更快。二是做一份备忘,当自己遗忘的时候能够马上找到相关资料。我这里也

2009-09-24 16:31:00 500

转载 IoCreateDevice

 调用IoCreateDevice函数创建设备对象,例如:PDEVICE_OBJECT fdo;NTSTATUS status = IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, FILE_DEVICE_

2009-09-23 15:24:00 1820

转载 DO_DEVICE_INITIALIZING 到底有什么用

      当设备驱动程序通过调用 IoCreateDevice 创建设备对象时,I/O 管理器在 DEVICE_OBJECT 结构的 Flags 字段中设置 DO_DEVICE_INITIALIZING。DO_DEVICE_INITIALIZING 的目的是防止其它组件在驱动程序完成初始化设备对象之前向设备发送 I/O。      每次打开设备的一个句柄时,以及任何时候驱动程序试图附加到一个

2009-09-23 15:09:00 637 1

转载 DO_DIRECT_IO 和 DO_BUFFERED_IO

1、DO_DIRECT_IO还是DO_BUFFERED_IO?这两种方式有什么区别?分别对应什么情况使用?答:DO_DIRECT_IO常用于传输大块的讲求速度的数据。DO_BUFFERED_IO常用于传输小块的,慢速的数据。DO_DIRECT_IO的效率较高(只需内存锁定即可),代价是牺牲物理内存。DO_BUFFERED_IO的内存效率高,但速度差(它要分配内存,复制数据)。造成这种区别的主要原因

2009-09-23 11:47:00 1751

转载 C语言运算符表

运算符按照优先级大小由上向下排列,在同一行的运算符具有相同优先级。第二行是所有的一元运算符。   运算符解释结合方式() [] -> .括号(函数等),数组,两种结构成员访问由左向右! ~ ++ -- + - * & (类型) sizeof否定,按位否定,增量,减量,正负号,间接,取地址,类型转换,求大小由右向左

2009-09-23 10:42:00 320

转载 #pragma 预处理指令详解

在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。      其格式一般为: #pragma  para      其中para为参数,下面来

2009-09-23 09:08:00 271

转载 XP的 IFSDDK

准备: 1.楚狂人编写的《Windows文件系统过滤开发教程(第二版)》: 个人觉得这是最重要的东西,我当初决定研究驱动就是因为这本教程而起的,过程中我把整个教程打印出来,前前后后读了不止10次,作者对文件驱动的运行过程分析的很好,很多提示也很重要,基本上是文件驱动开发的第一参考手册. 2.IFS DDK及其帮助文档: 这个要特别注意,网上流传的即使名字是IFS DDK,但基本上都是普通的WIND

2009-09-22 10:52:00 1234 1

转载 符号链接& 设备名称

-------------------------------------------------------------------------------------------------UNICODE_STRING devName;RtlInitUnicodeString(&devName,L"//Device//MyDDKDevice");NTSTATUS status=IoCrea

2009-09-21 17:07:00 1238

转载 驱动对象与设备对象

DRIVER_OBJECT和DEVICE_OBJECT的关系DRIVER_OBJECT是驱动程序在内核中的数据结构,每个驱动程序有唯一DRIVER_OBJECT,IO管理器使用驱动程序对象代表每个设备驱动程序,驱动程序描述了驱动程序的载入到内存什么地方,驱动程序的大小和它的主要入口点(MajorFunction数组);驱动程序对象有一个DeviceObject域指向一个设备对象链表,每个设备对

2009-09-21 09:27:00 2135

转载 写给透明加密驱动开发的探索者

写给透明加密驱动开发的探索者  转载自驱动开发网1. 基础要好,先要学会写其它驱动2. 看三遍以上的 NT文件系统内幕, 如果能看中文版更好 :)3. cache管理这部分多看吧,多看多看4. NTFS倒不一定要看,多看看fastfat源码5. 一定要多试,多动手6. 尽可能在一个公司内开发,有完善的测试团队,否则你的产品一直在实验室...7. 多问大牛们,当然不包括我8.文件标识处理有文件头及文

2009-09-18 16:07:00 505

转载 Filemon中的HASH TABLE

这段代码是从Filemon中提取出来的,适合做监控的朋友使用主要是为了在IO比较频繁的例程比如IRP_MJ_READ/IRP_MJ_WRITE里通过FILE_OBJECT得到文件名等信息。这种方法比其他方法相对更加高效一些。比如FILEMON,TDI_FW都采用HASH TABLE来保存文件名或者其他信息。//// Structure for the fileobject/name hash

2009-09-18 16:05:00 535

转载 IRP概述

一、简述      任何内核模式程序在创建一个IRP时,都同时创建了一个与之关联的IO_STACK_LOCATION结构数组:数组中的每个堆栈单元都对应一个将处理该IRP的驱动程序,另外还有一个堆栈单元供IRP的创建者使用。堆栈单元中包含该IRP的类型代码和参数信息以及完成函数的地址。IRP的CurrentLocation为当前IO堆栈单元的索引,IRP的Tail.Overlay.CurrentS

2009-09-18 13:54:00 633

转载 了解DDK环境-研读WinDDK的Documentation

准备研读一下WinDDK的Documentation 看看怎么配置...头文件文件夹:在以前的DDK版本中,DDK的头文件被包含在很多的文件夹中,在设置VC的时候需要根据你的实际设计驱动的目标操作系统的版本设置DDK头文件的包含文件夹。3790版本的header filesDirectory pathContains header files forWinddk/3

2009-09-18 10:45:00 1432

原创 驱动文件操作

一个简单的入门级驱动程序,只是实现了创建一个线程,用来新建文本文件,并把字符串写入文本文件:#include "ntddk.h"//UNICODE_STRING str = RTL_CONSTANT_STRING(L"Hello!");VOID MyThreadProc(PVOID context){      HANDLE hFile = NULL;      NTSTATUS stat

2009-09-17 15:03:00 720

转载 内核驱动的文件操作

在内核驱动中创建文件,并进行读写。用于保存驱动运行中的信息。方式:可以用两种方式实现该操作。1、 在应用程序中创建文件,驱动运用IOCTL将信息传给应用层,应用程序对文件进行读写。Tdi_fw就是利用这种方式来记录驱动过滤信息,Tdi_fw的应用程序创建一个线程,循环利用IOCTL来读取驱动信息,并保存到文件。2、 在驱动中完成所有的这些操作。在这里我们主要讨论这种方式。实现:利用ZwCr

2009-09-17 10:54:00 3010

原创 驱动基本概念

IRQ-介绍          IRQ全称为Interrupt Request,即是“中断请求”的意思。IRQ的作用就是在我们所用的电脑中,执行硬件中断请求的动作,用来停止其相关硬件的工作状态,比如我们在打印一份图片,在打印结束时就需要由系统对打印机提出相应的中断请求,来以此结束这个打印的操作。在每台电脑的系统中,是由一个中断控制器8259或是8259A的芯片(现在此芯片大都集成到其它的芯片内

2009-09-17 10:14:00 850

原创 驱动点滴

● 所有变量必须在初始化之前定义,否则出现错误:           error C2275: HANDLE : illegal use of this type as an expression  ● 当做文件操作时,获得一个文件的句柄,在操作完该文件后,一定要释放该文件的句柄。否则,会导致无法再次对其操作,360粉碎工具目前也无法将其删除,只能重启后删除。

2009-09-17 09:35:00 611

转载 DDK与WDK

最近尝试去了解WINDOWS下的驱动开发,现在总结一下最近看到的资料。  1.首先,先从基础的东西说起,开发WINDOWS下的驱动程序,需要一个专门的开发包,如:开发JAVA程序,我们可能需要一个JDK,开发WINDOWS应用程序,我们需要WINDOWS的SDK,现在开发WINDOWS下的驱动程序,我们需要一个DDK/WDK。  2.DDK(Driver Developer Kit)和WD

2009-09-16 17:08:00 4636 2

转载 本地目录的只读控制(禁止写、删除、新建))

几句废话: 这是我在驱网发的第二篇文章,第一篇是关于利用过滤驱动将U盘设置为只读的。 这篇是利用文件系统过滤驱动将一个目录(本地硬盘)设置为只读,包括禁止修改 文件,禁止删除文件,禁止新建文件等。 我最终的目的是想实现 利用文件过滤驱动 将任意盘(包括移动,A等)设置为只读。因此我的路还很长,还需要各位的帮助。 正文: 0 准备工作: 由于是对文件、目录的拦截。首先要知道如何得到路径、文件名、

2009-09-16 14:10:00 1050

转载 C/C++ 内存空间分配

一. 在c中分为这几个存储区●堆:由malloc系列函数或new操作符分配的内存,其生命周期由free或delete决定,一般由程序员分配释放。在没有释放之前一直存在,直到程序结束;若程序员不释放,程序结束时可能由OS回收。其特点是使用灵活,空间比较大,但容易出错- 由编译器自动分配释放●栈:保存局部变量,由编译器自动分配释放。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也

2009-09-15 15:25:00 813

转载 Nt**、Zw**和Rtl** 开头的函数介绍

      首先他们都是微软未公开的函数,之所以未公开主要是因为这些函数大部分功能太强大了,把他们公开会让一些别有用心的人利用。9x下的我不知道,NT(含2000/xp)下你可以参考《Windows NT Native API》,他们中的大部分函数几乎就从来没有变过。而几乎所有从Kenerl.dll中引出的Win32API,都是通过调用的Native API(NTDLL.DLL中导出)实现系统调用

2009-09-15 15:10:00 1969

转载 WinDbg入门教程

WinDbg 入门教程介绍在我的职业生涯中,我看到我们大多数都是使用Visual Studio来进行调试,而不是用其它许多免费的调试器。你可能有许多理由来使用这样的调试器,比如,在你家里的机器上没装开发环境,但是一个程序一次次的崩溃。其实根据堆栈的dump就可以判断出IE的崩溃是否是由于一个第三方的插件。对于WinDbg,我目前为止还没有发现很好的快速入门的教程。这篇文章结合实例讨

2009-09-15 11:36:00 711

转载 批处理中的IF ERRORLEVEL

看下应用实例:@echo off: pping XX.XX.XX.XXIF ERRORLEVEL 1 goto aaIF ERRORLEVEL 0 goto bb:aaecho 正在重启软件服务...net stop MSSQLSERVERnet start MSSQLSERVERgoto p:bbecho 继续ping中。。。goto p这段命令的作用是,ping 61.152.XX.XX这个I

2009-09-15 11:02:00 1515

原创 VC6 假死问题

习惯了VC6的简洁界面和明朗的字体,看着高版本的VS不怎么舒服。我之前用的是集成SP6补丁的中文版VC6,在编译的时候经常出现假死linking.....,一直就这样link下去,无奈只有结束进程。网上的所谓vc集成sp6中文版本,其实只是汉化的版本,微软官方并没有出VC6的中文版本。由于没有测试完全,留下了bug,导致非常容易link卡死,由于这些版本自称集成了sp6,这造成了假象迷惑了非常

2009-09-15 09:46:00 1444 2

原创 VC 常用函数

获得窗口句柄(全集)this->m_hwndHWND GetForegroundWindow(VOID);GetSafehWnd 取你程序所在窗口类的句柄GetActiveWindow 取当前活动窗口句柄AfxGetMainWnd 取主窗口句柄GetForegroundWindow 取前台窗口句柄FindWindowEnumWindow获得窗口坐标CRect   rc; GetWi

2009-09-14 15:08:00 484

转载 ANSI字符,UNICODE,宽字符,窄字符,多字节字符集

Unicode :宽字节字符集 1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数? 可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。 调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。 2. 如何对DBCS(双字节字符集)字符串进行操作? 函数 描述

2009-09-10 13:33:00 881

空空如也

空空如也

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

TA关注的人

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