wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1034回复:5

驱动程序自定义例程的问题!!!

楼主#
更多 发布于:2004-06-18 21:04

在驱动程序自定义例程中的输入参数验证语句:
if(I.IoctlOutputBufferSize() || I.IoctlInputBufferSize()
|| I.IoctlBuffer())
__leave;
中,验证输入和输出缓冲区的大小是否为零(我自己的看法),而在应用程序中:
bRet = DeviceIoControl(
hDev, //设备句柄
dwIoCtrlCode, //所要执行的操作命令码
NULL, //输入缓冲区
0, // 输入缓冲区的空间大小
NULL, // 接收缓冲区
0, //接收缓冲区的空间大小
&dwReturned, //实际所接收的数据个数
NULL //异步结构
);
DeviceIoControl()函数传递给应用程序的输入和输出缓冲区的大小就是零,这是怎么回事?会不会出错呀?还是我的理解有错?
我是用DS开发的驱动程序,仅仅控制测试灯的开关!! 期待各位的指导!!!先谢啦!!
  
多多交流,少走弯路!!!
neworcom
驱动牛犊
驱动牛犊
  • 注册日期2004-06-14
  • 最后登录2009-08-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-19 08:37
<Microsoft Windows驱动程序模型设计>里讲,驱动程序有三中方法访问用户缓冲区:Buffer,Direct和Neithor.
1.设备可以定义一种缓冲方式,在AddDevice():
  PDEVICE_OBJECT fdo;
  IoCreateDevice(..., &fdo);
  fdo->Flags |= DO_BUFFERED_IO;
           <or>
  fdo->Flags |= DO_DIRECT_IO;
           <or>
  fdo->Flags |= 0;
2. IOCTL也可以定义一种缓冲方式:
#define IOCTL_USB_RESET_DEVICE   CTL_CODE  (FILE_DEVICE_UNKNOWN,1000,METHOD_BUFFERED, \FILE_ANY_ACCESS)  

不同的缓冲方式,将来对应的数据缓冲地址在IRP的不同的域里面.
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-19 09:37
大侠,能不能说得再清楚一点,能解释一下我给的那两句话吗?先谢啦!
多多交流,少走弯路!!!
neworcom
驱动牛犊
驱动牛犊
  • 注册日期2004-06-14
  • 最后登录2009-08-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-21 12:52
你这里用DeviceIoControl发送IOCTL,先要明白你的IOCTL是如何定义的.
如果指定是METHOD_IN_DIRECT或METHOD_OUT_DIRECT操作方式,则I/O管理器为你的请求使用的输出缓冲区创建一个MDL。就是说驱动里面是从Irp->MdlAddress获得用户态数据缓冲区;
如果指定的是METHOD_BUFFERED方式,I/O管理器就会在Irp->AssociatedIrp.SystemBuffer获得或返回用户缓冲区.
至于你这里为什么输入输出缓冲区大小为零,我没用DS做过,可能帮不了什么!你从驱动端调试下看看吧!
wanggang508
驱动小牛
驱动小牛
  • 注册日期2003-08-24
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-22 08:34
非常感谢 neworcom 的指导!!!!
多多交流,少走弯路!!!
neworcom
驱动牛犊
驱动牛犊
  • 注册日期2004-06-14
  • 最后登录2009-08-26
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望6点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-22 08:57
wanggang508过奖!谈不上指导,大家共同努力! ;)
游客

返回顶部