驱动简介.ppt
《驱动简介.ppt》由会员分享,可在线阅读,更多相关《驱动简介.ppt(30页珍藏版)》请在三一文库上搜索。
1、,驱动简介 石俊 QQ21659779,目标,驱动的基本概念 驱动的应用 作用 分类 开发环境的搭建 驱动程序示例 NT驱动代码示例 WDM驱动代码示例,驱动的基本概念,驱动程序,英文名为“Device Driver”,全称为“设备驱动程序”,它是一种特殊的程序。首先其作用是将硬件本身的功能告诉操作系统,接下来的主要功能就是完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。 所以简单的说驱动程序提供了硬件到操作
2、系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。,驱动的应用,只有通过驱动程序,操作系统才能控制电脑上的硬件设备,所以说电脑的每一个硬件都离不开驱动程序,疑问,CPU等设备为什么不用装驱动程序? 像U盘这种USB设备直接连接到电脑就可以使用了,这是为什么? 有了高版本的操作系统,我是否还需要安装驱动程序?,驱动分类,驱动程序按其服务的不同硬件对象,可以分为主板驱动、显卡驱动、声卡驱动等。 按操作系统的不同也可以分为For Windows XP、For Vista、Fo
3、r Win7、For Linux等。 根据设计标准和发行情况的不同可分为公版驱动程序、非公版驱动程序和正式版驱动程序、非正式版驱动程序。 根据安装、加载等方式的不同分成NT驱动和WDM驱动。 WDM是即插即用, 通过inf来加载 NT式不支持即插即用,通过服务来加载,开发环境的搭建,VM Microsoft Visual C+ Windows Driver development kit(ddk) Compuware DriverStudio,WinDbj,DDK的安装,DDK也叫驱动程序开发包(Driver Development Kit)。,图1 DDK的安装,图2 DDK安装,NT驱动代
4、码示例分析,NT驱动头文件说明 NT驱动入口函数 创建设备例程 卸载驱动例程 默认派遣例程,NT驱动头文件说明,#ifdef _cplusplus extern “C“/如果直接包含ntddk.h,函数的符号表会导入错误 #endif #include #ifdef _cplusplus #endif typedef struct _DEVICE_EXTENSION PDEVICE_OBJECT pDevice;/设备对象的指针 UNICODE_STRING ustrDeviceName; /设备名称 UNICODE_STRING ustrSymLinkName; /符号链接名 DEVICE_
5、EXTENSION, *PDEVICE_EXTENSION; / 函数声明 NTSTATUS CreateDevice (IN PDRIVER_OBJECT pDriverObject);/创建设备例程 VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject);/驱动卸载例程 NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,IN PIRP pIrp);/默认派遣例程,NT驱动入口函数,extern “C“ NTSTATUS DriverEntry ( IN PDRIVER_O
6、BJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) NTSTATUS status; KdPrint(“Enter DriverEntryn“); /注册其他驱动调用函数入口 pDriverObject-DriverUnload = HelloDDKUnload; pDriverObject-MajorFunctionIRP_MJ_CREATE = HelloDDKDispatchRoutine; pDriverObject-MajorFunctionIRP_MJ_CLOSE = HelloDDKDispatchRoutine; pD
7、riverObject-MajorFunctionIRP_MJ_WRITE = HelloDDKDispatchRoutine; pDriverObject-MajorFunctionIRP_MJ_READ = HelloDDKDispatchRoutine; /创建驱动设备对象 status = CreateDevice(pDriverObject); KdPrint(“DriverEntry endn“); return status; ,创建设备例程,NTSTATUS CreateDevice ( IN PDRIVER_OBJECT pDriverObject) NTSTATUS sta
8、tus; PDEVICE_OBJECT pDevObj; PDEVICE_EXTENSION pDevExt; /创建设备名称 UNICODE_STRING devName; RtlInitUnicodeString(,pDevObj-Flags |= DO_BUFFERED_IO; pDevExt = (PDEVICE_EXTENSION)pDevObj-DeviceExtension; pDevExt-pDevice = pDevObj; pDevExt-ustrDeviceName = devName; /创建符号链接 UNICODE_STRING symLinkName; RtlIni
9、tUnicodeString( ,卸载驱动例程,VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) PDEVICE_OBJECT pNextObj; KdPrint(“Enter DriverUnloadn“); pNextObj = pDriverObject-DeviceObject; while (pNextObj != NULL) PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION) pNextObj-DeviceExtension; /删除符号链接 UNICODE_STRING pLin
10、kName = pDevExt-ustrSymLinkName; IoDeleteSymbolicLink( ,默认派遣例程,NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) KdPrint(“Enter HelloDDKDispatchRoutinen“); NTSTATUS status = STATUS_SUCCESS; / 完成IRP pIrp-IoStatus.Status = status; pIrp-IoStatus.Information = 0; / bytes xfered I
11、oCompleteRequest( pIrp, IO_NO_INCREMENT ); KdPrint(“Leave HelloDDKDispatchRoutinen“); return status; ,WDM驱动代码示例分析,WDM头文件 WDM驱动入口函数 AddDevice例程 处理PNP的回调函数 对PNP的默认处理 对IRP_MN_REMOVE_DEVICE的处理 其他IRP的回调函数 卸载例程,WDM头文件,#ifdef _cplusplus extern “C“ #endif #include #ifdef _cplusplus #endif typedef struct _DE
12、VICE_EXTENSION PDEVICE_OBJECT fdo;/功能设备对象 PDEVICE_OBJECT NextStackDevice;/下层驱动设备 UNICODE_STRING ustrDeviceName; / 设备名 UNICODE_STRING ustrSymLinkName; / 符号链接名 DEVICE_EXTENSION, *PDEVICE_EXTENSION; #define arraysize(p) (sizeof(p)/sizeof(p)0) NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNIC
13、ODE_STRING RegistryPath); /入口函数 NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT PhysicalDeviceObject); /AddDevice例程 NTSTATUS HelloWDMPnp(IN PDEVICE_OBJECT fdo,IN PIRP Irp); /处理PNP的回调函数 NTSTATUS DefaultPnpHandler(PDEVICE_EXTENSION pdx, PIRP Irp); /对PNP的默认处理 NTSTATUS Handle
14、RemoveDevice(PDEVICE_EXTENSION pdx, PIRP Irp); /对IRP_MN_REMOVE_DEVICE的处理 NTSTATUS HelloWDMDispatchRoutine(IN PDEVICE_OBJECT fdo,IN PIRP Irp); /对其他IRP的回调函数 void HelloWDMUnload(IN PDRIVER_OBJECT DriverObject);/卸载例程,WDM驱动的入口函数,extern “C“ NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 驱动 简介
链接地址:https://www.31doc.com/p-3237158.html