jasmine_wu001
驱动小牛
驱动小牛
  • 注册日期2002-04-26
  • 最后登录2010-09-20
  • 粉丝0
  • 关注0
  • 积分169分
  • 威望107点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:2080回复:11

请教应用程序和驱动之间的通讯的问题

楼主#
更多 发布于:2002-11-05 11:56
请问应用程序传给驱动的是一个IOCTL的32位的代码,请问接下来驱动会怎么处理
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-05 12:01
只有写这段code的人才知道!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
trent
驱动老牛
驱动老牛
  • 注册日期2002-03-01
  • 最后登录2014-09-18
  • 粉丝0
  • 关注0
  • 积分61分
  • 威望185点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-05 13:13
想好了再问,这问题怎么答?
 :D :D
我不仅要金子,我还要点石成金的手指!
chengjian_hui
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2003-09-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-05 16:18
刚刚接触,肯定是有点不熟悉,怪问题在所难免,应该详加指点,
不该说风凉话,咳咳!
jasmine_wu001
驱动小牛
驱动小牛
  • 注册日期2002-04-26
  • 最后登录2010-09-20
  • 粉丝0
  • 关注0
  • 积分169分
  • 威望107点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-05 21:33
不好意思,我也是刚接触驱动开发,所以难免会提出一些怪问题,请高手们谅解。其实我买了一块开发板,我在它的应用程序里发现应用程序和驱动程序进行通讯时使用的是DeviceIOControl命令,我发现应用程序最后向驱动程序传的似乎是一个32位的16进制数(我不知道对不对,如果不对请各位大侠指正),我想问的是这是驱动程序会怎样响应。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-06 12:22
你发现的都是正确的,但是你的问题确实除了写这个driver的人,别人根本没有办法回答!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
jasmine_wu001
驱动小牛
驱动小牛
  • 注册日期2002-04-26
  • 最后登录2010-09-20
  • 粉丝0
  • 关注0
  • 积分169分
  • 威望107点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-06 15:25
Thanks!
jasmine_wu001
驱动小牛
驱动小牛
  • 注册日期2002-04-26
  • 最后登录2010-09-20
  • 粉丝0
  • 关注0
  • 积分169分
  • 威望107点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-06 15:38
rayyang2000 ,只给了你5分,希望不要嫌少,实在是囊中羞涩呀!
getian_wang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-14
  • 最后登录2004-08-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-06 15:41
在驱动程序的driverentry函数中定义一个处理
IRP_MJ_EDVICE_CONTROL的回调例程,例如:
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] =
IoControl;
你在应用程序中定义的IOCTL是存储在IRP栈的Parameters.DeviceIoControl的IoControlCode中。
关于这些,看看WDM的书吧!


记得给分哟!


cquwyb
驱动牛犊
驱动牛犊
  • 注册日期2002-05-10
  • 最后登录2010-10-23
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-06 17:48
 
发表于: 2002/11/6 - 15:41
在驱动程序的driverentry函数中定义一个处理
IRP_MJ_EDVICE_CONTROL的回调例程,例如:
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] =
IoControl;
你在应用程序中定义的IOCTL是存储在IRP栈的Parameters.DeviceIoControl的IoControlCode中。
关于这些,看看WDM的书吧!


记得给分哟!

 
 

对的。编写驱动的人这样处理你发来的请求,在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:
?
?
?
}

}
HonestTreee
laicq
驱动中牛
驱动中牛
  • 注册日期2002-10-04
  • 最后登录2004-05-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-07 10:08
这样就可以根据定义的IOCTL执行相应的处理了 :)
[img]http://www.warchina.com/image/zj1.gif[/img] Good good study,day day up!
shashaxz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2004-08-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-07 18:40
驱动程序中,对这个I/O ControlCode进行定义,然后实现相关功能。
游客

返回顶部