阅读:2081回复:11
请教应用程序和驱动之间的通讯的问题
请问应用程序传给驱动的是一个IOCTL的32位的代码,请问接下来驱动会怎么处理
|
|
沙发#
发布于:2002-11-05 12:01
只有写这段code的人才知道!
|
|
|
板凳#
发布于:2002-11-05 13:13
想好了再问,这问题怎么答?
:D :D |
|
|
地板#
发布于:2002-11-05 16:18
刚刚接触,肯定是有点不熟悉,怪问题在所难免,应该详加指点,
不该说风凉话,咳咳! |
|
地下室#
发布于:2002-11-05 21:33
不好意思,我也是刚接触驱动开发,所以难免会提出一些怪问题,请高手们谅解。其实我买了一块开发板,我在它的应用程序里发现应用程序和驱动程序进行通讯时使用的是DeviceIOControl命令,我发现应用程序最后向驱动程序传的似乎是一个32位的16进制数(我不知道对不对,如果不对请各位大侠指正),我想问的是这是驱动程序会怎样响应。
|
|
5楼#
发布于:2002-11-06 12:22
你发现的都是正确的,但是你的问题确实除了写这个driver的人,别人根本没有办法回答!
|
|
|
6楼#
发布于:2002-11-06 15:25
Thanks!
|
|
7楼#
发布于:2002-11-06 15:38
rayyang2000 ,只给了你5分,希望不要嫌少,实在是囊中羞涩呀!
|
|
8楼#
发布于:2002-11-06 15:41
在驱动程序的driverentry函数中定义一个处理
IRP_MJ_EDVICE_CONTROL的回调例程,例如: DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoControl; 你在应用程序中定义的IOCTL是存储在IRP栈的Parameters.DeviceIoControl的IoControlCode中。 关于这些,看看WDM的书吧! 记得给分哟! |
|
9楼#
发布于:2002-11-06 17:48
发表于: 2002/11/6 - 15:41 对的。编写驱动的人这样处理你发来的请求,在IoControl一般这样处理 IoControl(IN PDEVICE_OBJECT pDO,IN PIRP pIRP) { ??? ? ? ? ULONG controlCode; PIO_STACK_LOCATION pIrpStack; pIrpStack=IoGetCurrentIrpStackLocation(pIRP); controlCode=pIrpStack->Parameters.DeviceIoControl.IoControlCode; switch(controlCode) { case ioctl_xxx: case ioctl_xxx: ? ? ? } } |
|
|
10楼#
发布于:2002-11-07 10:08
这样就可以根据定义的IOCTL执行相应的处理了 :)
|
|
|
11楼#
发布于:2002-11-07 18:40
驱动程序中,对这个I/O ControlCode进行定义,然后实现相关功能。
|
|