阅读:2671回复:0
C-S架构在驱动程序中的应用
在驱动程序中,也可以应用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释放低级驱动程序上接口的使用 |
|