superlee19
驱动牛犊
驱动牛犊
  • 注册日期2005-04-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1163回复:3

内存问题请教

楼主#
更多 发布于:2005-05-18 16:34
我想读一个声卡的配置空间,在应用程序中显示出来,我用ReadFile,在驱动的READ中用了PciConfig.ReadHeader(m_Buf,0,sizeof(PCI_CONFIG_HEADER_0));但是应用程序的BUF和驱动中的m_Buf不一样,在应用程序中如何得到数据?内存的怎么映射的?谢谢
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-05-18 20:16
我想读一个声卡的配置空间,在应用程序中显示出来,我用ReadFile,在驱动的READ中用了PciConfig.ReadHeader(m_Buf,0,sizeof(PCI_CONFIG_HEADER_0));但是应用程序的BUF和驱动中的m_Buf不一样,在应用程序中如何得到数据?内存的怎么映射的?谢谢

那要看你CreateDevice创建的设备对象Flag设置的是DO_BUFFER_IO,
还是DO_DIRECT_IO.
DO_BUFFER_IO,最简单你把数据拷贝到Irp->AssociatedIrp.SystemBuffer,io manager就会把SystemBuffer的内容复制到应用程序的Buf。
如果是DO_DIRECT_IO,就调用m_Buf=MmGetSystemAddressForMdlSafe(Irp->MdlAddress..),m_Buf就是应用程序的Buf,省去了一次复制,
会提高效率
aiwadgj
驱动老牛
驱动老牛
  • 注册日期2004-11-13
  • 最后登录2020-12-24
  • 粉丝0
  • 关注0
  • 积分119分
  • 威望84点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-05-18 21:10
[quote]我想读一个声卡的配置空间,在应用程序中显示出来,我用ReadFile,在驱动的READ中用了PciConfig.ReadHeader(m_Buf,0,sizeof(PCI_CONFIG_HEADER_0));但是应用程序的BUF和驱动中的m_Buf不一样,在应用程序中如何得到数据?内存的怎么映射的?谢谢

那要看你CreateDevice创建的设备对象Flag设置的是DO_BUFFER_IO,
还是DO_DIRECT_IO.
DO_BUFFER_IO,最简单你把数据拷贝到Irp->AssociatedIrp.SystemBuffer,io manager就会把SystemBuffer的内容复制到应用程序的Buf。
如果是DO_DIRECT_IO,就调用m_Buf=MmGetSystemAddressForMdlSafe(Irp->MdlAddress..),m_Buf就是应用程序的Buf,省去了一次复制,
会提高效率 [/quote]

这个应该是内核空间的虚拟地址吧?。。。这些值好像只能在驱动中用吧。。。应用程序中可以直接操作吗?。。
酒也在沉溺,何时麻醉我抑郁。过去了的一切会平息。。。。。。。
superlee19
驱动牛犊
驱动牛犊
  • 注册日期2005-04-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-19 12:09
我是用DriverStudio做的,里面有一个KIrp::IoctlBuffer(),但是返回值是PVOID,怎么使用啊?还有内存映射的问题,还是不晓得咋使用。
游客

返回顶部