High-performance hardware from time to time needs direct access to memory in order work properly. That is the case with the excellent Matrox Imaging line of framegrabbers. In particular, I am using the Meteor/2 family of framegrabbers (a framegrabber is used for capturing images from a camera, usually for industrial, medical, or surveillance purposes). The driver and library that comes with these framegrabbers, Matrox Imaging Library, ensures during installation that the framegrabber has direct access to memory by adding a switch to the Windows XP’s (or NT or previous versions of windows) boot.ini file: /MAXMEM=xxxx where xxxx is the upper limit of memory (in MB) that windows will use. For example
multi(0)disk(0)rdisk(0)partition(1)\windows=”Microsoft Windows” /MAXMEM=2040
This lines reserves 8 MB (of my computers 2048 MB memory) for direct use by the framegrabber.
However, with Windows Vista this possibility changed. It does not use the boot.ini file any more. Instead, one has to use the Boot Configuration Data Editor or bcdedit. This utility can be run from the command promt (but remember to run the command prompt “As administrator” – by rightclicking and selecting “Run as administrator”).
BCDedit is explained here, at Microsoft Technet. /Maxmem is replaced by the option TRUNCATEMEMORY, and in order to get the same effect as the example above try from the command-line prompt:
bcdedit /set TRUNCATEMEMORY 2139095040
As can be seen, the limit 2040MB now needs to be specified in bytes.
After a reset, going into Control Panel – System, you can see that it has worked. In order to remove the limit, try
bcdedit /deletevalue TRUNCATEMEMORY
There should probably be a warning here: “Don’t try this at home”. Or at least don’t try it if you don’t know what you are doing. Of course, by the level this is documented by Microsoft, no one knows even half of what they are doing, so …
To the end of the story, I have not managed (yet) to get Matrox Imaging Library 7.5 to run properly on Windows Vista. On the other hand, as this blog explains, I managed to reserve memory for direct use by the hardware.