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

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

ID:24593261

大小:53.00 KB

页数:4页

时间:2018-11-14

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

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

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

2、;ifSymLinkName,FALSE);RtlFreeUnicodeString(dx->ifSymLinkName);//unattachfromstack从设备栈脱离if(dx->NextStackDevice)IoDetachDevice(dx->NextStackDevice);//deleteourfdo删除设备IoDeleteDevice(fdo); }CreateFileIRP_MJ_CreateJ_J_CLOSEDeviceIoControlMJ_DEVICE

3、IOCONTROLReadFileMJ_CLOSE所有的分发例程都有相同的函数原型,均需传递一个设备对象的指针和IRP,IRP由IRP首部和一系列的栈单元组成,每个栈单元是一个IO_STACK_LOCATION结构,首部和栈单元指出要作的动作,栈中有主要的重要参数如MajorFunction和MinorFunction,每个驱动只认识一个栈单元。2.7 即插即用驱动必须有AddDevice例程并处理各种PnPIRP:IRP_MN_START_DEVICE分配资源并启动一个设备。IRP_MN_STO

4、P_DEVICE停止设备进行资源重新分配。3.具体实现同许多应用程序一样,驱动程序是PE格式的,但是它却没有ain或main这样的入口,取而代之的是DriverEntry:NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,//不同于前面的PDOINPUNICODE_STRINGRegistryPath){DriverObject->DriverExtension->AddDevice=AddDevice;//DriverExtension

5、中存放着驱动程序扩展信息,包括设备所需要的硬件资源等。DriverObject->MajorFunction[IRP_MJ_CREATE]=RequestCreate;DriverObject->MajorFunction[IRP_MJ_CLOSE]=RequestClose;DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=RequestControl;DriverObject->MajorFunction[IRP_MJ

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

7、种方式)。看看驱动程序所收到的系统消息,我们不难发现当用户调用DevicEIoControl时操作系统就会向驱动程序发出一条IRP_MJ_DEVICE_CONTROL消息,以触发RequestControl消息处理函数。NTSTATUSRequestControl(INPDEVICE_OBJECTDeviceObject,INPIRPIrp){PIO_STACK_LOCATIONIrpStack;ULONGControlCode;ULONGInputLength,OutputLength;NTST

8、ATUSstatus;IrpStack=IoGetCurrentIrpStackLocation(Irp);//获取当前IRP所在的I/O堆栈ControlCode=IrpStack->Parameters.DeviceIoControl.IoControlCode;//取得控制码InputLength=IrpStack->Parameters.DeviceIoControl.InputBufferLength;//取输入缓冲区大小OutputLength=IrpSta

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

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

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