关于完全识别4G内存

对于windows xp 32bit版本
给内核文件ntkrnlpa.exe打补丁,就算完全识别4G内存系统也会无法正常工作。
因为对于32bit版本winxp,不但ntkrnlpa.exe有问题,他的hal.dll文件有问题。
是阉割版本…它永远假设设备是32Bit DMA。

还有。完全识别4G内存的关键不在于是32位操作系统还是64位操作系统。
因为32位操作系统开启PAE可以寻址64GB物理内存。xp不支持只能说微软tmd太孙子了阉割了hal.dll

完全识别4G内存的关键在于你的芯片组是否支持memory remap技术,假设你使用915芯片组
这个芯片组不支持memory remap技术。然后你插了4g内存,又安装了64位的winxp
那么你的可用内存仍然不足4G!大概在3G~3.25G之间!!

大多数人认为只要安装了64位操作系统就能完全识别4G内存,这是一个错误的认识。
关键其实不在64位操作系统,而在于memory remap这项技术。

91564xp

阅读全文 » 等级: - 日期: 2010-06-24 暂无评论 »

32位的xp为什么不支持4G内存

最近在研究给xp内核打补丁,让其完全支持4G内存。但还没有试验成功,补丁发不出来先发个文出来吧……

 

随着计算机的不断发展。个人PC的内存不断更新换代,4G内存也将马上成为标配,然而对于一个32位操作系统而言,究竟能否完全使用这4G内存呢?

如果你有4G内存,然后又安装了32位的winxp系统,那么你会发现在系统属性里看到你的内存总数却不足4G,有的电脑能用到3.25G,有的电脑只能用到3G。这是为什么呢?

对于一个32位系统而言,他的物理寻址上限是4G,那么是说cpu最多可以对4G的物理内存操作吗?不!在这4G地址范围中,有很大一部分是保留给PCI设备的,为什么呢?因为cpu如果使用传统I/O端口与这些pci设备通讯,传输速率受到很大的限制。但是如果将这些设备映射出来,使用内存地址空间来工作,性能就大大地提高了。

因此这4G地址空间,有很大一部分被PCI设备占用了。4G内存中有一部分是不能被使用的,这部分被占用的地址空间叫MMIO空间。

由于MMIO占用的空间过于巨大——可以接近1GB左右,浪费了大量有限的内存。因此,芯片组厂商们如Intel就开始考虑采用一些技术来回收利用这部分丢失的MMIO内存空间(实际上,MMIO的存在可以说是PCI标准所规定的,而PCI标准,就是Intel制定并力推的,因此解决这个问题,Intel责无旁贷)。Intel在服务器/工作站芯片组上率先布署了Memory Remapping(内存重映射)技术,用以解决这个问题。这项技术不依赖于操作系统,可以将把MMIO占用的那些物理内存映射到系统地址空间更高的位置上去,比如超过4G的位置。

等等,刚才说,超过4G的位置?32位cpu不是只能寻址4G地址空间吗?映射到4G之外,cpu仍然不能对他们进行寻址啊?

其实。自从奔腾Pro开始IA32 CPU就有36条地址总线了,而不是32条,这项技术,叫做物理地址扩展(PAE)。PAE使32位cpu拥有36条地址总线最多可以寻址打到64G的地址范围。

这样一来,通过PAE+MemRemap技术,就可以使4G内存得以完全使用了。

但是内存重映射技术出现的较晚,对于Intel平台,965及以后的芯片组都支持这项技术。对于915或945这些不支持内存重映射技术的芯片组而言,即使打开了PAE功能,也不能完全识别4G内存。

但是有人想说了,那为什么我的P965主板插了4G内存,在xp里面仍然显示3.25G内存呢?是xp不支持吗?

不是这样的,XP内核完全支持PAE技术,理论上是可以支持4G以上内存的,可是微软为了赚钱,在内核里设置了一项许可检查——假如当前的许可不是Server版本,那么将阉割掉4G以上地址空间上的全部物理内存。因此,即使你开了PAE技术,即使你的主板支持内存重映射,使用32位的xp操作系统,仍然不能使用全部的4G内存。因为内核刻意地设置了最高地址上限为4G。

