yiqiang
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2002-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1405回复:9

关于内存物理地址

楼主#
更多 发布于:2002-07-14 00:36
请教各位大虾,如何在C++中得到指针的物理地址?
(比如定义char *p, 用p来寻址好象是虚拟地址,而不是物理地址。),非常感谢!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-14 10:04
驱动中?MmGetPhysicalAddress
应用中先进Ring0
yiqiang
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2002-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-14 10:30
我是使用WINDRIVER生成C代码,然后将其加入我的工程中,我要在我的C++程序得到一定空间的物理地址,怎样实现?谢谢!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-14 13:16
我要在我的C++程序得到一定空间的物理地址
--------------------------------------------------------------------------

是分配还是只转换线性地址到物理地址?
上面是后者。

WinDriver是否提供相关简化服务未去查,不过你至少可以写个Kernel PlugIn去做这事。
yiqiang
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2002-07-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-14 16:33
我想在C++程序中定义char *p, 用p来寻址,得到p的物理地址,然后将该物理地址传送给PCI芯片,应该怎样做?多谢各位大虾的帮助!!!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-14 19:21
我想在C++程序中定义char *p, 用p来寻址,得到p的物理地址,然后将该物理地址传送给PCI芯片,应该怎样做?多谢各位大虾的帮助!!!

你先写个Kernel PlugIn,其中KP_Call() callback函数中用MmGetPhysicalAddress。
使用时将\"p\"的地址作为参数用WD_KernelPlugInCall()访问Kernel PlugIn。
再具体看WinDriver帮助。
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-14 23:30
在c++中用char *p方式定义的内存应该是属于分页内存,很容易被系统page out,因此它的物理地址应该是不确定的,若是非要获得当前的物理地址,应该用什么函数锁定一下,不是很清楚,请行家指正。
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-14 23:35
在c++中用char *p方式定义的内存应该是属于分页内存,很容易被系统page out,因此它的物理地址应该是不确定的,若是非要获得当前的物理地址,应该用什么函数锁定一下,不是很清楚,请行家指正。

一般在驱动中锁
但很多人验证应用中VirtualLock也行
gung
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2008-04-21
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-15 07:17
[quote]在c++中用char *p方式定义的内存应该是属于分页内存,很容易被系统page out,因此它的物理地址应该是不确定的,若是非要获得当前的物理地址,应该用什么函数锁定一下,不是很清楚,请行家指正。

一般在驱动中锁
但很多人验证应用中VirtualLock也行 [/quote]
能大概说说驱动中通常如何锁内存吗?
谢谢!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-15 08:14
一般在驱动中锁
但很多人验证应用中VirtualLock也行


一般在驱动中用MmProbeAndLockPages等函数进行页面锁定。
应用中用VirtualLock锁定的页面其实并不是真的锁定了,它仍旧参与页面调度,在一定条件下(比如工作集中所有线程都挂起且页面紧缺)它会被换出,所以使用时注意颇多没有驱动稳妥。
游客

返回顶部