内核与驱动
文章平均质量分 88
Hustudent20080101
MFC Qt 瑞萨 ARM Linux
展开
-
编驱动程序用什么开发工具?
1.DDK (Driver Development Kit) (可以到微软网站www.microsoft.com上免费下载)2.Driver Studio(Compuware NuMega公司的产品)+DDK3.WinDriver + DDK转载 2012-05-18 16:41:08 · 880 阅读 · 0 评论 -
驱动程序的入口函数
extern “C”{ #include “wdm.h” }… … … … extern "C"NTSTATUS DriverEntry(INPDRIVER_OBJECT DriverObject,INPUNICODE_STRING RegistryPath){ … … … … return STATUS_SUCCESS;}转载 2012-05-18 16:42:19 · 1297 阅读 · 0 评论 -
HelloWorld版的驱动程序
extern “C”{ #include “wdm.h” }extern "C"NTSTATUS DriverEntry(INPDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath){NTSTATUS status = STATUS_DEVICE_CONFIGURATION_ERR转载 2012-05-18 16:43:02 · 508 阅读 · 0 评论 -
内核模式下我们能调用哪些函数?
内核模式下我们能调用哪些函数?1.Windows内核输出的内核API函数;2.DDK提供的运行时间库3.其它驱动程序提供的服务内核模式下我们不能调用哪些函数?1.Windows的用户模式API函数;2.ISO规定的C/C++标准函数库DDK中一个驱动型工程的组成1.MAKEFILE文件,一般不作改动转载 2012-05-18 16:46:10 · 569 阅读 · 0 评论 -
即插即用型设备驱动的加载过程
即插即用型设备驱动的加载过程现假设驱动程序已被正确安装:1.某种PnP总线驱动发现了即插即用设备的存在:①对于热插拔设备,则发现过程发生于插入设备的瞬间;②如果是非热插拔设备,则发现过程发生于系统启动时2.PnP总线驱动利用即插即用协议询问设备的ID信息设备的ID信息是一个能够唯一标识该设备的字符串,一般格式为:总线类型&厂商ID&产品ID&设备ID&版本号转载 2012-05-18 16:53:32 · 1342 阅读 · 0 评论 -
错误:Do not assign include
错误:Do not assign include1.从M$的网站上去下载wdk 我现在下载的是6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso 这个版本2.安装好了之后 建一个目录写入makefile sources first.c文件3.编译ps:遇到一个问题编译的时候报D转载 2012-05-18 18:58:56 · 699 阅读 · 0 评论 -
驱动对象(Driver Object)
驱动对象(Driver Object)1.在操作系统首次装载一个驱动程序之后,它会创建一个数据结构用来记录该驱动,该数据结构我们称为驱动对象(Driver Object)。2.驱动对象记录与驱动程序本身相关的信息,它主要包含了除了DriverEntry之外的其它驱动程序入口函数的入口地址。(驱动程序是一种具有多个入口函数的程序)3.驱动对象是由操作系统创建,然后作为Driv转载 2012-05-18 20:21:32 · 850 阅读 · 0 评论 -
驱动对象的一些关键字段
驱动对象的一些关键字段1.DriverStartIo (PDRIVER_STARTIO) : 指向StartIO入口函数的指针.2.DriverUnload (PDRIVER_UNLOAD) :指向DriverUnload入口函数的指针。在驱动程序被从内存中卸载时,DriverUnload入口函数会被操作系统调用,你应该在该函数内部做一些与DriverEntry向对应的资源清除工作转载 2012-05-18 20:24:14 · 491 阅读 · 0 评论 -
first.c 驱动
////// @file first.c/// @author crazy_chu/// @date2008-11-1///#include // 提供一个Unload 函数只是为了让这个程序能动态卸载,方便调试。VOID DriverUnload(PDRIVER_OBJECT driver){// 但是实际上我们什么都不做,只打印一句话:DbgPrint("first: Ou转载 2012-05-18 20:27:11 · 527 阅读 · 0 评论 -
安装 WDK dsfksvcs.sys 损坏
windows驱动 安装 WDK dsfksvcs.sys 损坏分类: 驱动2010-08-26 00:26 403人阅读 评论(2) 收藏 举报开发工具:WDK + WinDBG + DebugView + VMWARE(前三者都可以在MS网站上下到,最后一个在学校BT上下的,很快!) 问题汇总:安装WDK时要小心,千万不可安装那个Device Simulation Fr转载 2012-05-19 08:54:12 · 666 阅读 · 0 评论 -
用户模式与内核模式
1.为了更好地保护系统,Windwos规定了两种处理器工作模式:用户模式和内核模式。2.工作在用户模式的程序只能使用CPU支持指令集的一个子集,只能访问用户空间中的内存,并且不能直接访问硬件。3.工作在内核模式的程序不受任何限制,可以使用CPU支持的任意指令,可以访问任意的内存空间,可以直接访问硬件。4.所有的Windows应用程序都工作于用户模式,Windows内核程序都工作于内核模转载 2012-05-18 16:38:31 · 579 阅读 · 0 评论 -
什么是Windows驱动程序?
1.Windows驱动程序是一种位于内核地址空间并且工作于内核模式的一种特殊的程序类型(.sys文件)。2.驱动程序是操作系统信任的一个内核扩展模块。3.驱动程序和操作系统之间遵循的是容器与插件模型。OS负责管理Driver的生命周期;Driver是一种被动的软件模块。4.驱动程序类似于DLL程序,它是一个回调函数(子程序)的集合体,这些函数由OS在适当的时候调用5.驱动程序也可以转载 2012-05-18 16:39:59 · 2270 阅读 · 0 评论 -
如何安装驱动程序?
1.必须编写一个安装指示文件(.inf)指导Windows将驱动程序安装到指定位置(一般安装在windows\system32\drivers子目录下),并在注册表中进行登记。2.对于即插即用类设备的驱动,操作系统会自动发现该设备并调用“添加新硬件”程序向用户询问相应的inf文件的位置。3.对于非即插即用类设备的驱动,用户必须自己手动调用“添加新硬件”程序,并通过告诉该程序inf文件的位置转载 2012-05-18 16:48:04 · 634 阅读 · 0 评论 -
“即插即用”型外设
“即插即用”型外设1.从用户角度看,即插即用外设具备如下两种能力:①主机能够自动发现该外设;②主机能够自动查找并加载相应的驱动程序。2.从专业角度看,即插即用型外设还具有如下功能:①能够利用即插即用总线协议向主机汇报自己的 唯一标识信息和I/O资源请求;②能够通过即插即用总线协议接收主机的I/O资源分配结果并对自己的硬件逻辑作出相应的调整。3.常用的I/O资转载 2012-05-18 16:50:26 · 645 阅读 · 0 评论 -
非即插即用型设备驱动的加载过程
非即插即用型设备驱动的加载过程1.非PnP总线驱动在系统启动时通过扫描注册表发现非PnP设备的存在,并向OS报告ID信息。(例如根总线驱动通过扫描HKLM\ SYSTEM\CurrentControlSet\Enum\Root的各个子目录。)2.后面的加载步骤与即插即用型设备类似。3.唯一不同的是非PnP设备的资源请求直接写在了注册表里,总线驱动不再询问设备。递归加转载 2012-05-18 16:56:03 · 995 阅读 · 0 评论 -
偶像!
转载 2012-05-19 14:56:11 · 555 阅读 · 0 评论 -
_asm int 3
////// @file first.c/// @author crazy_chu/// @date2008-11-1///#include // 提供一个Unload 函数只是为了让这个程序能动态卸载,方便调试。VOID DriverUnload(PDRIVER_OBJECT driver){// 但是实际上我们什么都不做,只打印一句话:DbgPrint("first: Ou转载 2012-05-19 19:42:20 · 1492 阅读 · 0 评论 -
IRP 的结构
。WDK 中的wdm.h 中,能找到IRP 的结构如下:typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP{// 类型和大小CSHORT Type;USHORT Size;// 内存描述符链表指针。实际上,这里用来描述一个缓冲区。可以想象,// 一个内核请求一般都需要一个缓冲区(如读硬盘需要有读出缓冲区)转载 2012-05-19 20:15:46 · 904 阅读 · 0 评论 -
驱动中获得系统时间(转)
驱动中获得系统时间(转)2007年09月06日 星期四 9:581. KeQuerySystemTime() 获得当前的 GMT System Time. 这是一个从 1601-01-01 以来的计数(单位是 100ns) 2. ExSystemTimeToLocalTime() 将 GMT System Time 值转换成当前时区的 Local System Time. 3. Rtl转载 2012-05-20 15:30:31 · 650 阅读 · 0 评论 -
“正邪兼修”
只有极少的程序员会需要参与微软的Windows内核开发,也只有极少的读者会自己试图从头开发一个类Windows的操作系统内核(有这方面兴趣的读者,建议参考开源项目ReactOS)。单纯地讲解Windows内核编程对大多数读者都没有意义。但是,信息安全类的软件是内核编程的极好的应用实例。病毒实时监控、防火墙、入侵检测、数据保护还原、数据即时备份、数据加密、数据防止泄密、反外挂等,都不同程度地涉及到内转载 2012-05-19 15:24:13 · 1413 阅读 · 0 评论 -
基本数据类型
转载 2012-05-19 19:12:45 · 447 阅读 · 0 评论 -
Windows驱动开发模型
转载 2012-05-20 09:46:49 · 544 阅读 · 0 评论 -
2.6.3 代码的中断级
2.6.3 代码的中断级这是除了多线程安全性之外,常常困扰初学者的另一个问题。在用户态编程中,没有中断级的概念,这是因为用户态程序都运行在同一中断级。但是在内核编程中,就常常出现运行的代码处在不同的中断级的情况。本书不探讨中断级的本质,只说明中断级的判断方法。读者现在需要了解的中断级主要有Passive级和Dispatch级两种,Dispatch级比Passive级高。在实际编程时,许多具转载 2012-05-20 10:55:33 · 486 阅读 · 0 评论 -
typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT Size; LONG ReferenceCount; struct _DRIVER_OBJECT *DriverObject; struct _DEVICE_OBJEC转载 2012-05-20 14:56:31 · 902 阅读 · 0 评论 -
typedef IRP *PIRP;
//// I/O Request Packet (IRP) definition//typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP { CSHORT Type; USHORT Size; // // Define the common fields used to contro转载 2012-05-20 15:02:31 · 735 阅读 · 0 评论 -
打印驱动对象下的域值
////// @file first.c/// @author crazy_chu/// @date2008-11-1///#include // 提供一个Unload 函数只是为了让这个程序能动态卸载,方便调试。VOID DriverUnload(PDRIVER_OBJECT driver){ LARGE_INTEGER SysTime, LocalTime; T原创 2012-05-20 15:35:27 · 624 阅读 · 0 评论 -
IoAttachDevice
转载 2012-05-20 16:10:28 · 669 阅读 · 0 评论 -
WinDbg符号表
转载 2012-05-19 18:47:02 · 636 阅读 · 0 评论 -
用户空间_内核空间
转载 2012-05-19 18:55:14 · 448 阅读 · 0 评论 -
2-3-2 帮助中有的几类函数
2-3-2 帮助中有的几类函数在帮助中有很多的函数。作者本人没有数过,但是估计有上千个。幸运的是,大多数是读者可能一辈子都不会使用的。比Win32API 好的是,大部分内核API 都有前缀。主要的函数以Io-、Ex-、Rtl-、Ke-,Zw-和Nt-和Ps-开头。此外NDIS 网络驱动开发相关的函数几乎都是以Ndis-开头的。下面列出一些常用的内核API,但是并不详细介绍用法。转载 2012-05-19 20:37:08 · 1059 阅读 · 0 评论 -
2-3-3 帮助中没有的函数
2-3-3 帮助中没有的函数并不是所有可以调用的函数都已经列举在帮助里。比较典型的是C 运行时库中的stdlib.h 和stdio.h 以及memory.h 三个头文件里很多函数实际上可以使用的。但是也并非全部。比如,printf、scanf,以及fopen、fclose、fwrite、fread 这些函数就不行。因为在内核里显然没有控制台,而且,读写文件也不是那么轻松。要顾及到很转载 2012-05-19 20:42:48 · 474 阅读 · 0 评论 -
WDF与WDM区别 之一
WDF与WDM区别 之一2010-06-22 20:42WDF驱动模型如所周知,自Windows 2000开始,开发驱动程序必以WDM为基础的,但其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易。为改善这种局面,微软推出了新的驱动程序开发环境。要预先指出的是,这不是另起炉灶改弦更张,而是以WDM为基础进行了建模和封装,显著特点是降低了开发难度。因为:转载 2012-05-19 21:51:36 · 2990 阅读 · 0 评论 -
判断多线程
转载 2012-05-20 10:31:41 · 457 阅读 · 0 评论 -
typedef struct _DRIVER_OBJECT
typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; // // The following links all of the devices created by a single driver // together on a list, and the Flags word provide转载 2012-05-20 14:51:21 · 705 阅读 · 0 评论 -
[讨论] 1.虚拟设备驱动程序初步
发表于 2007-12-22 02:26:12 |只看该作者 |倒序浏览在本教程里,我假定读者对诸如虚8086模式,调页,GDT,LDT,IDT之类的INTEL 80x86保护模式的操作比较熟悉。如果你不了解这些,那你要先在 http://developer.intel.com/design/pentium/manuals/阅读INTEL的文档。转载 2012-05-20 17:17:46 · 643 阅读 · 0 评论 -
IoAttachDevice;IoAttachDeviceToDeviceStack
IoAttachDeviceNTSTATUS IoAttachDevice( IN PDEVICE_OBJECT SourceDevice, IN PUNICODE_STRING TargetDevice, OUT PDEVICE_OBJECT *AttachedDevice );SourceDevice是要挂上的设备,TargetDe转载 2012-05-21 08:30:37 · 1045 阅读 · 0 评论 -
IoGetAttachedDevice 获得设备所在栈最顶层的设备
IoGetAttachedDevice 获得设备所在栈最顶层的设备2012-05-19 13:01获得设备所在设备栈最顶层的设备。PDEVICE_OBJECT IoGetAttachedDevice( IN PDEVICE_OBJECT ); ParametersDeviceObjectPointer to the转载 2012-05-21 19:17:21 · 1748 阅读 · 0 评论 -
DbgPrint/KdPrint输出格式控制
DbgPrint/KdPrint输出格式控制2011年1月1日代码疯子发表评论阅读评论在驱动编程学习中,往往需要通过DbgPrint或者KdPrint来输出调试信息,对于Check版本,KdPrint只是DbgPrint的一个宏定义,而对于Free版本,KdPrint将被优化掉。这些输出信息可以通过DebugView对内核的监控来看到。KdPrint is转载 2012-05-21 16:22:57 · 734 阅读 · 0 评论 -
GRMWDK_EN_7600_1.ISO是什么
2010-11-6是最新出的,英文版的,WDK,微软的,跟DDK差不多的东西。但它那是为了WIN而写的。而且带开发工具相反还有一个SDK,是编译软件的。DDK,WDK,写驱动啊之类的程序要用到。转载 2012-09-28 16:36:59 · 4542 阅读 · 0 评论 -
五、 在驱动中读写文件
五、在驱动中读写文件对文件的读写操作一直是程序开发人员需要熟练掌握的内容,在ring3我们可以使用CreateFile、ReadFile、WriteFile等API,在ring0同样很相似,不过函数变成了ZwCreateFile、ZwReadFile、ZwWriteFile等内核函数。5.1 使用OBJECT_ATTRIBUTESZwCreateFile与ring3的CreateF转载 2012-12-05 20:09:22 · 2070 阅读 · 0 评论