sun1979
驱动牛犊
驱动牛犊
  • 注册日期2002-11-19
  • 最后登录2005-05-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1584回复:3

用deviceiocontrol 传递结构时的问题

楼主#
更多 发布于:2003-03-24 17:37
我在应用程序中用deviceiocontrol传递一个结构指针
给驱动,只是这个结构里还包含一个结构变量。

可是在驱动里只能正确获得直接传递的结构里的变量的
值。对于结构包含的那个结构里的值却是错的。

怎么才能正确获取被包含的那个结构的地址?

最新喜欢:

zackaryzackar...
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-28 11:43
1、用户态和内核态通信时会进行上下文切换,I/O管理器会翻译用户模式的虚拟地址到内核模式的虚拟地址,所以你可以正确引用你的结构,但却不能获得结构里的结构。

“使用NEITHER模式时,I/O管理器不翻译用户模式的虚拟地址。你得到输入缓冲区的用户模式虚拟地址(在堆栈单元的Type3InputBuffer参数中),和输出缓冲区的用户模式虚拟地址(在IRP的UserBuffer域)。除非你知道你与用户模式调用者运行在同一个进程上下文中,否则这些地址是无用的。如果你恰好知道你正运行在这样的进程上下文中,你可以直接使用这些指针”
               --Walt Oney,《IO控制操作》

oney的书里在“内存管理”里详细介绍了地址转换

2、建议你把整个结构传到驱动中,而不是这个结构的指针
早起早睡 精神百倍
sun1979
驱动牛犊
驱动牛犊
  • 注册日期2002-11-19
  • 最后登录2005-05-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-28 14:36
谢谢 你的回复!
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-29 10:44
好说好说 :D
早起早睡 精神百倍
游客

返回顶部