beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1147回复:6

这样做对吗?关于传递数据

楼主#
更多 发布于:2002-07-24 13:34
由于某些原因我不能用writefile()传递数据到驱动层,因此想通过IOCTL×××来实现。
应用层是:
DeviceIoControl(m_transfer.hDevice, CTL_SECOND_WRITE_BUFFER,
&cBuffer, BufferGetLength(), //input
NULL, 0,                 //output
&length,NULL))

驱动层:
case IOCTL_SECOND_WRITE_BUFFER:
hEvent = (HANDLE) IrpStack->
Parameters.DeviceIoControl.Type3InputBuffer;
status = ObReferenceObjectByHandle(hEvent, GENERIC_ALL,
NULL, KernelMode,
(PVOID*)(pdx->Buffer), NULL);

这样做为什么不行。
应用层提示错误号 : 6 无效句柄。
只要能解决问题,就一定给分。 希望高手赐教!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-24 13:38
驱动层获得输入缓冲区的数据怎么这样

你从哪参考的
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-24 13:40
参考事件的句柄传递。
只要能解决问题,就一定给分。 希望高手赐教!
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-24 13:43
你这不是脱了裤子,唉,不说了:
驱动中:(IOCTL BUffer方式有关);
ioBuffer           = Irp->AssociatedIrp.SystemBuffer;//与
    inputBufferLength  = irpStack->Parameters.DeviceIoControl.InputBufferLength;
    outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-24 13:48
胡涂了,当然还是基础不好。
给分!
稍等片刻。
只要能解决问题,就一定给分。 希望高手赐教!
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-24 13:50
两种获取输入缓冲区的方法:

PULONG phandle = (PULONG) Irp->AssociatedIrp.SystemBuffer;

PULONG phandle = (PULONG) MmGetSystemAddressForMdl(Irp->MdlAddress);

取决于你的ioctrl码的定义
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-07-24 14:13
Buffer方式用第一个,Direct方式用第二个。
游客

返回顶部