読者です 読者をやめる 読者になる 読者になる

2GBを超えて4GBを未満のメモリを搭載したPCでのメモリ量の取得

NSISで作成したインストーラで、PCの物理メモリ量を取得する際に、こちらを参考にWindows APIのGlobalMemoryStatusメソッドを使っていたのですが、2GBを超えて4GBを未満のメモリを搭載したPCでは、取得できる物理メモリ量が必ず2GBになってしまうようです。

Intel x86 プロセッサを採用し、2GB を超え、4GB 未満のメモリを実装したコンピュータでは、GlobalMemoryStatus 関数は MEMORYSTATUS 構造体の dwTotalPhys メンバに常に 2GB という値を返します。同様に、実際の利用可能なメモリが 2〜4GB の場合、MEMORYSTATUS 構造体の dwAvailPhys メンバは切り捨てられて 2GB になります。リンカオプション /LARGEADDRESSWARE を指定して実行可能ファイルのリンクを行った場合、GlobalMemoryStatus 関数はこれら両方のメンバに正しい物理メモリ量を返します。

その場合には、GlobalMemoryStatusExを使う必要があります。
WINAMP.COM | Forums - NSIS Get System Memory