| 
					阅读:1249回复: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,怎么使用啊?还有内存映射的问题,还是不晓得咋使用。				 | |
 
							
 
				 
				
