mtv下载器-win 7 旗舰版 激活
![wdm驱动](/uploads/image/0466.jpg)
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驱动
发布评论