|
|
|
|
|
|
|
Windows内核调试
帖子发起人: guozf 发起时间: 2009-08-05 18:35 下午 回复: 8
|
帖子排序:
|
|
|
|
2009-08-05, 18:35 下午
|
guozf
注册: 2008-12-06
HK
发 贴: 68
|
|
|
请问如何获得物理内存的大小呢? 在boot.ini里可以限制Windows可以使用的最大内存,但是如何得到真正的物理内存大小呢? 请指教实现方法!
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-08-05, 22:49 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
|
|
内核中的全局变量MmNumberOfPhysicalPages标志着物理内存的大小,以页为单位,x86架构中,即以4KB为单位。
内核函数NtQuerySystemInformation(SystemBasicInformation, ...)可以获取MmNumberOfPhysicalPages的值。
SDK中提供了一个API来调用这个内核服务,目前不推荐使用,但是仍可以使用。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-08-06, 09:14 上午
|
guozf
注册: 2008-12-06
HK
发 贴: 68
|
|
|
问题:
1. 这样的方法得到的是真正的物理内存大小,还是Windows使用的物理内存的大小?
2. NtQuerySystemInformation这个函数好像NTDLL和NTOSKRNL都有export,一个是从User Mode调用,一个从Kernel Mode调用。但是结果会不会有什么不同?
3. WDK或者DDK中为什么查不到NtQuerySystemInformation或者ZWQuerySystemInformation。但是我用dependency walker确实有看到这两个函数。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-08-06, 09:27 上午
|
guozf
注册: 2008-12-06
HK
发 贴: 68
|
|
|
另外的一个问题是:
NtQuerySystemInformation或者ZWQuerySystemInformation有什么区别么?
多谢Raymond的回答
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-08-06, 14:09 下午
|
guozf
注册: 2008-12-06
HK
发 贴: 68
|
|
|
我的电脑物理内存为1G。
测试如下:
1。 修改Boot.ini
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional 512M" /noexecute=optin /fastdetect /maxmem=512
2. 分别用选项1和选项2启动
3. 调用User mode的函数NtQuerySystemInformation来查看物理内存的大小
选项1:1G
选项2:512M
结论:NTDLL的函数NtQuerySystemInformation不能获得真正的物理内存大小。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-08-06, 14:15 下午
|
benlong
注册: 2008-10-01
发 贴: 11
|
|
|
Nt和Zw的区别可以看看这篇文章
http://advdbg.com/download/storeshow.aspx?id=cba1a009-706b-46b9-9cd6-aab77e2b608c
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-08-06, 23:07 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
|
|
用个时髦的词,晕。原来楼主想知道主板上到底插了多少内存,是写BIOS么?通常BIOS负责做这个事,要根据内存的类型(DDR,DDR2等),基于一种名为SPD(Serial Presense Detect)的协议去检测,然后再根据内存类型和具体协议来计算。下面的网页有一个比较老的SPEC:
http://www.datasheetcatalog.org/datasheet/SamsungElectronic/mXqququ.pdf
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-08-07, 22:51 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
|
|
BIOS会把检测到的部分结果登记到北桥的寄存器中,因此如果是操作系统阶段需要,那么读取寄存器是比较快捷的方式,不过不确认这些寄存器的位置是否公开了。
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2009-08-10, 09:42 上午
|
guozf
注册: 2008-12-06
HK
发 贴: 68
|
|
|
嗯,好像看到一个工具可以读到这个值,不知道是怎么做的.
多谢Raymond.
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 软件调试 » Windows内核调试 » Re: 物理内存
|
|
|
|
|
|