windows所有版本的内存限制可以参考MSDN Memory Limits for Windows Releases(注意微软这里指的内存限制,其实就是最高物理内存寻址上限)

细心读者可能发现,windows2000 advance server 支持8GB版本,windows2000 datacenter 支持32G内存。连win2000都支持,xp是没道理不支持的。这就能得出一个结论——XP阉割掉了多余的内存……

阅读全文 » 等级: - 日期: 2010-06-19 暂无评论 »

2010暑假假期开发计划

依照开发顺序排列如下。

VxArpDefender - 【免费】单向ARP防火墙 独特技术 防御力超强。

VxQos - 【收费】 Windows QoS客户端,用于网吧网络优化。需配合支持QoS的路由器。

VxNetLimiter - 【免费】进程带宽调控软件,对每个进程带宽分配,对P2P控制能力超强,技术、性能超越NetLimiter。

VxGate免费版 - 【免费】软网关,支持反共享封锁。突破中低过滤等级的网络尖兵、南京信风。

VxGate专业版 - 【收费】软网关,功能绝对专业,可应用于网吧,中小企业。

阅读全文 » 等级: - 日期: 2010-06-01 1 条评论 »

多人共享上网网关 VxGate 测试版。征求内测…

这是一个带有限速功能的Ip网关 名为VxGate。本人业余开发。

主要解决小宽带多人共享上网,由于一方看电影或开迅雷下载导致另一方游戏网络卡的问题。

未来企业版计划开发很多功能诸如

WAN直接接入支持、ARP防火墙、报文过滤、端口过滤、IP过滤、报文优先级(游戏网络优化)、HTTP访问日志、DHCP、DMZ、XXX、XXXXX

刚起步。只做了NAT、带宽限制2个功能。而且带宽限制功能目前对主机无效 -_-!。

未来开发版本会有选项对主机限制带宽。而且配套兄弟软件VxXXX(名字未想好)可以限制硬件路由方法上网的带宽

现对于VxGate进行小范围征求测试。

由于时间问题,此阶段只做修正bug,不开发新功能了

有意向加QQ群 20922282

VxGate官方:
  http://www.vxgate.net (没有内容 - -!)

VxGate支持:
  QQ群 20922282 (验证内容标注  “VxGate测试” 不然不通过验证)
  Email  masm@live.cn

阅读全文 » 等级: - 日期: 2010-05-06 暂无评论 »

ping monitor 监测ping的小工具

点此下载(3.6KB)

PingMonitor是一个专门监测网络线路ping值的小工具

你完全可以在命令行中使用 ping ip -t 代替它

但这个小工具使用起来将更加便捷直观。

这个工具可以同时监控2个ip

在Options.ini里.你可以设置电信、网通、铁通或局域网等任何IP地址

还可以个性化设定界面的颜色。

 

如果你的线路是ADSL,而且是你是个在线游戏爱好者。

我相信这个工具将会对你很有用。

阅读全文 » 等级: - 日期: 2009-10-24 6 条评论 »

单步跟踪引擎.太慢

原本想做个注入dll式的单步跟踪软件,记录某个线程的执行记录
现在看来这想法太离谱了,现在引擎做出来了,发现跟踪30000行指令需要10秒,加上记录也是10秒左右
想想我准备调试的那些可怕的程序,运行起来的话。。这。。。太扯了 :<

还是改做调试器吧 :>

 

