基于windows2000开发wdm设备驱动程序的方法论文

基于windows2000开发wdm设备驱动程序的方法论文

ID:10982476

大小:50.50 KB

页数:2页

时间:2018-07-09

基于windows2000开发wdm设备驱动程序的方法论文_第1页
基于windows2000开发wdm设备驱动程序的方法论文_第2页
资源描述:

《基于windows2000开发wdm设备驱动程序的方法论文》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、基于Windows2000开发WDM设备驱动程序的方法论文摘要:本文介绍了1_DEVICE_EXTENSION),NULL,//NoNameFILE_DEVICE_UNKNOinorFunction=IrpStack-MinorFunction;if(MinorFunction==IRP_MN_REMOVE_DEVICE){DebugPrint("PnPRemoveDevice");//disabledeviceinterfaceIoSetDeviceInterfaceState(dx-ifSymLinkName,FALSE);RtlFreeUnicodeString

2、(dx-ifSymLinkName);//unattachfromstack从设备栈脱离if(dx-NextStackDevice)IoDetachDevice(dx-NextStackDevice);//deleteourfdo删除设备IoDeleteDevice(fdo);}CreateFileIRP_MJ_CreateJ_J_CLOSEDeviceIoControlMJ_DEVICEIOCONTROLReadFileMJ_CLOSE所有的分发例程都有相同的函数原型,均需传递一个设备对象的指针和IRP,IRP由IRP首部和一系列的栈单元组成,每个栈单元是一个IO_

3、STACK_LOCATION结构,首部和栈单元指出要作的动作,栈中有主要的重要参数如MajorFunction和MinorFunction,每个驱动只认识一个栈单元。2.7即插即用驱动必须有AddDevice例程并处理各种PnPIRP:IRP_MN_START_DEVICE分配资源并启动一个设备。IRP_MN_STOP_DEVICE停止设备进行资源重新分配。3.具体实现同许多应用程序一样,驱动程序是PE格式的,但是它却没有ain或main这样的入口,取而代之的是DriverEntry:NTSTATUSDriverEntry(INPDRIVER_OBJECTDriver

4、Object,//不同于前面的PDOINPUNICODE_STRINGRegistryPath){DriverObject-DriverExtension-AddDevice=AddDevice;//DriverExtension中存放着驱动程序扩展信息,包括设备所需要的硬件资源等。DriverObject-MajorFunctionIRP_MJ_CREATE=RequestCreate;DriverObject-MajorFunctionIRP_MJ_CLOSE=RequestClose;DriverObject-MajorFunctionIRP_MJ_DEVICE

5、_CONTROL=RequestControl;DriverObject-MajorFunctionIRP_MJ_PNP=RequestPnp;returnSTATUS_SUCCESS;}----在DriverEntry驱动程序要向操作系统登记并注册一些消息处理器,而且还要指明是否对驱动程序输入输出的数据进行缓冲,另外还要我们提供一个AddDevice例程来把驱动程序添加到驱动程序堆栈中。其中,IRP_MJ_XXXXX为驱动程序所收到的系统消息,RequestXXXXX为相应的消息处理函数。在客户端程序中,我们一般要采用DeviceIoControl通过自定义的控制码

6、与驱动程序通信(在VxD中大多也采用这种方式)。看看驱动程序所收到的系统消息,我们不难发现当用户调用DeviceIoControl时操作系统就会向驱动程序发出一条IRP_MJ_DEVICE_CONTROL消息,以触发RequestControl消息处理函数。NTSTATUSRequestControl(INPDEVICE_OBJECTDeviceObject,.freeleters.DeviceIoControl.IoControlCode;//取得控制码InputLength=IrpStack-Parameters.DeviceIoControl.InputBuff

7、erLength;//取输入缓冲区大小OutputLength=IrpStack-Parameters.DeviceIoControl.OutputBufferLength;//取输出缓冲区大小s./n");//向调试器输出字符串status=STATUS_SUCCESS;//置返回值break;default:status=STATUS_INVALID_DEVICE_REQUEST;//输入的控制码不支持}returnpleteRequest(Irp,status,0);//调用pleteRequest通知操作系统完成IRP操作立刻注册,享受三天的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。