在功能驱动程序中创建设备对象
2014-04-23 14:30
239 查看
转:在功能驱动程序中创建设备对象
评价此主题
每个功能驱动程序为系统中存在的其支持的每个设备都创建一个框架设备对象。因为这些设备对象由功能驱动程序创建,所以它们称为功能设备对象 (FDO)。每个 FDO 都是设备的功能驱动程序的表示形式。
每次框架调用驱动程序的
EvtDriverDeviceAdd 回调函数,功能驱动程序必须创建框架设备对象。框架调用此回调函数以通知驱动程序,系统中存在其任一支持的设备。
驱动程序的 EvtDriverDeviceAdd 回调函数接收指向
WDFDEVICE_INIT 结构的指针。驱动程序可以调用一组框架设备对象初始化方法,该方法在 WDFDEVICE_INIT 结构中存储信息。此外,功能驱动程序还可以调用框架
FDO 初始化方法。
在功能驱动程序中创建框架设备对象通常包括以下步骤:
注册 PnP、电源和电源策略回调函数。
大多数功能驱动程序调用
WdfDeviceInitSetPnpPowerEventCallbacks 以注册 PnP 和电源回调函数。有关这些回调函数的详细信息,请参阅在功能驱动程序中支持 PnP 和电源管理。
如果设备支持低功耗空闲状态或具有唤醒功能,则功能驱动程序通常还调用
WdfDeviceInitSetPowerPolicyEventCallbacks 以注册电源策略回调函数。有关这些回调函数的详细信息,请参阅电源策略所有权。
注册功能驱动程序特定的回调函数。
如果必须参与指定设备所需的系统硬件资源,则一些功能驱动程序调用
WdfFdoInitSetEventCallbacks。有关硬件资源的详细信息,请参阅基于框架的驱动程序的硬件资源。
注册文件事件回调函数。
应用程序在设备上打开或关闭文件时,如果驱动程序必须响应,则驱动程序必须调用
WdfDeviceInitSetFileObjectConfig 以注册框架文件对象的回调函数。有关详细信息,请参阅使用框架文件对象。
设置 I/O 请求属性。
如果驱动程序将从框架队列对象接收 I/O 请求,则驱动程序可以调用
WdfDeviceInitSetRequestAttributes 以设置框架将分配给设备的请求对象的上下文内存。有关详细信息,请参阅使用请求对象上下文。
设置设备特征。
通常,功能驱动程序调用以下某些方法指定设备的特征:
WdfDeviceInitSetDeviceType,标识驱动程序支持的硬件类型。WdfDeviceInitSetIoType,如果驱动程序处理来自应用程序的 I/O 请求,则标识访问数据缓冲区的方法。WdfDeviceInitSetCharacteristics,设置设备特征,如设备是否只读或是否支持可移动介质。WdfDeviceInitSetExclusive,如果设备要求每次只能一个应用程序进行独占访问。WdfDeviceInitSetPowerInrush,如果设备在从低功耗状态变为工作 (D0) 状态时需要涌流。WdfDeviceInitSetPowerPageable 或WdfDeviceInitSetPowerNotPageable,指示系统在睡眠状态和工作
(S0) 状态之间转换时驱动程序是否必须访问可分页数据。WdfDeviceInitAssignName,向设备对象分配名称。WdfDeviceInitAssignSDDLString,向设备对象分配安全描述符。WdfDeviceInitSetDeviceClass,标识设备的安装程序类。
获取设备属性。
有时功能驱动程序必须获取有关设备的总线驱动程序或其他低级驱动程序已设置的设备属性的信息。驱动程序可以调用
WdfFdoInitQueryProperty 或
WdfFdoInitAllocAndQueryProperty 以获取该信息。
访问设备的注册表项。
一些功能驱动程序必须获取有关其他驱动程序、用户或安装包已放置到注册表中的设备或驱动程序的信息。驱动程序可以调用
WdfFdoInitOpenRegistryKey 以打开设备或驱动程序的注册表项。有关详细信息,请参阅在基于框架的驱动程序中使用注册表。
创建默认子列表配置以用于动态枚举。
如果您正编写总线的功能驱动程序,并且如果驱动程序将执行连接到总线的子设备的动态枚举,则该驱动程序必须调用
WdfFdoInitSetDefaultChildListConfig。有关详细信息,请参阅在总线上枚举设备。
创建设备对象。
创建设备对象的最后一步是调用
WdfDeviceCreate。
在功能驱动程序中创建设备对象
此主题尚未评级-评价此主题
每个功能驱动程序为系统中存在的其支持的每个设备都创建一个框架设备对象。因为这些设备对象由功能驱动程序创建,所以它们称为功能设备对象 (FDO)。每个 FDO 都是设备的功能驱动程序的表示形式。
每次框架调用驱动程序的
EvtDriverDeviceAdd 回调函数,功能驱动程序必须创建框架设备对象。框架调用此回调函数以通知驱动程序,系统中存在其任一支持的设备。
驱动程序的 EvtDriverDeviceAdd 回调函数接收指向
WDFDEVICE_INIT 结构的指针。驱动程序可以调用一组框架设备对象初始化方法,该方法在 WDFDEVICE_INIT 结构中存储信息。此外,功能驱动程序还可以调用框架
FDO 初始化方法。
在功能驱动程序中创建框架设备对象通常包括以下步骤:
注册 PnP、电源和电源策略回调函数。
大多数功能驱动程序调用
WdfDeviceInitSetPnpPowerEventCallbacks 以注册 PnP 和电源回调函数。有关这些回调函数的详细信息,请参阅在功能驱动程序中支持 PnP 和电源管理。
如果设备支持低功耗空闲状态或具有唤醒功能,则功能驱动程序通常还调用
WdfDeviceInitSetPowerPolicyEventCallbacks 以注册电源策略回调函数。有关这些回调函数的详细信息,请参阅电源策略所有权。
注册功能驱动程序特定的回调函数。
如果必须参与指定设备所需的系统硬件资源,则一些功能驱动程序调用
WdfFdoInitSetEventCallbacks。有关硬件资源的详细信息,请参阅基于框架的驱动程序的硬件资源。
注册文件事件回调函数。
应用程序在设备上打开或关闭文件时,如果驱动程序必须响应,则驱动程序必须调用
WdfDeviceInitSetFileObjectConfig 以注册框架文件对象的回调函数。有关详细信息,请参阅使用框架文件对象。
设置 I/O 请求属性。
如果驱动程序将从框架队列对象接收 I/O 请求,则驱动程序可以调用
WdfDeviceInitSetRequestAttributes 以设置框架将分配给设备的请求对象的上下文内存。有关详细信息,请参阅使用请求对象上下文。
设置设备特征。
通常,功能驱动程序调用以下某些方法指定设备的特征:
WdfDeviceInitSetDeviceType,标识驱动程序支持的硬件类型。WdfDeviceInitSetIoType,如果驱动程序处理来自应用程序的 I/O 请求,则标识访问数据缓冲区的方法。WdfDeviceInitSetCharacteristics,设置设备特征,如设备是否只读或是否支持可移动介质。WdfDeviceInitSetExclusive,如果设备要求每次只能一个应用程序进行独占访问。WdfDeviceInitSetPowerInrush,如果设备在从低功耗状态变为工作 (D0) 状态时需要涌流。WdfDeviceInitSetPowerPageable 或WdfDeviceInitSetPowerNotPageable,指示系统在睡眠状态和工作
(S0) 状态之间转换时驱动程序是否必须访问可分页数据。WdfDeviceInitAssignName,向设备对象分配名称。WdfDeviceInitAssignSDDLString,向设备对象分配安全描述符。WdfDeviceInitSetDeviceClass,标识设备的安装程序类。
获取设备属性。
有时功能驱动程序必须获取有关设备的总线驱动程序或其他低级驱动程序已设置的设备属性的信息。驱动程序可以调用
WdfFdoInitQueryProperty 或
WdfFdoInitAllocAndQueryProperty 以获取该信息。
访问设备的注册表项。
一些功能驱动程序必须获取有关其他驱动程序、用户或安装包已放置到注册表中的设备或驱动程序的信息。驱动程序可以调用
WdfFdoInitOpenRegistryKey 以打开设备或驱动程序的注册表项。有关详细信息,请参阅在基于框架的驱动程序中使用注册表。
创建默认子列表配置以用于动态枚举。
如果您正编写总线的功能驱动程序,并且如果驱动程序将执行连接到总线的子设备的动态枚举,则该驱动程序必须调用
WdfFdoInitSetDefaultChildListConfig。有关详细信息,请参阅在总线上枚举设备。
创建设备对象。
创建设备对象的最后一步是调用
WdfDeviceCreate。
相关文章推荐
- 字符设备驱动程序之自动创建设备节点
- 如何创建用于WindowsNT PCI 设备驱动程序
- chapter 6.6: UMDF 设备对象的创建和初始化
- 20.购物车商品价格的总和(里面有一些功能没有实现,创建textview布局对象,然后for()遍历数据求和)
- 微软企业库Enterprise Library学习笔记二各功能之间的依赖关系以及对象创建
- Tiny6410_LED驱动程序_手动分配主设备号+手动创建设备节点
- 构造器的拷贝功能(对象应该有一个创建自身的方法)
- WDM驱动——物理设备对象与功能设备对象
- 22-IO流-33-IO流(File对象-常见功能-创建和删除)
- 自定义绘图添加抗锯齿功能 尽量不要在onDraw()方法中创建paint对象
- 设备读写通用对象 Delphi下创建
- Tiny6410_LED驱动程序_自动分配主设备号+手动创建设备节点
- DX编程(1) — 创建D3D对象、D3D设备,渲染
- 字符设备驱动程序之自动创建设备节点
- 迈思德物联网网关软件将在2017年第一季度完成工业物联网设备对象管理化功能
- Tiny6410_LED驱动程序_自动分配主设备号+自动创建设备节点
- CEPH RGW 设置 user default_placement为ssd-placement,优化100KB-200KB小文件性能,使用户创建的bucket对象放置到 SSD设备的Pool上。
- 微软企业库4.1学习笔记(二)各功能之间的依赖关系以及对象创建
- 创建设备对象,用IoCreatDevice
- 波形捕捉:(2)创建捕捉设备对象