sosojohn
论坛版主
论坛版主
  • 注册日期2006-01-29
  • 最后登录2021-06-25
  • 粉丝0
  • 关注1
  • 积分1047分
  • 威望535点
  • 贡献值1点
  • 好评度178点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2590回复:0

C-S架构在驱动程序中的应用

楼主#
更多 发布于:2007-02-05 11:11
  在驱动程序中,也可以应用C-S架构:
低级驱动程序充当服务器S
高级驱动程序充当客户端C

大致描述如下:

1. S端流程:
1.低级驱动程序调用IoRegisterDeviceInterface暴露一个接口。该接口为一个唯
一的GUID,并且接口结构对所有的客户是已知的,包括高级驱动程序也是知道的
2.通过调用IoSetDeviceInterfaceState,低级驱动程序启用暴露的接口
3.低级驱动执行常规操作,等待高级驱动连接到它的接口
4.低级驱动必须调用IoSetDeviceInterfaceState声明它的接口对客户无效

2. C端流程:
1.调用IoGetDeviceObjectPointer以获取对低级设备对象的引用。此函数还返回
一个经过计算的文件对象指针,使用ObDereferenceObject释放文件对象指针
2.使用IoGetDeviceObjectPointer返回的设备对象指针,通过GUID对
IoGetDeviceInterface的一个调用,确认被请求的对象存在低级驱动程序中。
3.使用IoCallDriver,把一个IRP发送到一个具有IRP_MJ_PNP
(IRP_MN_QUERY_INTERFACE)的低级设备,以获取请求的接口。接口作为数据和函
数的结构返回。
4.高级驱动程序调用InterfaceReference,这是接口中一个必须的函数指针项。
此函数允许低级驱动程序跟踪它暴露的接口的客户
5.高级驱动程序调用该接口的任何其他方法,或者可以选择读或写接口暴露的数
据。
6.当高级驱动不需要使用接口时候,即RemoveDevice时,更高级驱动程序调用
InterfaceDerefence释放低级驱动程序上接口的使用
游客

返回顶部