
Driver
文章平均质量分 81
细粉条
iOS开发妹子,wx号:lily-Dly,欢迎沟通交流!
展开
-
windows驱动开发参考资料地址
Windows文件过滤驱动开发http://blog.sina.com.cn/s/blog_7785041f0101jekb.html转载 2014-06-25 14:24:44 · 840 阅读 · 0 评论 -
驱动开发之 ZwWriteFile函数
函数原型:参数:返回值:原创 2014-06-13 18:58:59 · 3892 阅读 · 0 评论 -
驱动开发之字符串操作
WDM驱动程序可以使用下面4种格式的字符串: Unicode串,由UNICODE_STRING结构描述,包含16位字符。Unicode有足够的代码空间编码地球上所有语言的字型。参见http://www.indigo.ie/egt/standards/csur/klingon.html。ANSI串,由ANSI_STRING结构描述,包含8位字符。另一种OEM_STRING串与其相似,也是转载 2014-07-03 16:47:46 · 4271 阅读 · 0 评论 -
驱动开发之 加载NT式驱动程序实例
下面是Driver.cpp#include "Driver.h"/************************************************************************* 函数名称:DriverEntry* 功能描述:初始化驱动程序,定位和申请硬件资源,创建内核对象* 参数列表: pDriverObject:从I/O管理器中传进来转载 2014-07-09 15:58:13 · 1636 阅读 · 1 评论 -
驱动开发之 加载NT式驱动
设备驱动程序的动态加载主要由服务控制飞、管理che原创 2014-07-09 15:53:05 · 1214 阅读 · 0 评论 -
驱动开发之 文件系统识别器
本文转载自TimiXu的Blog原文地址:转载 2014-07-28 14:53:40 · 906 阅读 · 0 评论 -
驱动开发之 FastIO
当阅读过滤驱动代码自己实践时,我想法是绑定完卷设备后,把所有的IRP都原封不动向下发,只是在passthru中打印个信息,表示经过了我的驱动,想看下效果。 用Device Tree查看,已成功绑定了D盘这个分区。用Dbgview查看,也能查看到输出信息。但是,绑定的D盘中,除了txt文件外,无法打开文件或运行程序,无法查看文件信息(创建日期,大小等),当一进行上述操作时,就BSOD,转载 2014-07-29 11:21:16 · 1718 阅读 · 0 评论 -
驱动开发之 一个简单的截取键盘按键的驱动
近来在学驱动开发,自己写了一个简单地驱动程序,截取键盘按键,另外写的应用程序会显示按键。下面是驱动部分的关键代码,完整代码点击:猛戳这里/**************************************************************/#include "KeyFilter.h"/*****************************************原创 2014-07-24 16:03:20 · 4130 阅读 · 1 评论 -
WinIo详解
一日发现SendInput对某程序居然无效,无奈只好开始研究WinIo。上网查了很多资料,发现关于WinIo模拟鼠标键盘的资料很少,有的也只是支言片语讲的不是很详细,而且大部分都是关于模拟键盘的。自己写了一些程序研究一方,经历了无数次的键盘死锁、鼠标满屏乱飞、复位重启,总算小有结果。现在将研究结果写出来与大家分享。另外,本人的水平有限文中有出错的地方欢迎根贴讨论。 我已经将主要的模拟功能转载 2014-06-20 11:27:49 · 11126 阅读 · 0 评论 -
驱动开发之 键盘过滤驱动--Hook键盘中断反过滤
下图是键盘输入流程的主要过程转载 2014-07-30 17:41:35 · 3026 阅读 · 0 评论 -
windbg调试错误:Breakpoint 11's offset expression evaluation failed.
Breakpoint 37's offset expression evaluation failed.这是断点设置youwen转载 2014-07-31 14:23:56 · 1971 阅读 · 0 评论 -
驱动开发之 键盘过滤驱动一键盘输入流程
键盘输入流程以PS/转载 2014-07-30 16:18:27 · 2585 阅读 · 0 评论 -
驱动开发之 键盘过滤驱动--传统型键盘过滤
近来在看 《寒江独钓 windows内核编程》,看到键盘过滤部分,记下笔记,仅供参考,有理解不对之处,还望大家指正。现在来说一下传统型键盘过滤,就是把自己的设备对象绑定在KbdClass设备对象之上。那么发送到KbdClass的IRP都会先经过自己的设备对象,我们可以在读派遣函数中设置完成例程,当IRP完成后在完成历程中得到按键信息。KbdClass被称为键盘类驱动,在windows中,类原创 2014-07-30 16:54:27 · 5668 阅读 · 3 评论 -
驱动开发之 键盘过滤驱动--利用IOAPIC重定位中断处理函数
下图是键盘输入流程的主要过程转载 2014-07-30 18:11:58 · 1893 阅读 · 0 评论 -
驱动开发之 __declspec(naked)
__declspec(naked)__declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码注意点:void __declspec(naked) funname() { _asm { ... [cpp] view plaincopyret } } 注意,__declspe转载 2014-07-31 10:07:27 · 1216 阅读 · 0 评论 -
WdfDriverCreate
WDF的DriverEntry实例:NTSTATUSDriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ){ WDF_DRIVER_CONFIG config; //此结构说明这个驱动程序的一些可配置项,包括EvtDriverDeviceAdd和Ev原创 2014-08-06 14:41:27 · 3751 阅读 · 0 评论 -
驱动加载顺序
第一阶段:系统加电自检POST过程。POST是Power On Self Test的缩写,也就是加电自检的意思,微机执行内存FFFF0H处的程序(这里是一段固化的ROM程序),对系统的硬件(包括内存)进行检查。 第二阶段:读取DPT和MBR。当微机检查到硬件正常并与CMOS设置相符后,按照CMOS设置从相应设备启动(我们这里假设从硬盘启动),读取硬盘的分区表(DPT)和主引导记录(MBR)。转载 2014-08-25 18:17:00 · 2432 阅读 · 0 评论 -
驱动开发之 创建线程函数PsCreateSystemThread
函数原型:NTSTATUS PsCreateSystemThread( _Out_ PHANDLE ThreadHandle, _In_ ULONG DesiredAccess, _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, _In_opt_ HANDLE ProcessHandle,原创 2014-06-13 17:41:16 · 7884 阅读 · 1 评论 -
驱动开发之 ZwCreateFile函数
函数原型:NTSTATUS ZwCreateFile( _Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_转载 2014-06-13 18:07:03 · 9098 阅读 · 0 评论 -
驱动开发之 驱动程序中几个常见例程
关于驱动设计中的几个常的例程: DriverEntry例程 一个DriverEntry例程初始化一个驱动程序,所有的驱动程序必须有一个DriverEntry例程.当装载驱动程序的时候,PNP管理器为每个驱动程序调用一次DriverEntry.在驱动程序初始化之后,PNP管理器能够调用驱动程序的AddDevice例程来初始化由该驱动程序控制的设备. DriverEntry例程示例如转载 2014-06-05 17:50:56 · 1854 阅读 · 0 评论 -
驱动开发之 Windows驱动编程基础教程(1.1-1.3)
Windows驱动编程基础教程(1.1-1.3)1.1 使用字符串结构常常使用传统C语言的程序员比较喜欢用如下的方法定义和使用字符串:char *str = { “my first string” }; // ansi字符串wchar_t *wstr = { L”my first string” }; // unicode字符串size_t len = strlen(str);转载 2014-05-23 11:19:40 · 1231 阅读 · 0 评论 -
驱动开发之 信号量和自旋锁
内核同步措施 为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。 我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。 Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随 Linux从单处理器到对称多处理器的过度;伴随着从非抢占转载 2014-06-05 18:22:18 · 1015 阅读 · 0 评论 -
驱动开发之 UNICODE_STRING 总结
UNICODE_STRING:typedef struct _UNICODE_STRING { USHORT Length; //UNICODE占用的内存字节数,个数*2; USHORT MaximumLength; PWSTR Buffer;} UNICODE_STRING ,*PUNICODE_STRING;参数定义:Length转载 2014-05-23 11:18:23 · 3584 阅读 · 0 评论 -
驱动开发之 #pragma alloc_text
1、转自 :http://hi.baidu.com/billbeggar/blog/item/e884ce1acb10f49a6438db43.html2、编译时控制分页能力 有时,驱动程序的某些部分必须驻留内存而另一些可以被分页,这就需要一种能控制代码和数据是否分页的方法。通过指导编译器的段分配可以实现这个目的。在运行时,装入器通过检查驱动程序中的段名, 把段放到你指定的内存池中。此转载 2014-06-05 14:22:45 · 1339 阅读 · 0 评论 -
驱动开发之用户模式和内核模式
运行 Windows 的计算机中的处理器有两个不同模式:“用户模式”和“内核模式”。根据处理器上运行的代码的类型,处理器在两个模式之间切换。应用程序在用户模式下运行,核心操作系统组件在内核模式下运行。多个驱动程序在内核模式下运行,但某些驱动程序在用户模式下运行。当启动用户模式的应用程序时,Windows 会为该应用程序创建“进程”。进程为应用程序提供专用的“虚拟地址空间”和专用的“句柄表格转载 2014-06-09 12:50:56 · 2212 阅读 · 0 评论 -
驱动开发之 最简单的处理IRP的派遣函数
最简单的处理IRP的派遣函数原创 2014-07-22 14:48:35 · 1111 阅读 · 0 评论 -
驱动开发之 用DeviceIoControl实现应用程序与驱动程序通信
驱动开发之 用DeviceIoControl实现应用程序与驱动程序通信1.readfile和writefile可以实现应用程序与驱动程序通信,另外一个Win32 API 是DeviceIoControl。应用程序自定义一中IO控制码,然后调用DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTROL,MinorFun原创 2014-07-23 11:04:15 · 5042 阅读 · 0 评论 -
驱动开发之 DeviceType
#define FILE_DEVICE_8042_PORT 0x00000027#define FILE_DEVICE_ACPI 0x00000032#define FILE_DEVICE_BATTERY 0x00000029#define FILE_DEVICE_BEEP 0x00原创 2014-07-23 10:02:11 · 5342 阅读 · 0 评论 -
驱动开发之 设备读写方式:直接方式
上一节介绍了缓冲区方式读写,这一节咱们来看看直接方式读写设备。1.直接方式读写设备,操作系统会将用户模式下的缓冲区锁住,然后操作系统将这段缓冲区在内核模式地址再次映射一遍。这样,用户模式的缓冲区和内核模式的缓冲区指向的是同一区域的物理内存。无论操作系统如何切换进程,内核模式地址都保持不变。创建好设备IoCreateDevice后,需要设置DO_DIRECT_IO, pDevObj原创 2014-07-22 18:01:02 · 3663 阅读 · 0 评论 -
驱动开发之 设备读写方式:缓冲区方式
1.设备对象一共有三种读写方式:缓冲区方式读写(Buffered方式);直接方式读写(Direct方式);Neither方式。这三种方式的Flags分别对应DO_BUFFERED_IO,DO_DIRECT_IO,0在buffered方式中,I/O管理器先创建一个与用户模式数据缓冲区大小相等的系统缓冲区。而你的驱动程序将使用这个系统缓冲区工作。I/O管理器负责在系统缓冲区和用户模式缓冲区之间原创 2014-07-22 15:48:58 · 3655 阅读 · 0 评论 -
驱动开发之 设备读写方式:Neither方式
设备读写的第三种方式是Neither方式,ji原创 2014-07-22 18:31:15 · 1562 阅读 · 0 评论 -
驱动开发之 驱动设备名称,符号连接名,以及应用程序打开设备
驱动设备名:原创 2014-07-02 11:05:47 · 5253 阅读 · 0 评论 -
驱动开发之访问注册表
访问注册表Windows NT和Windows 98把配置信息和其它重要信息都记录到注册表(registry)中。WDM驱动程序可以使用表3-9列出的函数访问注册表。如果你在用户模式编程中曾涉及过注册表访问,你可能会猜出如何在驱动程序中使用这些函数。然而这些内核模式中的支持函数确有些不同,我想有必要描述一下它们的用法。表3-9. 注册表访问函数服务函数 描述 IoOpenDev转载 2014-07-03 16:55:33 · 2361 阅读 · 0 评论 -
驱动开发之 应用程序通过设备接口打开设备
驱动程序中:生成GUID,可利用工具原创 2014-07-03 14:49:53 · 2470 阅读 · 0 评论 -
驱动开发之 常见IRP
IRP_MJ_CLEANUP保持进程定义上下文信息的驱动器,必须在DispatchCleanup中包含cleanup请求。何时发送:收到IRP_MJ_CLEANUP意味着请求的目标设备与目标文件的句柄相关(也可能因为io请求后没有释放)入参:无出参:无操作:该IRP在关闭 file object 句柄的进程上下文中发送。转载 2014-06-25 11:37:11 · 2020 阅读 · 0 评论 -
驱动开发之 完成IRP的几种情况
完成IRP时是忽略还是拷贝当前栈空间,返回什么状态值,以及完成函数中如何结束IRP,是不那么容易弄清楚的一件事情。下面做个总结:1.如果对IRP完成之后的事情无兴趣,则直接忽略当前IO_STACK_LOCATION(从代码上说,调用内核API函数IoSkipCurrentIrpLocation),然后向下传递请求,返回IoCallDriver所返回的状态。2.不但对IRP完成之转载 2014-08-18 10:47:43 · 1513 阅读 · 0 评论