阅读:1173回复:3
内存问题请教
我想读一个声卡的配置空间,在应用程序中显示出来,我用ReadFile,在驱动的READ中用了PciConfig.ReadHeader(m_Buf,0,sizeof(PCI_CONFIG_HEADER_0));但是应用程序的BUF和驱动中的m_Buf不一样,在应用程序中如何得到数据?内存的怎么映射的?谢谢
|
|
沙发#
发布于: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,省去了一次复制, 会提高效率 |
|
板凳#
发布于: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] 这个应该是内核空间的虚拟地址吧?。。。这些值好像只能在驱动中用吧。。。应用程序中可以直接操作吗?。。 |
|
|
地板#
发布于:2005-05-19 12:09
我是用DriverStudio做的,里面有一个KIrp::IoctlBuffer(),但是返回值是PVOID,怎么使用啊?还有内存映射的问题,还是不晓得咋使用。
|
|