Cloudy_hanji
驱动牛犊
驱动牛犊
  • 注册日期2005-01-06
  • 最后登录2005-08-08
  • 粉丝1
  • 关注0
  • 积分56分
  • 威望10点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1527回复:4

怎么在SYS里收取一个EXE传递过来的buffer

楼主#
更多 发布于:2005-05-30 15:08
在exe里
DeviceIoControl(m_hDevice, IO_GET_SHAREMEMORY_ADDR,
NULL,
NULL,
szOutputBuffer,
sizeof(szOutputBuffer),
&dwReturn,
NULL )

在sys里
case IO_GET_SHAREMEMORY_ADDR:
// 将分配的内存映射到用户进程地址空间,并返回地址。
try
{
UserVirtualAddress = MmMapLockedPages(Mdl, UserMode);
*((PVOID *)(Irp->AssociatedIrp.SystemBuffer)) = UserVirtualAddress;
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = sizeof(PVOID);
}
except(EXCEPTION_EXECUTE_HANDLER){}
break;
我想在sys里收到exe里用DeviceIoControl里传来的那个szOutputBuffer应该怎么做啊?

最新喜欢:

xhzxlqtxhzxlq...
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-05-30 20:09
你想做什么?在这个代码里,
Irp->AssociatedIrp.SystemBuffer,就相当于szOutputBuffer
其实是系统会把SystemBuffer复制到szOutputBuffer,
从代码看,用的METHORD_BUFFERED
Cloudy_hanji
驱动牛犊
驱动牛犊
  • 注册日期2005-01-06
  • 最后登录2005-08-08
  • 粉丝1
  • 关注0
  • 积分56分
  • 威望10点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-30 23:21
谢谢,如果真的是这样就没问题了。THANK YOU
Cloudy_hanji
驱动牛犊
驱动牛犊
  • 注册日期2005-01-06
  • 最后登录2005-08-08
  • 粉丝1
  • 关注0
  • 积分56分
  • 威望10点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-01 15:09
我看过了,用DeviceIoControl的参数传过来的szOutputBuffer在passthru.c里的Irp->AssociatedIrp.SystemBuffer并没有这个szOutputBuffer的值。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-06-01 15:52
对于METHORD_BUFFER,os的处理,是分配一块max(InputLen,OutputLen)的内存,指针放到Irp->AssociatedIrp.SystemBuffer中,将InputBuffer拷贝到SystemBuffer中,驱动返回的时候,将SystemBuffer拷贝到
OutputBuffer中。所以SystemBuffer就相当于你的app的OutputBuffer
游客

返回顶部