windows驱动编程
文章平均质量分 75
wsgxiaomianao
这个作者很懒,什么都没留下…
展开
-
windows驱动编程(一) 先写个NTDDK例子
参考张帆的windows驱动开发技术详解,自学中。。。#pragma once#ifndef __HELLODDK__HH#define __HELLODDK__HH//包含ntddk.h文件,使用c标准的方式编译#ifdef __cplusplusextern "C"{#endif#include #ifdef __cplusplus};#endif//原创 2013-10-28 10:48:05 · 1134 阅读 · 0 评论 -
WDM模式驱动简单例子
代码:///////////////////////////////////////////////////////////////////////////////////// Copyright (c) 2014 - ////// Original filename: HelloWdm.cpp/// Project : HelloWdm/// Date of c原创 2014-07-02 17:23:11 · 1164 阅读 · 0 评论 -
将一个wdm模型驱动挂载到一个物理设备上,获取物理设备资源信息并打印
在wMware xp系统上挂载到PCI总线上,原创 2014-07-03 11:34:07 · 816 阅读 · 0 评论 -
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 · 2138 阅读 · 0 评论 -
通过驱动使应用程序直接操作IO口,通过端口终止PC喇叭发声
在NT内核的windows系统上,应用层无法直接操作IO端口,原创 2014-07-04 11:13:48 · 1275 阅读 · 0 评论 -
PCI设备驱动
PCI总线一种将系统外部设备连接起来的总线标准。如ISA、USB总线都挂载在PCI总线上。开发PCI设备驱动,需要获取PCI配置空间的各个数据。基础PCI局部总线与主处理器相连接的Host/PCI称为北桥基础PCI总线与中断控制器、IDE控制器、USB控制器、DMA控制器和ISA总线的 称为南桥。PCI配置空间:PCI三个相互独立的物理地址空间:设备存储器地址空间、原创 2014-07-04 15:55:11 · 1148 阅读 · 0 评论 -
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 · 1151 阅读 · 0 评论 -
WDF模型驱动-初稿
WDF特点:(1)系统兼容,内部磨合了系统、平台间的差异,对外提供了统一的DDI接口(2)基于对象的框架。 有一个最基本的对象,其他对象都是在这个对象上进行扩展。对象:驱动对象,设备对象,IO对象,队列对象和目标对象。(3)框架管着所有对象的声明周期。通过引用计数和父子层级关系来维护这个工作。(4)对框架对象所设计的一套设施,如:上下文空间、同步锁等。使得框架对象容易操作,又有安全原创 2014-07-10 16:39:23 · 2537 阅读 · 0 评论 -
windows内核读写文件
///////////////////////////////////////////////////////////////////////////////////// Copyright (c) 2014 - ////// Original filename: FileOperation.cpp/// Project : FileOperation/// Date原创 2014-06-19 13:45:54 · 1371 阅读 · 0 评论 -
window驱动字符串操作
///////////////////////////////////////////////////////////////////////////////////// Copyright (c) 2014 - ////// Original filename: strTest.cpp/// Project : strTest/// Date of creation原创 2014-06-19 11:20:49 · 906 阅读 · 0 评论 -
Windows内核-注册表操作(一)
///////////////////////////////////////////////////////////////////////////////////// Copyright (c) 2014 - ////// Original filename: RegOper.cpp/// Project : RegOper/// Date of creation原创 2014-06-20 10:52:12 · 1075 阅读 · 0 评论 -
wdf模型开发虚拟磁盘
主要搞清楚物理磁盘的结构整个物理磁盘的第一个扇区为MBR,BIOS加载完后将调用MBR。MBR中主引导程序负责从活动分区中装载和运行系统引导程序。MBR的引导程序后面是硬盘分区表(DPT),用占64字节,记录物理磁盘的每个逻辑分区的起始位置,从这个起始位置开始的部分成为DBR(系统引导记录)。DPT的后面是有效结束标志(0x55AA),没有这个标志,操作系统会认为磁盘没有初始化,无法正确加载磁原创 2014-08-04 16:36:15 · 1245 阅读 · 0 评论 -
创建虚拟设备(缓冲读写方式)-模拟文件读写操作
驱动代码:///////////////////////////////////////////////////////////////////////////////////// Copyright (c) 2014 - ////// Original filename: BufferIO.cpp/// Project : BufferIO/// Date of原创 2014-06-23 11:16:29 · 548 阅读 · 0 评论 -
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 · 2082 阅读 · 0 评论 -
应用程序与驱动通信的若干方式
应用程序与驱动传递数据方法:1. METHOD_BUFFERED 输入输出缓冲区都被映射到系统地址Irp->AssociatedIrp.SystemBuffer上 inBuf = Irp->AssociatedIrp.SystemBuffer outBuf = Irp->AssociatedIrp.SystemBuffer 因此在你打算通过outBuf输出数据时转载 2014-08-08 16:19:39 · 1863 阅读 · 0 评论 -
windbg调试基础
(1)每个命令都有各自的使用范围,不支持的指令会显示“No export XXX Found”(2)调试命令分为三种:基本命令、元命令、扩展命令。基本命令和元命令是调试器自带的。元命令总是以“.”开始,而扩展命令是外部加入的,总是以“!”开头。(3)基本命令的帮助指令为“?” ,元命令的帮助指令为“.help [/D] ” ("/D"可以以DML的方式设置链接)(4)扩展命令从DLL原创 2014-08-15 10:37:53 · 1179 阅读 · 0 评论 -
解析NDIS包描述符和缓冲区描述符---发送与接收数据的获取和处理
解析NDIS包描述符和缓冲区描述符///////////////////////////////////////////////////////////////////////////////////////////////解析数据包:(1)获取包描述符信息VOID NdisGetFirstBufferFromPacket( IN PNDIS_PACKET Packe原创 2014-09-11 17:18:16 · 675 阅读 · 0 评论 -
NDIS驱动(一)协议驱动
NDIS网络驱动分类协议驱动:上层直接提供应用层socket使用的数据传输接口,下层绑定小端口驱动用于发送和接收以太网包、小端口驱动:直接针对网卡,给协议驱动提供接收和发生数据的能力中间层驱动:以一种特殊的方式插入到协议驱动和小端口驱动之间,作为过滤驱动的最佳选择。协议驱动使用wdk下的ndisport工程,不提供传输层接口,只是只有ReadFile、WriteFile原创 2014-07-25 15:31:19 · 4787 阅读 · 0 评论 -
写点理解的东西-想到哪我就写到哪
Windows驱动编程,就目前涉及到的模型为NT和WDM模型(WDF还没学到^-^!),NT式的驱动是比较老一点的,WDM的最大更新便是支持的设备的即插即用(PNP),实现此功能是一个非常复杂的过程,先略。^0^....两者比较:NT式驱动,是在DriverEntry函数内创建驱动自己的设备,或者进行设备绑定等操作,并在函数内初始化各个IRP类型的派遣函数WDM式驱动,程序入口函数仍为原创 2014-07-02 08:39:42 · 587 阅读 · 0 评论 -
使用Softice调试驱动程序
近日使用Softice的一些心得,主要是一些网上看到的相关资料,遇到的问题,自己探索的解决方法。 我使用softice的环境:操作系统XP( SP2 ),Softice是Driverstudio3.2自带的版本。 初级篇 1、不要使用USB的键盘和鼠标,这个Softice不支持。已试过。 2、显卡驱动很关键,要不会出现花屏现象。为了支持"Universal Vide转载 2014-07-22 14:14:33 · 1310 阅读 · 1 评论 -
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 · 1240 阅读 · 0 评论 -
windows驱动编程(二) windows系统整体框架详解
学习张帆的《windows驱动开发技术详解》,由此整理。。。感谢作者!通过这篇文章能了解windows 的整体结构,明白驱动所处的位置和作用。windows特性(1)可移植性windows操作系统为了实现在尽可能多的硬件平台上运行,引入了HAL(硬件抽象层)(2)兼容性为了实现windows系统不同版本之间的兼容性,保持了大多数的API统一且固定(3)健壮性和可原创 2013-10-28 15:42:19 · 1831 阅读 · 0 评论 -
TDI驱动编程
http://www.cnblogs.com/welfear/archive/2011/02/14/1954454.html文档名称:TDI过滤驱动分析文档维护:Xuefeng Chang(welfear@gmail.com)创建时间:2008年3月6日更新时间:2008年3月7日更新内容:Vista中TDI驱动的变化更新时间:2转载 2014-01-03 13:31:16 · 2103 阅读 · 0 评论 -
windows驱动编程-串口调试(VMWare虚拟机下wi7 和 Virtual Box下xp)
虚拟机安装的wi7系统下:(1)编辑虚拟机的配置,添加串口设备,下一步设置“输出到命名管道”,下一步设置:该端为服务器、另一端是应用程序,设备状态选中启动时连接,然后点击完成。(2)启动虚拟机系统,将光标定位在虚拟机内,不断按F10进入调试模式。然后输入“\debugport baudrate=115200” 此时别回车(千万要等待、。。。)(3)在wdk下启动windbg(C:\原创 2013-12-24 17:22:51 · 2405 阅读 · 0 评论 -
windows下驱动开发环境搭建
(1)安装WDK和VS2008(2)创建一个win32工程,类别为生成静态库(lib)的工程(3)点击工程属性->配置属性->c/c++ ->常规->附件包含目录 ,添加如下的WDK的库路径: C:\WinDDK\7600.16385.1\inc\ddk; C:\WinDDK\7600.16385.1\inc\api;原创 2013-12-24 16:46:29 · 647 阅读 · 0 评论 -
在vs2008中配置wdk环境
网上这类资料多如牛毛,也许很多人都是转来转去,却很有人去真正的测试,有时候感觉确实对他人也是一种误导。这里是我自己在VS2008 + WDK7600.16385.0 + DDKWizard配置自己的IDE开发环境的设置过程:1、首先安装DDKWizard官方网页:http://ddkwizard.assarbad.net/从官方网页下载这三个重要的文件:DDKBUI转载 2013-12-25 13:54:42 · 1219 阅读 · 0 评论 -
NT式驱动程序的基本结构
NT式驱动程序的基本结构:驱动对象:每个驱动程序会有唯一的驱动对象与之对应,这个驱动对象时在驱动加载的时候,被内核中的对象管理程序所创建的,由内核中的IO管理器进行加载。typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; // // The following links原创 2013-12-25 16:54:56 · 742 阅读 · 0 评论 -
内核编程理解
内核编程理解:(1)一个进程的运行,系统会分配4GB的内存空间,其中低2GB的地址是进程所独有的,高2GB的地址空间是在内核模式下访问的。一个驱动程序位于内核模式,内核空间又会被所有的进程所共享,所以内核模块(驱动程序)位于每一个进程中。(2)驱动程序是由系统进程(在任务管理器内PID为4的system进程)加载的。在DriverEntry函数内调用PsGetCurrentProces原创 2013-12-27 17:26:39 · 741 阅读 · 0 评论 -
win7 debug双机调试--bcdeidt设置
bcdeidtbcdedit /dbgsettings serial baudrate:115200 debugport:1>bcdedit /copy {current} /d DebugEntrybcdedit /displayorder {current} {80e6559c-c794-11e3-802b-be2b6be68e4a}bcde原创 2014-04-24 15:50:50 · 725 阅读 · 0 评论 -
windows驱动之间异步调用(二)
ZwCreateFile之后会产生一个文件句柄,根据文件句柄获得文件对象指针,使用文件原创 2014-06-24 16:52:03 · 894 阅读 · 0 评论 -
windows驱动之间同步调用实例
驱动程序之间调用实例,以读操作模拟调用。exe程序,原创 2014-06-24 14:22:42 · 716 阅读 · 0 评论 -
windows驱动之间异步调用(一)
需要配合Windows驱动同步调用文档代码:原创 2014-06-24 15:30:34 · 690 阅读 · 0 评论 -
创建IRP实现驱动之间通讯
被调用源码不变,windows驱动之间同步调用实例原创 2014-06-25 10:08:00 · 1442 阅读 · 0 评论 -
通过驱动名称枚举驱动下设备和挂载设备的信息
说明:exe程序通达原创 2014-06-26 15:33:43 · 1684 阅读 · 0 评论 -
驱动分层-挂载设备对象示例
(一)需要一个标准驱动,原创 2014-06-26 09:32:21 · 587 阅读 · 0 评论 -
IRP_完成例程(一)-返回status_success
事例使用IRP_MJ_READ派遣函数演示完成例程原创 2014-06-27 15:33:07 · 3544 阅读 · 0 评论 -
IRP完成例程解惑
1.最高层驱动总是运行在发起该请求的程序所处的线程中。DriverEntry总是处在系统线程中,系统线程的空间不涉及到线性地址 0 - 2G。APC 是处在任意上下文中,它所在的线程取决于系统运行APC之前最后被挂起的那个线程。2. 所有不返回 STATUS_MORE_PROCESSING_REQUIRED的完成回调例程,需要使用下面的代码:NTSTATUS MyCompletionRou转载 2014-06-30 13:37:42 · 1052 阅读 · 0 评论 -
IRP_完成例程(二)-返回STATUS_MORE_PROCESSING_REQUIRED
当IRP被IoCompleteRequest完成时,就开始原创 2014-06-27 16:50:47 · 2860 阅读 · 0 评论 -
LIST_ENTRY
链表是驱动开发中经常遇到的一个数据结构,主要是双向循环链表;要使用链表,需要用到一个LIST_ENTRY的结构,其定义如下:typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; // 指向下一个节点 struct _LIST_ENTRY *Blink; // 指向前一个节点} LIST_E原创 2014-07-25 17:04:51 · 618 阅读 · 0 评论