阅读:1269回复:6
关于内存地址指针由system模式传到用户模式
我在做板卡驱动,板卡上有一块内存,pci卡
我在驱动层映射了其首地址,我在DeviceIoControl中做了接口 从环3传递地址偏移,就可对这块内存进行读写,目前已经验证是正确的 现在我想把这块内存的首地址指针传到环3的应用程序 但是不能对它读写 试问我应该怎样操作呢? |
|
沙发#
发布于:2004-04-13 14:42
不能对它读写??你传过去干吗??
可以把该地址放入DRX(0~3)寄存器,然后设置DR7的断点位和读写断点置位,在任何对该地址的访问都会触发,调试中断进入INT1处理例程,当然你必须HOOK 了INT1 的例程进行相应的处理. |
|
|
板凳#
发布于:2004-04-13 15:12
还是不行
它是双口ram 16k大小 |
|
地板#
发布于:2004-04-15 09:36
如果用DS,这个类KMemoryToProcessMap可以将物理地址映射到用户层中所认可的虚拟地址;有DDK中的ZwMapViewofSection这个函数包装而来
|
|
地下室#
发布于:2004-04-16 11:00
KMemoryToProcessMap
能给个小例子吗? |
|
5楼#
发布于:2004-04-16 21:46
ULONGLONG p = 0xE90100000; 址,一定是在80000000-ffffffff之间
KMemoryToProcessMap* mapRegion = new (NonPagedPool) KMemoryToProcessMap( PCIBus, // 总线类型ISA,pci之类的 0, // 总线号 p, // 0x10000, // 被影射范围 (HANDLE)-1, // 代表进程句-1代表当前进程 FALSE, // 是否映射为内核形式 NULL, // 地址 ViewShare // 决定了是否子进程能够访问这个内存区 ); if ( !mapRegion ) { // insufficient memory } if ( !NT_SUCCESS( mapRegion ->ConstructorStatus() ) ) { // constructor failed } ProcessVirtualAddress = mapRegion ->ProcessAddress(); 就用它来访问 当不再需要的时候要delete mapRegion |
|
6楼#
发布于:2004-04-20 14:48
KMemoryToProcessMap应该包含在哪里啊
|
|