Saturday, December 3, 2011

Windows ME EMS Memory Support

Windows ME, by default, doesn't support EMS memory for the legacy DOS applications, in the VDM:



If you create a shortcut for a DOS program (in this case I used the MS-DOS prompt, command.com), and view the memory properties, you can see the EMS memory is unavailable.
Also, if you type MEM inside the command prompt to view the available memory, and supported types, there is no EMS (expanded) memory listed, and legacy applications are unable to use it.
It's useless to try with EMM386.EXE, in Windows ME it's unsupported and won't run at all (even if you try to load it manually, with device.com utility, it won't load).

Microsoft says there is an option in system.ini to try to enable EMS memory, by adding this line to the [386Enh] section:
ReservePageFrame=yes

And if there is free memory to enable EMS, it will be enabled.
However, for me this option alone didn't worked, EMS memory was still unavailable.

Relevant Microsoft article:

Then I was still searching on the internet, and found a way to enable it! You can see the results here:



I've used the same virtual machine as I've used in a previous test, for maximal memory support.
Now after the correct settings in the system.ini file, I got EMS memory support.
It works the same as in Windows 9x, the EMS memory is selectable in the properties window, and in the command prompt, with MEM command, it's also listing the available amount.

What was the option required to enable it?
It's called EMMPageFrame=C800
It tells Windows to reserve the EMS page frame at a fixed memory address.
With both options set in the system.ini, it worked for me.

However, not all computer's memory is free and contiguous at this base address (EMS needs at least 32K for page frame), then if Windows cannot start, or EMS memory is still unavailable, try to use a different memory address to reserve for EMS page frame.

More info can be found here (also alternative methods):
http://www.columbia.edu/~em36/wpdos/emswinme.html
http://apolyton.net/showthread.php/38013-MOO-and-Windows-ME-(Expanded-Memory)

The options I've used, written in the relevant section of the SYSTEM.INI file:

[386Enh]
;Try to reserve page frame for EMS memory support
ReservePageFrame=yes
;Enable EMS memory support, provided the C800-D7FF upper memory area is CONTIGUOUS AND FREE when Windows loads.
EMMPageFrame=C800




Wednesday, November 30, 2011

Windows ME Maximum Memory

If you ever wondered how much memory is the maximum that the older Windows 9x/ME line of Windows systems supports actually, take a look at this picture:


Yes, the answer is almost 2 GB RAM!
And it's perfectly stable like this, I've run memory tests.


I've read many posts on the internet, that they not recommend to use more than 1 GB of RAM for the Win9x/ME versions, because it causes many problems, and even Windows won't start in some cases.


So I've fired up VMware (version 7.1.5 in this case) and begin testing on the freshly installed Windows ME English version (without any updates).
I've not noticed any problems with 1 GB of RAM, but if I increased RAM to 2 GB on the virtual machine, it wouldn't boot up.
Either locked with VMM bluescreen or powered off the virtual machine :)


That was because there is a bug with Win9x/ME's memory manager, and the file cache.
Every time Windows starts, it checks how much memory is in the computer, and adjusts the file cache to some percent of it. That works fine with memory up to 512 MB.
Just with this much memory, the VMM driver can't handle it and just freeze the system completely (it was designed to work with maximum 2 GB memory). With memory just below 2 GB, the system can start, but then the other bug comes with VCache (the file cache) which eats up all memory available from Windows, then not enough memory to load itself.


So we have to fix 2 problems at the same time, to get a boot with memory over 1,99 GB.
First of all, tell Windows that don't use more memory than 1992 MB.
That is done in the system.ini file (C:\Windows\system.ini) with this option, add this line under the [386Enh] section:



MaxPhysPage=7C6FF


It's in HEX format, and I've used an online DEC-to-HEX converter to get this value (however it must always end with FF, because if not, Windows may give funny values to the RAM limit, once I managed to boot with 6 MB RAM - it took a while and the network driver failed too :)).
[Please note that maybe Windows will only boot with even less RAM defined here, every system is different. If it won't work at first, try to use less value, by calculating a different HEX value]


Then, to make the VCache to work correctly, use these settings, also in the file system.ini, at the [VCache] section:



MinFileCache=5120
MaxFileCache=524288

This will limit the memory to use for the file cache to a maximum of 512 MB, and minimum value of 5 MB.
You can use any value you like, just make sure to stay below about 1700-1800 MB, as Windows still needs memory to load.
Also, I've read that with certain system configurations, with a big AGP aperture size, even less cache size is required to get a boot.
So be careful about giving it too big value.
I think 5 MB for starting size is good, it won't use memory when it's not needed. And 512 MB maximum is more than enough for anything you would ever use on such a Windows version :)
Maybe 128 MB is also enough.

Remember, both options are needed, or otherwise it won't boot. Believe me I tried many times.

In case you use wrong values and Windows doesn't boot, don't panic, just use a Win98 boot floppy or a WinPE/Linux live boot CD which can access the C: drive of Windows, and just modify the system.ini file from there, to give lesser values.
Or just take out the extra memory from the computer to have less than 2 GB, and modify after Windows boots up.
On a virtual machine this is much more easy, just mount the virtual hard drive as writable, and modify system.ini from the host system.

Here is this section of my customized system.ini file for reference:

[386Enh]
;Limit RAM to 1.99 GB: MaxPhysPage=7C6FF
MaxPhysPage=7C6FF

[VCache]
;Minimum 5MB file cache
MinFileCache=5120
;Maximum 512MB file cache
MaxFileCache=524288


