阅读:1368回复:5
sys与exe文件之间如何内存共享?
sys与exe文件之间如何共享内存?
谁能说一说思路,最好能给出实例代码? |
|
沙发#
发布于:2003-02-27 17:01
使用方法很多
1、在驱动分配物理内存(可分页或不分页),然后通过映射物理地址空间到用户的虚拟地址空间。 2、使用Section对象等 |
|
|
板凳#
发布于:2003-02-27 17:17
能否给一段示例代码
|
|
地板#
发布于:2003-02-27 17:45
方法1使用以下函数
IoAllocateMdl分配空间 然后 VirtualAddress = (PVOID) (((ULONG) MmMapLockedPages(Mdl, Mode)) + MmGetMdlByteOffset(Mdl)); 得到虚拟地址 然后在通过DeviceIoControl来将虚拟地址传给ring3 方法2,需要使用native函数 |
|
|
地下室#
发布于:2003-02-27 19:51
可以利用DriverWorks中的KMemorytoProcessMap(大概是这个名)类,将一段内存映射到某一进程的虚拟地址中。
|
|
5楼#
发布于:2003-02-27 19:54
Here is an example that creates a mapping of address 0xF8000000 for 0x10000 bytes(from DS online help):
ULONGLONG p = 0xF8000000; KMemoryToProcessMap* DeviceRegion = new (NonPagedPool) KMemoryToProcessMap( PCIBus, // bus type 0, // bus number, may vary p, // peripheral memory address 0x10000, // number of bytes (HANDLE)-1, // current process FALSE, // don\'t do kernel mapping NULL, // any address ViewShare // view inherit by child process ); |
|