阅读:1405回复:9
关于内存物理地址
请教各位大虾,如何在C++中得到指针的物理地址?
(比如定义char *p, 用p来寻址好象是虚拟地址,而不是物理地址。),非常感谢! |
|
沙发#
发布于:2002-07-14 10:04
驱动中?MmGetPhysicalAddress
应用中先进Ring0 |
|
板凳#
发布于:2002-07-14 10:30
我是使用WINDRIVER生成C代码,然后将其加入我的工程中,我要在我的C++程序得到一定空间的物理地址,怎样实现?谢谢!
|
|
地板#
发布于:2002-07-14 13:16
我要在我的C++程序得到一定空间的物理地址
-------------------------------------------------------------------------- 是分配还是只转换线性地址到物理地址? 上面是后者。 WinDriver是否提供相关简化服务未去查,不过你至少可以写个Kernel PlugIn去做这事。 |
|
地下室#
发布于:2002-07-14 16:33
我想在C++程序中定义char *p, 用p来寻址,得到p的物理地址,然后将该物理地址传送给PCI芯片,应该怎样做?多谢各位大虾的帮助!!!
|
|
5楼#
发布于:2002-07-14 19:21
我想在C++程序中定义char *p, 用p来寻址,得到p的物理地址,然后将该物理地址传送给PCI芯片,应该怎样做?多谢各位大虾的帮助!!! 你先写个Kernel PlugIn,其中KP_Call() callback函数中用MmGetPhysicalAddress。 使用时将\"p\"的地址作为参数用WD_KernelPlugInCall()访问Kernel PlugIn。 再具体看WinDriver帮助。 |
|
6楼#
发布于:2002-07-14 23:30
在c++中用char *p方式定义的内存应该是属于分页内存,很容易被系统page out,因此它的物理地址应该是不确定的,若是非要获得当前的物理地址,应该用什么函数锁定一下,不是很清楚,请行家指正。
|
|
7楼#
发布于:2002-07-14 23:35
在c++中用char *p方式定义的内存应该是属于分页内存,很容易被系统page out,因此它的物理地址应该是不确定的,若是非要获得当前的物理地址,应该用什么函数锁定一下,不是很清楚,请行家指正。 一般在驱动中锁 但很多人验证应用中VirtualLock也行 |
|
8楼#
发布于:2002-07-15 07:17
[quote]在c++中用char *p方式定义的内存应该是属于分页内存,很容易被系统page out,因此它的物理地址应该是不确定的,若是非要获得当前的物理地址,应该用什么函数锁定一下,不是很清楚,请行家指正。 一般在驱动中锁 但很多人验证应用中VirtualLock也行 [/quote] 能大概说说驱动中通常如何锁内存吗? 谢谢! |
|
9楼#
发布于:2002-07-15 08:14
一般在驱动中锁 一般在驱动中用MmProbeAndLockPages等函数进行页面锁定。 应用中用VirtualLock锁定的页面其实并不是真的锁定了,它仍旧参与页面调度,在一定条件下(比如工作集中所有线程都挂起且页面紧缺)它会被换出,所以使用时注意颇多没有驱动稳妥。 |
|