阅读:1540回复:9
DRIVER STUDIO 中 虚拟如何转换为物理地址
我在 ds 中 用ioctl 向驱动程序中传一个缓冲区
在驱动中 I.IoctlBuffer()获取该缓冲区的地址 我必须把这个地址转换为物理地址发送给硬件 请问如何转换呢? 我用的是 driver studio 2.6 谢谢 |
|
最新喜欢:![]() |
沙发#
发布于:2002-10-08 19:02
好好看看
http://person.okey.net/~webcrazy/page.htm |
|
板凳#
发布于:2002-10-08 21:52
这书错误百出,没法看,还没有还一点
|
|
地板#
发布于:2002-10-08 23:34
用这个:
MmGetPhysicalAddress( IN PVOID BaseAddress ); 注意, 如果成功也要每PAGE进行一次调用. 因为相邻的地址并不一定在连续的物理地址上. |
|
|
地下室#
发布于:2002-10-09 08:32
板主大人
我用的是driver studio 编译时MmGetPhysicalAddress()报告找不到此函数,该函数是winntddk中的 我在其device.h中加入了该函数的声明,编译虽然通过了,可是连接又报告错误,找不到该库。 在 ds 有没有可行的方法呢? |
|
5楼#
发布于:2002-10-09 08:50
...
...可是连接又报告错误,找不到该库。 ``````````编译你的程序之前要编译D.S.库 |
|
6楼#
发布于:2002-10-09 08:56
DS库早就编译完了
这里是说找不到 MmGetPhysicalAddress()所对应的库,即unresolved external symble...... 谢谢 |
|
7楼#
发布于:2002-10-09 09:16
#include <ntddk.h>
看看ddk document怎么写的。 |
|
8楼#
发布于:2002-10-09 09:17
1.对MmGetPhysicalAddress()的声明前要加上extern \"C\"(C连接).
2.如果是nt式驱动,你能直接编译通过。 3.如果是wdm式驱动,你需要引入ntoskrnl.lib,这个function能在98/me下正常工作(很久以前,我曾经发表过关于这个function的贴子)。 |
|
9楼#
发布于:2002-10-09 11:10
我用的是 driverstudio 2.6
如果 #include \"ntddk.h\" 则会出来很多很多编译的错误,这是因为ds 自己对头文件进行了改写。 另外 在project选项表中引入了 ntoskrnl.lib 仍然不能解决 unresolved external symbol的问题。 我在 device.h 中声明函数 extern \"C\" PHYSICAL_ADDRESS MmGetPhysicalAddress(IN PVOID); 谢谢大家 如何给各位加分呢? |
|