mtv下载器-win 7 旗舰版 激活

wdm驱动
2023年4月3日发(作者:惠普系统下载)

windows设备驱动程序WDF开发(1)

武安河另外讲WDM的书是《windows2000/xpwdm设备驱动开发》

KDMF构建在WDM之上,内核级,sys⽂件

UDMF⽤户级,dll⽂件

第1章Windows2000和WDM驱动程序

1.中断优先级(IRQL):32个中断级别,可打断

0:PASSIVE_LEVEL,常规线程

1:APC_LEVEL,异步调⽤过程

2:DISPATCH_LEVEL,延迟过程调⽤

3~26:DIRQL,硬件中断

2.在DISPATCH_LEVEL运⾏代码时,访问⾮分页内存是⼀个根本原则

第2章KMDF驱动程序框架

1.环境变量结构

_DEVICE_CONTEXT{}

pDeviceContext=GetDeviceContext(Device);

2.创建对象的⽅法

KMDF控制的对象⽣命周期:WDFDRIVER,WDFDEVICE,WDFFILEOBJECT,WDFREQUEST(IRP)

结构

1)DriverEntry:设置EvtDeviceAdd(安装时调),WdfDriverCreate创建驱动对象

2)EvtDriverDeviceAdd:新设备被枚举时会调⽤,

职责:创建设备对象,I/O队列,GUID接⼝,事件回调例程,

WdfDeviceCreate,WdfDeviceCreateDeviceInterface,

WdfDeviceInitSetExclusive(DeviceInit,TRUE);//独占,只允许⼀个应⽤打开

WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,WdfIoQueueDispatchSequential);//IO为串⾏

WdfIoQueueCreate//io队列

WdfDeviceCreateDeviceInterface//guid接⼝

3)I/O处理例程

WDF_FILEOBJECT_CONFIG_INIT(&FileConfig,EvtDeviceFileCreate,EvtFileClose,EvtFileCleanup);

eviceControl=PCI9056WDF_EvtIoDeviceControl;//DeviceIoControl调⽤

ead=PCI9056WDF_EvtIoRead;//ReadFile

rite=PCI9056WDF_EvtIoWrite;//WriteFile

第3章基本对象

UEST:I/O请求,即IRP

WdfRequestComplete:完成请求

WdfRequestCompleteWithInformation:完成请求,完成的传输字节数

WdfRequestRetrieveInputBuffer:获取输⼊缓冲器地址

WdfRequestRetrieveInputMemory:获取输⼊缓冲器地址,形式为WDFMEMORY

WdfRequestRetrieveInputWdmMdl:获取输⼊缓冲器地址,形式为MDL

WdfRequestGetIoQueue:返回队列对象

WdfRequestGetFileObject:返回⽂件对象

WdfRequestGetInformation:完成的传输字节数

WdfRequestCreate:创建IO请求

请求(IRP)基本操作

取消IO请求:编写取消例程

向下传递IO请求

UE队列,WdfIoQueueDispatchSequential串⾏

初始化默认队列WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE

WdfIoQueueCreate

WdfIoQueueStart:启动接收和分发IRP

WdfIoQueueStop:暂停分发,但还接收

WdfIoQueueDrain:停⽌接收,但分发

WdfIoQueuePurge:停⽌接收,取消队列中的IRP

ER,WDFDPC,WDFWORKITEM,WDFMEMORY

5.数据同步

1)⾃旋锁运⾏在DISPATCH_LEVEL(⾃动提升),因此不能访问分页内存

WdfSpinLockCreate,WdfSpinLockAcquire,WdfSpinLockRelease

2)WDFWAITLOCK运⾏在PASSIVE_LEVEL,同步锁

WdfWaitLockCreate,WdfWaitLockAcquire,WdfWaitLockRelease

6.字符串

CHAR,WCHAR,STRING,UNICODE_STRING

WDFSTRING:WdfStringCreate

串处理函数:strlen之类

7.队列编程QueueSample

//因为取消例程等要⽤环境变量,所以⽤⼀个设备对象范围同步(重要)

onizationScope=WdfSynchronizationScopeDevice;

调⽤例程,取消例程,定时器回调例程,都⽤了设备对象范围同步,所以运⾏在DISPATCH_LEVEL,不能⽤分页内存。不然要蓝屏

更多推荐

wdm驱动