00401343: push 00402169h
00401348: push 00402162h
0040134D: call 004012C5h
004012C5: push ebp
004012C6: mov ebp , esp
004012C8: add esp , F4h
004012CB: lea eax , dword ptr [ebp-04h]
004012CE: push eax
004012CF: push 04h
004012D1: push 00h
004012D3: push dword ptr [ebp+08h]
004012D6: push 80000002h
004012DB: call RegOpenKeyExA (advapi32.dll)
004013B4: jmp RegOpenKeyExA (advapi32.dll)
……..: Out of watch limit, wait for ret …………
004012E0: or eax , eax
004012E2: jne 00401322h
004012E4: push dword ptr [ebp+0Ch]
004012E7: push dword ptr [ebp-04h]
004012EA: call RegDeleteKeyA (advapi32.dll)
004013A8: jmp RegDeleteKeyA (advapi32.dll)
……..: Out of watch limit, wait for ret …………
004012EF: lea eax , dword ptr [ebp-0Ch]
004012F2: push eax
004012F3: lea eax , dword ptr [ebp-08h]
004012F6: push eax
004012F7: push 00h
004012F9: push 00h
004012FB: push 01h
004012FD: push 00h
004012FF: push 00h
00401301: push dword ptr [ebp+0Ch]
00401304: push dword ptr [ebp-04h]
00401307: call RegCreateKeyExA (advapi32.dll)
004013A2: jmp RegCreateKeyExA (advapi32.dll)
……..: Out of watch limit, wait for ret …………
0040130C: push dword ptr [ebp-04h]
0040130F: call RegCloseKey (advapi32.dll)
0040139C: jmp RegCloseKey (advapi32.dll)
……..: Out of watch limit, wait for ret …………
00401314: cmp dword ptr [ebp-0Ch] , 02h
00401318: je 004012E4h
0040131A: push dword ptr [ebp-08h]
0040131D: call RegCloseKey (advapi32.dll)
0040139C: jmp RegCloseKey (advapi32.dll)
……..: Out of watch limit, wait for ret …………
00401322: leave
00401323: retn 0008h
00401352: push 40h
00401354: push 00402184h
00401359: push 00402171h
0040135E: push 00h
00401360: call MessageBoxA (user32.dll)
00401378: jmp MessageBoxA (user32.dll)
……..: Out of watch limit, wait for ret …………
00401365: push 00h
00401367: call ExitProcess (kernel32.dll)
0040137E: jmp ExitProcess (kernel32.dll)
……..: Out of watch limit, wait for ret …………

阅读全文 » 等级: - 日期: 2009-10-21 2 条评论 »

Dr.Com客户端的替代 - Free Dr.COM win32/linux

点此下载…

 

Dr.COM是北京城市热点开发的一款基于局域网的宽带接入服务器,广泛应用于高校校园网、小区宽带。

邮电学院南校区使用的就是Dr.COM服务器做宽带接入,使用了专用的客户端进行直通方式认证。

该客户端的功能很强大,但我们学校使用的客户端比较简单。主要做了如下2条限制。

 

绑定ARP缓冲中所有IP为非法MAC,阻塞局域网内TCPIP通讯,防止做共享网络。同时也无法玩局域网游戏(TCP/IP)

检测常见的共享网络的软件,并加以提示,停止激活Dr.COM网关。拒绝服务。

 

我们只需模拟Dr.COM客户端激活Dr.COM网关的方法。即可抛弃官方客户端及如上限制。

 

使用方法

拨号宽带连接,运行本软件。提示已经激活即可上网。

最小化后隐藏窗口,再次运行本软件可以调出窗口。

本软件没有设置自动运行,可以在程序->启动中创建快捷方式。

 

常见问题

1.如果提示无法绑定 UDP 61440 端口,请检查是否已经卸载原来的客户端。(官方客户端为ishare_user.exe进程)

2.如果提示接收数据2超时,请检查程序的连接是否被 Windows阻止。必要时可以关闭 Windows 的防火墙。

   XP环境下服务名为 Windows Firewall/Internet Connection Sharing (ICS)
   Vista/Win7环境下服务名为 Windows Firewall

  禁用这个服务即可。

阅读全文 » 等级: - 日期: 2009-10-19 6 条评论 »

NBP开发手记

以前对PXE只有一点点了解,最近在研究PXE无盘启动XP,所以学习了PXE的spec文档,对PXE有了初步的认识,同时又在调试时遇到了很多的很挫的问题。现在把它们记录下来。

所谓NBP是来自PXE文档的说法,全称 Network Bootstrap Program,也就是我以前理解的 PXE Boot File。他的作用就是 Hook Int 13h 虚拟一个硬盘,对硬盘的读写,通过 PXE API(通常使用UDP)定向到网络,返回数据给调用者,达到通过网络启动的目的。

 

一、NBP工作流程

