With every new iteration of Windows comes—what else?—new growing pains.
When I upgraded from Windows 95 to Windows 2000, hardly any of my existing hardware drivers made the cut; I had to do without a few key pieces of hardware (like my sound card) until the drivers were issued.
Now some people upgrading from Windows XP to Windows Vista are discovering that a machine that ran XP fine will throw up a Blue Screen of Death in Vista. The code for the BSOD is usually the type that comes up when faulty or cut-rate RAM is installed in the computer.
If it never happened in XP, why would this happen in Vista? Is Vista doing something differently with memory than XP (aside from needing more of it to install)? The short answer is yes, and the reason for this is somewhat surprising: Vista uses memory more completely than XP.
Vista uses a memory allocation technique called address space layout randomization as a pre-emptive defense against common exploits such as buffer overruns. Each time the system is booted, the OS loads its code into different segments of memory. This makes it more difficult for an attacker to predict where a given piece of code will be loaded (and thus subvert it). Many of the BSD OSes and some commercial varieties of Linux—Red Hat, for one—have had this feature or a variety of it for a long time.
This technique is no cure-all (nor is it intended to be one), but it does make it all the more difficult for an attacker to do this sort of thing casually, and it also helps provide a bit more defense for products that Microsoft is not directly responsible for.
But it means that a machine that ran XP without a problem but has a faulty RAM module somewhere may very well choke under Vista. This should be a sign that it's time to replace the offending RAM, since it may very well have contributed to silent memory-corruption issues in XP (i.e., the odd random crash or application fault) without you ever knowing about it.
If you're running Vista and you encounter something you feel to be a memory problem, there's a way to test for this in Vista itself. From the Start menu, type mem in the Search box to bring up the Memory Diagnostics Tool. When run, it will reboot your computer and run a series of aggressive tests on your system memory, then report the results back to you. If there's a problem with a particular memory module, it's better to know about it and deal with it immediately than to let it linger silently.
Another memory-testing tool that comes in handy is MemTest86+, a utility which burns to a CD and boots as a standalone program. If you suspect a system has faulty RAM, you can set this up to run overnight and see if it turns anything up. It will run in an infinite loop by default, so you don't need to do anything except boot it and let it go.
By the way, regarding ASLR, I should point out that it is only enabled for binaries that are specifically compiled to take advantage of it; Vista's own system components are of course compiled to do so.
And on a personal note, I'd like to add that it's issues like these that have compelled me to spend the extra money on memory (and systems) that support ECC—error checking and correction—as an extra level of defense against generic memory problems.
About the author: Serdar Yegulalp is editor of the Windows Power Users Newsletter, which is devoted to hints, tips, tricks, news and goodies for Windows NT, Windows 2000 and Windows XP users and administrators. He has more than 10 years of Windows experience under his belt, and contributes regularly to SearchWinComputing.com and SearchSQLServer.com.
More information on this topic: