Timothy said:
"Paul" replied:
Sorry to be obtuse - the Microsoft write-up isn't clear on how to set
that. What is listed is the boot.ini equivalent to runcatememory, but it
doesn't say how to set the value in the BCD:
"Mapping Boot.ini Options to BCDEdit Options and Elements
"The following table provides a mapping from the boot options used in
operating
systems prior to Windows Vista (in Boot.ini), to the BCDEdit options and
the BCD
elements used in Windows Vista and later versions of Windows. For
information
about the BCD boot elements see BCD Reference on MSDN."
And then the referenced MSDN page,
http://msdn.microsoft.com/en-us/library/aa362675.aspx,
is about the BCD WMI Provider Classes.
Is there a description somewhere on how to tell Win7 to truncate memory
to 2GB?
*TimDaniels*
Some examples of the "beginning" of the necessary command.
I used some of the terms from this, as a search term on the
microsoft.com site.
http://www.terabyteunlimited.com/kb/article.php?id=411
"bcdedit /store c:\boot\bcd /set {default} device partition=c:
bcdedit /store c:\boot\bcd /set {default} osdevice partition=c:
bcdedit /store c:\boot\bcd /set {bootmgr} device partition=c:
bcdedit /store c:\boot\bcd /set {memdiag} device partition=c:
"
In the example here:
http://technet.microsoft.com/en-us/library/cc731245(v=WS.10).aspx
bcdedit /enum all /store c:\boot\bcd
That dumps the existing info, including the necessary "identifier"
and "field" values. (That command would work for a Windows 7 installation
on a single partition, where the BCD happens to be on C: and not
on SYSTEM RESERVED.) So my guess at a command would be:
bcdedit /store c:\boot\bcd /set {current} truncatememory 1073741824
This page has the necessary details on the parameter to pass.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff542202(v=vs.85).aspx
truncatememory address
Limits the amount of physical memory available to Windows. When you use
this option, Windows ignores all memory at or above the specified
physical address. Specify the address in bytes.
For example, the following command sets the physical address limit
at 1 GB. You can specify the address in decimal (1073741824) or
hexadecimal (0x40000000).
bcdedit /set {49916baf-0e08-11db-9af4-000bdbd316a0} truncatememory 0x40000000
I think the /store option is for doing BCD entries on things like
other disks. Things like the GUID option, would be the next level
of addressing. So something like this might be enough to get the
job done on a single-boot system.
"[{ID}]
The {ID} is the GUID that is associated with the boot entry. If you do
not specify an {ID}, the command modifies the current operating system
boot entry. If a boot entry is specified, the GUID associated with the
boot entry must be enclosed in braces { }. To view the GUID identifiers
for all of the active boot entries, use the bcdedit /enum command. The
identifier for the current boot entry is {current}. For more information
about this option, use the following command: bcdedit /? ID
Note If you are using Windows PowerShell, you must use quotes around
the boot entry identifier, for example:
"{49916baf-0e08-11db-9af4-000bdbd316a0}" or "{current}"
"
I think I'll give {current} a try. I have a VM I can test in.
bcdedit /set {current} truncatememory 0x40000000
I've successfully managed to use the bcdedit command to change
Windows 7 from two partitions to a one partition setup, and I
got it right on the first try (no restore from backup
required)
The command looks pretty ugly, without a
good reference web page to work from.
This is before using the command, and doing the enum...
This is only a portion of it, enough to establish content.
Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=\Device\HarddiskVolume1
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {current}
resumeobject {716ee71a-1368-11e2-964c-e102db56de33}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 30
Windows Boot Loader
-------------------
identifier {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows 7
locale en-US
inherit {bootloadersettings}
recoverysequence {716ee71c-1368-11e2-964c-e102db56de33}
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {716ee71a-1368-11e2-964c-e102db56de33}
nx OptIn
And this is after the truncatememory is added...
Windows Boot Manager
--------------------
identifier {bootmgr}
device partition=\Device\HarddiskVolume1
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {current}
resumeobject {716ee71a-1368-11e2-964c-e102db56de33}
displayorder {current}
toolsdisplayorder {memdiag}
timeout 30
Windows Boot Loader
-------------------
identifier {current}
device partition=C:
path \Windows\system32\winload.exe
description Windows 7
locale en-US
inherit {bootloadersettings}
recoverysequence {716ee71c-1368-11e2-964c-e102db56de33}
truncatememory 0x40000000 <---
recoveryenabled Yes
osdevice partition=C:
systemroot \Windows
resumeobject {716ee71a-1368-11e2-964c-e102db56de33}
nx OptIn
I presume using /delete would remove it again.
If you need a (temporary) VM to work in, you can get one here.
Some of these are *huge* downloads, but they're handy tools
for testing. I use the Windows Virtual PC version and then
run them in VPC2007, just because Microsoft doesn't want me to.
Windows 8 won't run in just anything, so the environments
there are going to be a bit more limited (VirtualBox maybe).
http://www.modern.ie/en-us/virtualization-tools#downloads
I just rebooted the VM, and the new memory value seems
to be in effect.
Paul