1.Int 1Ah 获取PXE接口,这没什么说的。分2.0和2.1或以上版本2种区别,一般只需要兼容2.1就行。
2.PXENV_GET_CACHED_INFO 的3号功能,获取自己的IP和服务器IP。
3.PXENV_UDP_OPEN 初始化 UDP 网络接口。
4.Hook Int13h,I/O PXENV_UDP_READ/PXENV_UDP_WRITE
5.读 MBR 到 0000:7C00。
6.跳转 0000:7C00。

这些流程除了第四步Hook Int13h都不难,只是UDP部分需要注意处理丢包的问题。C/S用会话ID,很好解决。
另外那个UDP接口,收到大于4K的包,容易卡死在UDP_RECV里很久才返回一个错误。所以一次收发包最好小于4KB……
二、Hook Int13h

对于无盘启动XP,需要处理如下的功能号。并尽量按照标准来处理。。

FUN00: IO复位
FUN02: 读扇区
FUN03: 写扇区
FUN08: 读磁盘参数
FUN15: 读磁盘类型
FUN41: 检验扩展功能是否存在
FUN42: 扩展读
FUN43: 扩展写
FUN48: 扩展读磁盘参数

貌似对于无盘启动XP,处理写操作好像并不是必要的。一般情况XP在内核启动前不需要写操作。内核启动后加载磁盘驱动,然后才会有写操作,那时候已经不需要Int13h了。不过NTLDR是设计了写操作接口的,说不准,没准啥时候来个FUN03/43,所以最好还是处理了吧。

而且我在做NBP之前还在想,如果进入保护模式后,还使用Int13h怎么办?因为PXE文档中对保护模式中使用PXE API的说明很模糊。SDK中也没有例子,做起来会很烦,可是真正做的时候发现,在进入保护模式后,根本不需要Int13h了,系统会使用磁盘驱动来完成IO。

而且我发现XP在启动的时候并没有使用扩展Int13h功能,不过调试发现Win7的 Boot Sector/Mgr 会使用Int13x。

 
三、万恶的 CHS 寻址

(以下段落引用互联网。。。有更正)
—– Quote Start—–
到目前为止,人们常说的硬盘参数还是古老的 CHS (Cylinder/Head/Sector)参数。那么为什么要使用这些参数,它们的意义是什么?它们的取值范围是什么?
很久以前(long long ago …),硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有相同的扇区数。由此产生了所谓的3D参数 (Disk Geometry)。即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应的寻址方式。

其中:
磁头数(Heads) 表示硬盘总共有几个磁头,也就是有几面盘片,最大为 255 (用 8 个二进制位存储);
柱面数(Cylinders) 表示硬盘每一面盘片上有几条磁道,最大为 1023(用 10 个二进制位存储);
扇区数(Sectors) 表示每一条磁道上有几个扇区, 最大为 63 (用 6个二进制位存储)。
每个扇区一般是 512个字节,理论上讲这不是必须的,但好象没有取别的值的。

所以磁盘最大容量为:
256 * 1024 * 63 * 512 / 1048576 = 8064 MB ( 1M = 1048576 Bytes ) 或硬盘厂商常用的单位:
256 * 1024 * 63 * 512 / 1000000 = 8263 MB ( 1M = 1000000 Bytes )

在 CHS 寻址方式中,磁头,柱面,扇区的取值范围分别为 0到 Heads - 1, 0到 Cylinders - 1,1到 Sectors (注意是从1开始)。
—– Quote End—–

上述段落阐述了什么是 CHS 寻址,按照上文的理解Heads是磁头数单位应该是最大的,但是其实不是酱紫的~
按照寻址高低位排序,Cylinder > Head > Sector。

而且 H 不是表示硬盘总共有几个磁头,是最大磁头号。C 不是有几个柱面,是最大柱面号。要注意!

 

要把 CHS 转换成绝对地址,可以使用下面的公式
BlockAddr = ( Cylinder * NumberOfHeads + Head ) * SectorsPerTrack + Sector - 1;

NumberOfHeads 是磁盘的磁头数,假如最大磁头号码为255,那么NumberOfHeads = 256
SectorsPerTrack 是磁盘每磁道的扇区数 值为 63。

而且注意最后有一个-1。因为Sector取值范围是1-63而不是0-63。
Int13h 8号功能会返回 MAX HEAD,也就是最大磁头号。不要和上面公式的 NumberOfHeads 混淆。

 
四、万恶的 BootSector 程序