Have fun and enjoy! :)

More info can be found here, what Microsoft says about the problem:
http://support.microsoft.com/kb/253912

Also, good to read this board for more info:
http://www.msfn.org/board/topic/109574-help-i-need-to-get-2gb-installed-ram-working-in-win98se/


Now you may ask, why would anybody want to use the old Windows 9x/ME system nowadays, and do this crazy thing to feed it with more than 2 GB memory.
The answer is just, because I can, then why not?
Nowadays we have insane amount of memory in our computers, according to the time of these systems, then it's good to test out how they behave in such extreme circumstances.
And I like Windows ME, with a disabled System Restore [it's buggy, disable it!] it works like a charm (and much faster than Win98 with enough RAM).

Next time I will check how much memory can Windows 3.x handle :)




Tuesday, November 29, 2011

Windows 2000 Compatibility Tab

Have you ever wondered, if Windows 2000 also have a compatibility tab for executables, just like Windows XP/2003 (and all future versions) has?


The answer is that it has this handful feature, just it's hidden by default.
To enable it, you will need to have at least Service Pack 2 applied.
But, unfortunately it only has 3 compatibility modes to choose from:

  • Windows 95
  • Windows 98
  • Windows NT with SP5
    ...but it's still more than nothing.



To enable it, just follow the steps provided by Microsoft:

  1. Log on as Administrator.
  2. Click Start, and then click Run.
  3. In the Open box, type the following command, and then click OK, where %SystemRoot% is the drive and folder in which Windows is installed:
    regsvr32 %systemroot%\apppatch\slayerui.dll

No restart required. After the DLL file registered successfully, you can use it almost the same way as in Windows XP and later (right click on the file, select Compatibility tab, and select a compatibility layer).
The only difference is that it's only working with shortcuts!
Unfortunately you can't select compatibility mode for the EXE file directly, you have to make a shortcut of it first, then set the compatibility option on the shortcut.







Extra info: you can set compatibility option for system files as well :)
In Windows XP and upwards, they are protected and can't be set in compatibility mode, but in Windows 2000 this can be done, so be careful what file you select to run in compatibility layer!
(however, setting wrong compatibility option on a shortcut to a system file won't hurt anybody)


More info can be found here: http://support.microsoft.com/kb/279792

Tuesday, November 22, 2011

Windows Update tweaking

Windows Update tweaking


One of the most annoying features of Windows is: Windows Update


I will give tips on how to modify the registry, so this feature will be more under our control.
Be careful about modifying the registry, as it can make Windows unbootable!
However, modifiying only this part of the registry is not that harmful.


My personal settings under Windows 7 are:
1. Don't restart the computer automatically if a user is logged on
2. Set the reboot reminder option to show up again only after 2 hours, if we choose postpone


These settings should work on Windows XP as well as Windows Server versions.


Find this registry key (start regedit.exe):
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU


If this specific key is not exist, you can create it. Then make these new specific DWORD values:


NoAutoRebootWithLoggedOnUsers
-> with value 1, this will make Windows don't restart automatically if a user is logged on


RebootRelaunchTimeout
-> with decimal value of 120, this will set the reboot reminder option to show up again only after 2 hours, if we choose postpone




That's all, after system restart the new settings are applied.


If everything is done properly, it should look like this in Regedit:






For more information and other settings (like WSUS and scheduled updates), visit these sites:



http://www.windowsnetworking.com/articles_tutorials/Registry-Keys-Tweaking-Windows-Update-Part1.html
http://www.windowsnetworking.com/articles_tutorials/Registry-Keys-Tweaking-Windows-Update-Part2.html




Easier setup:
select and copy all of this text below (to begin the file with "Windows Registry Editor Version 5.00" line is important!and paste it to Notepad. 
Save as Unicode format, for example name it WindowsUpdateSettings.reg then just double-click on it to import to the registry:


Windows Registry Editor Version 5.00


[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]

;Don't restart automatically if a user is logged on
"NoAutoRebootWithLoggedOnUsers"=dword:00000001
;Set the reboot reminder option to show up again only after 2 hours, if we choose postpone
"RebootRelaunchTimeout"=dword:00000078
;If this set to 0, the reboot reminder window prompt won't appear
"RebootRelaunchTimeoutEnabled"=dword:00000001

Friday, November 11, 2011

Hello world!

Hello everyone, I'm starting my IT blog today.


I will publish mostly technical and IT stuff, with many good resources and ideas for IT professionals and also the average users.
Most publications will come from my personal experience.


Disclaimer:
All publications reflect my own experiences, and my own opinion.

The information contained in this website is for general information purposes only. The information is provided by me, and while I endeavour to keep the information up to date and correct, I make no representations or warranties of any kind, express or implied, about the completeness, accuracy, reliability, suitability or availability with respect to the blog or the information, products, services, or related graphics contained on the blog for any purpose. Any reliance you place on such information is therefore strictly at your own risk.
In no event will I be liable for any loss or damage including without limitation, indirect or consequential loss or damage, or any loss or damage whatsoever arising from loss of data or profits arising out of, or in connection with, the use of this blog.
Through this blog you are able to go through links to other websites which are not under my control. I have no control over the nature, content and availability of those sites. The inclusion of any links does not necessarily imply a recommendation or endorse the views expressed within them.
All trademarks and legal rights of the names used on the blog are all the properties of their respective owners, I'm not holding any rights of them.