第4章 KMDF驱动程序编程入门
1. 创建KMDF驱动
source文件: TARGETNAME=PCI9056WDF ; 生成的名字
inx文件, 用build命令可以生成inf
rc文件
2. 编译,可以在cmd中,也可以在VS2008中
3. inf文件的【add_reg】安装时将其参数写入注册表,DriverEntry会读取这些参数
4. RegSample 介绍了如何读取注册表及win32 app调用方式。
调试:一般来说用DbgView,用windbg也可以
第5章 KMDF驱动程序和应用程序之间的通信
1. 应用打开设备一般用:GUID和符号链接名
同步:CreateFile ( FILE_ATTRIBUTE_NORMAL)
异步:CreateFile ( FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED)
关闭设备 CloseHandle: 会先调用EvtFileCleanup -> EvtFileClose
2. DeviceIoControl 缓冲方式
METHOD_BUFFERED: 系统分配一个缓冲区用于输入输出
METHOD_IN_DIRECT/OUT: 输出缓冲区可以用于输入缓冲区
2) ReadFile 和 WriteFile的两种缓冲区方式
WdfDeviceInitSetIoType(DeviceInit, WdfDeviceIoDirect); 和 WdfDeviceIoBuffered
3. 获取地址
3中形式:PVOID, WDFMEMORY, PMDL
WdfRequestRetrieveInputBuffer(), WdfRequestRetrieveInputMemory(), WdfRequestRetrieveInputWdmMdl()
4. 驱动程序对应用程序的通信
两种方法:DeviceIoControl 异步完成, Win32事件通知(上层发一个事件句柄,驱动来set该句柄)
第6章 即插即用例程
1. EvtDevicePrepareHardware 获取资源配置 (安装时evtDeviceAdd之后调用)
EvtDeviceReleaseHardware 释放资源配置 (卸载,或设备意外拔出时调用)
PnpPowerSample实例 展示了各个例程调用的顺序
第7章 电源管理
1. 6种系统电源状态:s0是工作状态,s5是关机状态
s4-PowerSystemHibernate, 冬眠状态,(环境被写入到冬眠文件中)
4种设备电源状态:D0工作态, D3关闭状态。但许多设备往往只定义D0和D3
输入设备(键/鼠)需D1,MODEM设备需D2
IdleSample实例 空闲检测