照理来说 XP 的 BootSector 应该使用Int13h的8号功能首先获取磁盘最大磁头号。
而他却使用了 BPB(BIOS Parameter Block) 结构中定义 HeadsPerCylinder。。。
注意这个 HeadsPerCylinder 不是最大磁头号而是磁头数,同上面公式中的 NumberOfHeads。
一般情况这里的值是FF,那么最大磁头号应该是 254!!

;======================================================
; BPB( BIOS Parameter Block )
;======================================================
BytesPerSector  DW ? ; 每个扇区的字节数 (512 1024 2048 4096)
SectorsPerCluster DB ? ; 每个簇的扇区数 ( 1 2 4 8 16 32 64 128 )
    ; 两者相乘不能超过32K(簇最大大小)
ReservedSectors  DW ? ; 从卷的第一个扇区开始的保留扇区数目
    ; 该值不能为0,对于FAT12/FAT16,该值通常为1
    ; 对于FAT32,典型值为32
NumberOfFATs  DB ? ; 卷上FAT数据结构的数目,该值通常应为2
RootEntries  DW ? ; 对于FAT12/FAT16,该值表示32字节目录项的数目
    ; 对于FAT32,该值必须为0
NumberOfSectors16 DW ? ; 该卷上的扇区总数,该字段可以为0,如果该字段
    ; 为0,则NumberOfSectors32不能为0;对于FAT32
    ; 该字段必须为0
MediaDescriptor  DB ? ; 介质类型
SectorsPerFAT16  DW ? ; 该字段标识一个FAT结构占有的扇区数(FAT12/FAT16)
    ; 对于FAT32卷,该字段必须为0
SectorsPerTrack  DW ? ; 用于INT 0×13中断的每个磁道的扇区数
HeadsPerCylinder DW ? ; 用于INT 0×13中断的每个柱面的磁头数
HiddenSectors  DD ? ; 包含该FAT卷的分区之前的隐藏扇区数
NumberOfSectors32 DD ? ; 该字段包含该卷上的所有扇区数目,对于FAT32,该字段
    ; 不为0;FAT12/FAT16可根据实际大小是否超过65536个扇
    ; 区数决定是否采用该字段

 

To Be Continued..

阅读全文 » 等级: - 日期: 2009-08-18 7 条评论 »

暑假搞scsi虚拟盘

通过分析学习miniram和minifile的代码,实现了不需要定时器(TimerCall)的scsi驱动程序,效率很高,但当块大小为2K甚至更低的时候。效率依然赶不上DaemonTools。DT的scsi驱动很小,主要的处理都在他的总线驱动里,没有使用ZwReadFile或者ZwWriteFile而直接向文件系统?发送irp读数据。抛开缓存机制不说,也就是说我用纯内存当虚拟盘,1K块大小读取速度只有11MB/s,而DT可以达到50MB/s以上,真是变态啊,都是发irp,差距咋就那么大呢。可恶的ms scsiport啊。。

结合tdi又做出了网络虚拟盘。但无法应用于无盘网络系统,tdi在系统启动时无法使用,只能使用ndis,这样我还需要自己实现一个tcp协议……

阅读全文 » 等级: - 日期: 2009-07-25 3 条评论 »

也谈向Richedit插入动态Gif的实现

最近在做IM软件,需要实现向Richedit插入表情,表情是动态的GIF图像。

由于以前没有做过关于richedit的开发,百度了下,需要使用OLE技术。也就是说,插入的图片都是一个OLE对象。而RICHEDIT则是一个OLE容器,相关链接如下。

How to insert a bitmap into an RTF document using the RichEdit control in Visual C++ 6.0
http://support.microsoft.com/default.aspx?scid=kb;en-us;220844

Animated Emoticons like those in MSN Messenger(英文版)
http://www.codeproject.com/KB/edit/AnimatedEmoticon.aspx

Animated Emoticons like those in MSN Messenger(中文版)
http://blog.csdn.net/dTianx/archive/2004/11/17/184949.aspx

DynamicGif作者blog
http://blog.csdn.net/kql01

阅读全文…

阅读全文 » 等级: - 日期: 2009-05-26 12 条评论 »