阅读:1957回复:6
lu0,能告诉我怎样使用紧耠合方式
驱动之间调用可以使用IRP方式,但我想作一个类似API但是在内核中的东东,由一个驱动对另一个驱动提供一系列函数接口,所以人看书上的知识是紧耠合方式最适合了。紧耠合方式与Oneys的Generic.sys是一回事吗?听说DDK中的鼠标程序中使用了紧耠合,但具体中哪两个?使用到哪几个函数?
在Generic.sys中我怎么看不出在哪别的驱动程序中在哪调用了generic.sys, 是在AddDriver()中吗? |
|
沙发#
发布于:2001-08-11 11:39
驱动之间的通信和调用是通过IRP解决的. 将自己的DEVICE OBJECT挂接到目标DEVICE OBJECT上. 让其他CALLER任务自己的DEVICE OBJECT是IRP的发送目标. 然后自己经过处理后将IRP通过IOCALLDRIVER发送到目标DEVICE.
|
|
|
板凳#
发布于:2001-08-11 15:54
下面是DDK中的一段说明:
Mouclass uses an IOCTL_INTERNAL_MOUSE_CONNECT request to connect its class service callback to a mouse device VOID MouseClassServiceCallback ( IN PDEVICE_OBJECT DeviceObject, IN PMOUSE_INPUT_DATA InputDataStart, IN PMOUSE_INPUT_DATA InputDataEnd, IN OUT PULONG InputDataConsumed); The MouseClassServiceCallback routine is the class service callback that is provided by Mouclass. A function driver calls the class service callback in its ISR dispatch completion routine. The class service callback transfers input data from the input data buffer of a device to the class data queue. 1。鼠标类驱动程序向鼠标的功能驱动程序发送IOCTL_INTERNAL_MOUSE_CONNECT request 以便传送这个回调函数的地址; 2。鼠标的功能驱动程序在合适的时候调用类驱动程序定义的这个函数以传递鼠标事件; 这是否符合你认为的紧耠合方式?? 看看DDK文档和DDK中的事例,你就明白。 |
|
地板#
发布于:2001-08-14 20:20
我认为generic.sys是一个紧耦合的例子。
其中导出的一些接口函数,不就是内存函数列表吗? 但是,其中的结构,我还没有搞清楚,还希望大家多指点。 |
|
|
地下室#
发布于:2001-08-22 17:58
我也不知是不是紧耠方式,但最得要的是能输出函数,而且保证效率就可!
好啦,给分,我以我的标准给分,少了也别怨。 |
|
5楼#
发布于:2001-09-29 00:51
tight-coupled inter-driver communication is done by EXPORTED_DRIVER which is a kmd dll.
The exported driver exports APIs to other driver or KMD component. When an exported driver is build,a .lib file will be generated, other driver that need to call those API, just link itself with the .lib. You don't have to load the exported driver(like generic.sys) in your driver. NT/2000's storage driver stack is a good example to demostrate this mechanism. |
|
|
6楼#
发布于:2001-09-30 18:40
写一个kernel dll 可以解决问题
http://www.osr.com/ntinsider/1997/krndll.htm |
|