Jump to content

Virtual Superfloppy Configurations: Difference between revisions

From EDM2
No edit summary
 
Ak120 (talk | contribs)
mNo edit summary
 
(11 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Original work by [[Micho Durdevich]]
''Original work by [[Micho Durdevich]]''


<h2>1. Introduction</h2>
==Introduction==
The aim of this fifth article is to present the design of a new interesting class of diskless Win95/98/Me workstations, that remote boot from OS/2 Warp Server.


<p>The aim of this fifth article is present the design of a new interesting class of diskless
The basic idea is to boot Windows directly from a virtual superfloppy! The construction of such superfloppy images has been explained in the previous article. As we saw, the basic design of OS/2 Warp Server RIPL system for DOS requesters limits the size of a superfloppy image to approx 16 MB (because in this context the maximal number of cylinders is 256, and a floppy-like device should have maximum two heads-add to this the fact that the maximal # of sectors per track is 63).
Win95/98/Me workstations, that remote boot from OS/2 Warp Server.</p>


<p>The basic idea is to boot Windows directly from a virtual superfloppy! The construction
Hence, a very interesting and challenging problem appears: ''Build a micro-Windows version (the nucleus) that has full GUI and 32-bit networking and fits into 16 MB!''
of such superfloppy images has been explained in the previous article. As we saw, the basic
design of OS/2 Warp Server RIPL system for DOS requesters limits the size of a superfloppy
image to approx 16MB (because in this context the maximal number of cylinders is 256, and a  
floppy-like device should have maximum two heads-add to this the fact that the maximal # of
sectors per track is 63). </p>


<p>Hence, a very interesting and challenging problem appears: <i>Build a micro-Windows
As in our previous nucleus-type configurations, the (non-essential) extensions of the operating system, together with the corresponding applications, are all stored on the OS/2 server and become available to the RIPL client, after making the appropriate network drive connections in 32-bit mode. The main problem here is to separate the nucleus (the part that must stay on the superfloppy) from the rest of the operating system. However there are several simple methods of doing this...
version (the nucleus) that has full GUI and 32-bit networking and fits into 16MB! </i></p>


<p>As in our previous nucleus-type configurations, the (nonessential) extensions of the operating system,
The configurations that we are going to describe have the following basic properties:
together with the corresponding applications, are all stored on the OS/2 server and become available
*There is no any 16-bit networking running, except the basic connections initiated during the initial RIPL processing.
to the RIPL client, after making the appropriate network drive connections in 32-bit mode. The main
*The virtual boot drive [A:] remains 16-bit all the time.
problem here is to separate the nucleus (the part that must stay on the superfloppy) from the rest of
*Simplicity: No nucleus transfers, unzipping, 16-bit logins, VFAT adjustments...
the operating system. However there are several simple methods of doing this...</p>
*Better memory usage (no big RAM drives).
*Comparing with the previous nucleus-type configurations, they boot faster.
*Long filenames support (even on the virtual floppy).
*Full 32-bit networking support.
*Easier installation and RIPL client management.
In the next section we shall discuss basic techniques to split Windows into the nucleus (to be installed on the virtual superfloppy) and the extension (to be installed on the OS/2 server). In particular, we shall see which Registry entries control the form of the nucleus.


<p>The configurations that we are going to describe have the following basic properties:
We shall then consider some variations of the basic theme, presenting RIPL configurations that are automatically "client-oriented". This can be done using a ''powerful filtering mechanism'' built into OS/2 Warp Server RIPL subsystem. In the first appendix we present listings of CONFIG.SYS, AUTOEXEC.BAT, MSDOS.SYS and 16START.BAT files for such clients.


<ul>
Finally, a detailed file-by-file specification of a Win95 nucleus (suitable for IBM Network Station 2800) is given in the second appendix. Similar considerations apply to Win98 workstations. On the other hand, Windows Millennium Edition systems require some very special steps, that will be discussed in the next article.
<li> There is no any 16-bit networking running, except the basic connections initiated
during the initial RIPL processing.
<li> The virtual boot drive [A:] remains 16-bit all the time.
<li> Simplicity: No nucleus transfers, unzipping, 16-bit logins, VFAT adjustments...
<li> Better memory usage (no big ramdrives).  
<li> Comparing with the previous nucleus-type configurations, they boot faster.
<li> Long filenames support (even on the virtual floppy).  


<li> Full 32-bit networking support.  
==Constructing Windows Nucleus==
<li> Easier installation and RIPL client management.  
===Minimising Procedure===
</ul></p>
Perhaps the most direct method is the safest and the most instructive one: Construct the nucleus from scratch! We can start from a standard HD install, containing all the features we need (including networking). Make a backup copy of the entire WINDOWS folder. In order to remove unnecessary Windows parts, open a DOS Window and proceed with deleting (using DEL *) ''all files in WINDOWS directory and SYSTEM directory.'' This will actually delete all files, except those that are ''locked by the system.'' Such a procedure would give us a 0-approximation of the nucleus, we will have to put some files back. In particular some or all CPL-files (representing Control Panel object) should be copied back.


<p>In the next section we shall discuss basic techniques to split Windows into the nucleus
Reboot the system. Because of the missing files, the system will not boot, ha-ha-hahaha :) But hopefully, error messages will tell us which files are missing!
(to be installed on the virtual superfloppy) and the extension (to be installed on the
Put them back from the backup copy. In such a way we should be able to get the standard GUI showing up.
OS/2 server). In particular, we shall see which Registry entries control the form of
the nucleus.</p>


<p>We shall then consider some variations of the basic theme, presenting RIPL configurations
Get a beautiful FILEMON program from [https://technet.microsoft.com/de-de/sysinternals SysInternals]. This utility monitors in real time all the files the access to which is requested by various processes in the system. It is worth noting that there is a nice companion program REGMON, which monitors the Registry functions. With the help of FILEMON, figure out which files are needed for the basic system components (trying to open the objects, and inspecting the FILEMON log) to work.
that are automatically "client-oriented". This can be done using a <i>powerful filtering
mechanism</i> built into OS/2 Warp Server RIPL subsystem. In the first appendix
we present listings of CONFIG.SYS, AUTOEXEC.BAT, MSDOS.SYS and 16START.BAT files for  
such clients.</p>


<p>Finally, a detailed file-by-file specification of a Win95 nucleus (suitable for IBM
In some cases FILEMON will not show all files there are really needed. Binary-read the initial files and find out which DLLs/VXDs are needed.
Network Station 2800) is given in the second appendix. Similar considerations apply to
Win98 workstations. On the other hand, Windows Millennium Edition systems require
some very special steps, that will be discussed in the next article.</p>


<h2>2. Constructing Windows Nucleus</h2>
After having a lot of fun, you should end up with a clean smoothly working Windows. You can remove some files from the COMMAND subfolder, some or all *.INF files from INF subfolder, and also files from the HELP subfolder. Optionally, you can put back some background bitmaps, screen saver files and so on, but ''the entire Windows nucleus should not exceed 14 MB.'' This is because it is a good idea to leave some space on the 16MB-superfloppy (approx 2 MB) for the appropriate extra stuff, like some important diagnostic tools.


<h3>Minimalizing Procedure</h3>
===Registry Editing/Recompile===
At first, simplify the system Registry, by removing unnecessary stuff. Export the registry into a text-file, change all occurrences of the Windows boot drive (normally it's the C-drive) into references to the A-drive. Compile the new file (from DOS) creating a new Registry (don't overwrite the initial registry)! The syntax for the recompilation procedure has been explained in the third article.


<p>Perhaps the most direct method is the safest and the most instructive one: Construct
Furthermore, we have to remove some entries from the lists of 16-bit/32-bit known DLLs. If a DLL is "known" to Windows, the operating system ''looks only'' into the system subfolder when a corresponding access request is made. In contrary, if a DLL is "not known" Windows will look in all directories listed in the path statement of AUTOEXEC.BAT file. Hence, a ''simple removal'' from the corresponding known DLLs list, allows us to move a DLL to a different folder. Of course, in our case such non-essential Windows DLLs will be stored on the OS/2 Warp Server.
the nucleus from scratch! We can start from a standard HD install, containing all the
features we need (including networking). Make a backup copy of the entire WINDOWS folder. In order
to remove unnecessary Windows parts, open a DOS
Window and proceed with deleting (using DEL *) <i>all files in WINDOWS directory and SYSTEM
directory.</i> This will actually delete all files, except those that are <i>locked by the  
system.</i> Such a procedure would give us a 0-approximation of the nucleus, we will have
to put some files back. In particular some or all CPL-files (representing
Control Panel object) should be copied back.</p>


<p>Reboot the system. Because of the missing files, the system will not boot,
The corresponding Registry entries are:
ha-ha-hahaha :) But hopefully, error messages will tell us which files are missing!
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\KnownDLLs
Put them back from the backup copy. In such a way we should be able to get the standard GUI
for important 32-bit DLLs and similarly
showing up.</p>
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\Known16DLLs
for important 16-bit DLLs. For example, the entire Object Linking and Embedding stuff (the files OLE*.DLL) can be safely removed from the nucleus and stored on the OS/2 server.


<p>Get a beautiful FILEMON program from SysInternals. This utility
===Creating Superfloppy Images===
monitors in real time all the files the access to which is requested by various processes
The structure of the superfloppy image file has been explained in our previous article. Let us recall here that the most subtle part of this game consists in editing the BIOS Parameter Block of the image file, and adding the appropriate 4-byte string at the beginning of the image (necessary for RPLLOADR.COM to start booting the client properly).
in the system. It is worth noting that there is a nice companion program REGMON, which
monitors the Registry functions. With the help of FILEMON, figure out which files are
needed for the basic system components (trying to open the objects, and inspecting
the FILEMON log) to work.</p>


<p>In some cases FILEMON will not show all files thare are really needed. Binary-read the  
Here we shall focus on what to put into the image. The simplest way to put files on the image is to create a RAM-drive of the same size as the superfloppy (using for example SRDISK). This should be done ''within a standard Windows workstation.'' Later on, we should linearly map this drive to an image file (using HDCOPY for example) and finally we should edit the BPB and add the corresponding 4-byte string, to make the disk RIPL-deployable.
initial files and find out which DLLs/VXDs are needed.</p>


Copy the entire Windows folder of the previously created nucleus, except the files
SHELLICONCACHE, TTFCACHE, SYSTEM.DAT/0, USER.DAT/0, WIN.INI, SYSTEM.INI
to the RAM-drive representing the superfloppy. Note that in order to preserve long filenames, copying of the Windows nucleus should be performed within a Windows system.


<p>After having a lot of fun, you should end up with a clean smoothly working
Create a special folder (say C_INIT) in the RAM-drive, and put there WIN.COM, WIN.INI and SYSTEM.INI, as well as recompiled SYSTEM.DAT and USER.DAT (with all attributes stripped off). Edit SYSTEM.INI and make sure that something like  
Windows. You can remove some files from the COMMAND subfolder, some or all *.INF
  PagingFile=C:\WIN386.SWP
files from INF subfolder, and also files from the HELP subfolder. Optionally, you
is included in the [386Enh] section.
can put back some background bitmaps, screen saver files and so on, but <i>the entire
Windows nucleus should not exceed 14MB.</i> This is because it is a good idea to
leave some space on the 16MB-superfloppy (approx 2MB) for the appropriate extra
stuff, like some important diagnostic tools.</p>
   
<h3>Registry Editing/Recompile</h3>


<p>At first, simplify the system Registry, by removing unnecessary stuff. Export the  
Furthermore, include the appropriate RAM-drive software. Create the appropriate CONFIG.SYS and AUTOEXEC.BAT files. Make elementary adjustments to MSDOS.SYS. During DOS-mode booting, the RIPL client should create a small RAM-drive [C:], together with a WINDOWS folder where all the files from C_INIT should be copied.
registry into a text-file, change all occurencies of the Windows boot drive  
(normally its the C-drive) into references to the A-drive. Compile the new
file (from DOS) creating a new Registry (dont overwrite the initial registry)! The
syntax for the recompilation procedure has been explained in the third article.</p>


<p>Furthermore, we have to remove some entries from the lists of 16-bit/32-bit
===Windows Extensions on the OS/2 Server===
KnownDLLs. If a DLL is "known" to Windows, the operating system <i>looks only</i>
As we emphasized several times, non-essential extensions of Windows should be stored on the OS/2 server, in a normal form. There are several very simple ways to tell Windows where to look for these extra files.
into the system subfolder when a corresponding access request is made. In contrary, if a DLL is
"not known" Windows will look in all directories listed in the path statement of
AUTOEXEC.BAT file. Hence, a <i>simple removal</i> from the corresponding KnownDlls list,
allows us to move a DLL to a different folder. Of course, in our case such
non-essential Windows DLLs will be stored on the OS/2 Warp Server.</p>


As the first solution, we could configure the client to make an automatic redirection in 32-bit mode, so that after Windows boots, it sees a redirected drive [D:] with a subfolder say WIN95, containing the extensions. In AUTOEXEC.BAT we should append D:\WIN95 at the end of the path statement.


<p>The corresponding Registry entries are:</p>
There is a second method which is perhaps conceptually clearer: Copy the entire Windows tree (a full-blown version, without client-specific files including Registry) to the appropriate folder in the OS/2 server. Construct a full-blown client-specific registry (starting from a client with an HD, say) edit it to point to the new drive location, and configure the RIPL client to merge this Registry into the Nucleus Registry, as a part of the StartUp folder processing (see below about the clientization procedures).
<p><font color=#660000>
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\KnownDLLs
</font></p>
<p>for important 32-bit DLLs and similarly</p>
<p><font color=#660000>
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\Known16DLLs
</font></p><p>
for important 16-bit DLLs. For example, the entire Object Linking and Embedding stuff (the files OLE*.DLL)  
can be safely removed from the nucleus and stored on the OS/2 server.</p>


<h3>Creating Superfloppy Images</h3>
==Interesting Variations==
===Controlling Boot Drive Letter===
There is a simple way to control the main Windows drive letter of our RIPL requesters. Standardly, they would boot from [A:]. But if we execute
SUBST F: A:\
then we get a new drive [F:], which is a mirror of [A:]. We can adjust the system Registry, as well as MSDOS.SYS and AUTOEXEC.BAT so that the system will boot off [F:].


<p>The structure of the superfloppy image file has been explained in
The advantage of doing this is that we can use ''the same drive letter'' for Windows boot drive of a RIPL workstation, and for an auxiliary RAM-drive used to prepare the superfloppy image (on Windows development machine). This is particularly useful when creating the Desktop folder, and various shortcuts from the Start Menu, as we can do it directly from the Windows development machine, without having to binary-edit shortcut files.
our previous article. Let us recall here that the most
subtle part of this game consists in editing the BIOS Parameter Block of the image
file, and adding the appropriate 4-byte string at the beginning of the image  
(necessary for RPLLOADR.COM to start booting the client properly).</p>


Interestingly, various experiments in my computer lab have indicated that the performance of RIPL clients with substituted boot drive letters has been slightly improved! Probably, Windows uses different routines to access drives with a non-floppy drive letter (even if they operate in 16-bit mode).


<p>Here we shall focus on what to put into the image. The simplest way to put files
===Enabling Client-Specific Configurations===
on the image is to create a RAM-drive of the same size as the superfloppy (using
The superfloppy image we described so far contains one fixed burned-in registry, so it is not suitable for user customizations and different clients. This can be fixed by transferring a client-specific registry from the server, during the boot phase.
for example SRDISK). This should be done <i>within a standard Windows
workstation.</i> Later on, we should linearly map this drive to an image file
(using HDCOPY for example) and finally we should edit the BPB and add the corresponding 4-byte
string, to make the disk RIPL-deployable.</p>


<p>Copy the entire Windows folder of the previously created nucleus, except the files
We can take advantage of ''a filtering mechanism'' built into the OS/2 server RIPL service. The server interprets (for RIPL clients) certain strings on the superfloppy image file in a very special way.
<font color=#660000><center>SHELLICONCACHE, TTFCACHE, SYSTEM.DAT/0,
USER.DAT/0,</center><center>WIN.INI, SYSTEM.INI</center></font></p><p>
to the RAM-drive representing the superfloppy. Note that in order to
preserve long filenames, copying of the Windows nucleus should be performed within a  
Windows system.</p>


<p>Create a special folder (say C_INIT) in the RAM-drive, and put there
The critical strings are of the form ''01:18, 23 April 2006 (CEST)m'' where the hexadecimal digit ''m'' refers to the workstation record in the RPL.MAP file (which is the main configuration file for the OS/2 Warp Server RIPL subsystem). In addition, if the replacement string has more than 6 characters, we should add the appropriate amount of tilde characters in the string. The minimum number of tilde characters is 5, in order to invoke the filtering mechanism.
WIN.COM, WIN.INI and SYSTEM.INI, as well as recompiled SYSTEM.DAT and USER.DAT (with all
attributes stripped off). Edit SYSTEM.INI and make sure that something like
<center><font color=#660000>
PagingFile=C:\WIN386.SWP
</font></center>
<div>is included in the [386Enh] section.</div></p>


For example, a line of the following form is standardly present in AUTOEXEC.BAT of all DOS requesters:
LOADHIGH CONNECT
Now, suppose that the server name is AURORA, the domain name IMATH and the workstation name DOS98, then the above line will appear to the client simply as
LOADHIGH CONNECT Z AURORA DOS98 IMATH
Using this, it is easy to set up a RIPL client that connects to the OS/2 Warp server, and copies the registry from the principal client-specific directory
IBMLAN\RPLUSER\MACHINENAME.
The simplest 16-bit solution involves starting IBM 16-bit networking and making automatic redirections
[Y:]=\\SERVERNAME\WRKFILES=RPLUSER_Folder,
[Z:]=\\SERVERNAME\IBMLAN$=IBMLAN_Folder.
The registry is copied during DOS boot processing.


<p>Furthermore, include the appropriate RAM-drive software. Create the appropriate
It is also possible, although a bit trickier, to set up the superfloppy so the system connects to the OS/2 server in 32-bit mode (using M$ networking), automatically makes the appropriate redirections, and merges the client-specific portion of the registry, during StartUp folder processing (the last part of Windows boot process). However, this requires recompiling the burned-in registry with appropriate special strings introduced.
CONFIG.SYS and AUTOEXEC.BAT files. Make elementary adjustments to MSDOS.SYS. During
DOS-mode booting, the RIPL client should create a small RAM-drive [C:], together with
a WINDOWS folder where all the files from C_INIT should be copied.</p> 


<h3>Windows Extensions on the OS/2 Server</h3>
==Appendix A: Basic Configuration Files==
;msdos.sys file
<code>
[Paths]
WinBootDir=C:\WINDOWS
WinDir=F:\WINDOWS
HostWinBootDrv=F
[Options]
BootGUI=0
Network=1
Logo=1
Autoscan=0
;BootWarn=0
</code>
;config.sys file
We shall define here 2 start-up configurations: The internal one (loading a predefined registry burned into the superfloppy) and the standard one (requiring the IBM 16-bit networking stuff, a part of which is the driver DLSHELP.SYS).
<code>
[Menu]
menuitem=1, Local Maintenance Mode
menuitem=2, IBM 16-bit Networking+RIPL
menucolor=15,1
menudefault=2, 8
[1]
DEVICE=A:\WINDOWS\HIMEM.SYS
DOS=HIGH,UMB
DEVICEHIGH=A:\WINDOWS\IFSHLP.SYS
[2]
DEVICE=A:\WINDOWS\HIMEM.SYS
DOS=HIGH,UMB
DEVICEHIGH=A:\WINDOWS\IFSHLP.SYS
DEVICEHIGH=A:\16IBM\DLSHELP.SYS
LASTDRIVE=Z
</code>


<p>As we emphasized several times, non-essential extensions of Windows
;autoexec.bat file
should be stored on the OS/2 server, in a normal form. There are several very simple
The echo-messages are visible only if we turn off the animated Win95 Logo. For simplicity, we have not included conditional error-checking commands, assuming everything works perfectly. The system automatically loads Windows GUI (because of WIN at the end of the file). Alternatively, we can put BootGUI=1 in MSDOS.SYS, however such configurations show ''a slight instability''. This is probably because Windows pre-assumes some standard properties of its boot drive, in case it thinks that GUI should be loaded. Indeed, with BootGUI=1 and without
ways to tell Windows where to look for these extra files.</p>  
BootWarn=0, Windows will present a weird error message!
 
<code>
<p>As the first solution, we could configure the client to make an automatical redirection in 32-bit
@echo off
mode, so that after Windows boots, it sees a redirected drive [D:] with a subfolder
echo * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
say WIN95, containing the extensions. In AUTOEXEC.BAT we should append
echo *            Netvista 2800 Diskless Win95 Client            *
D:\WIN95 at the end od the path statement.</p>
echo *              Superfloppy Configuration V0.8A              *
 
echo *                                                          *
<p>There is a second method which is perhaps conceptually clearer: Copy the entire
echo *                    by Micho Durdevich                    *
Windows tree (a full-blown version, without client-specific files including Registry)
echo *                Institute of Mathematics                  *
to the appropriate folder in the OS/2 server. Construct a full-blown client-specific
echo *          National Autonomous University of Mexico        *
registry (starting from a client with a HD, say) edit it to point to the new
echo *  http://www.matem.unam.mx/~micho, micho@matem.unam.mx    *
drive location, and configure the RIPL client to merge this Registry into the Nucleus
echo *                                                          *
Registry, as a part of the StartUp folder processing (see below about the clientization
echo *  All this is based on OS/2 Warp Server RIPL Subsystem!!!  *
procedures).</p>  
echo * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
<h2>3. Interesting Variations</h2>
echo Constructing a RAM-drive [C:]...
 
xmsdsk 8192 c: /Y
<h3>Controlling Boot Drive Letter</h3>
mkdir c:\windows
 
mkdir c:\junk
<p>There is a simple way to control the main Windows drive letter of our RIPL
copy a:\windows\explorer.exe c:\windows >nul
requesters. Standardly, they would boot from [A:]. But if we execute
copy a:\windows\command.com  c:\windows >nul
<center><font color=#660000>SUBST F: A:\</font></center><div>
then we get a new drive [F:], which is a mirror of [A:]. We can adjust the system
goto %config%
Registry, as well as MSDOS.SYS and AUTOEXEC.BAT so that the system will boot off [F:].</div></p>
:1
echo Internal Configuration Files...
copy c_init\*.* c:\windows >nul
echo Final Adjustments...
set comspec=c:\windows\command.com
subst f: a:\
set path=c:\windows;f:\windows;f:\windows\command
set temp=c:\junk
set tmp=c:\junk
attrib +h +r +s c:\windows\*.dat
goto end
:2
cd 16ibm
call 16start.bat
cd\
echo Configuration Files and Final Adjustments...
copy Y:*.* c:\windows >nul
set comspec=c:\windows\command.com
subst f: a:\
set path=c:\windows;f:\windows;f:\windows\command;d:\win95
set temp=c:\junk
set tmp=c:\junk
set mathematica_preferences=d:
attrib +h +r +s c:\windows\*.dat
goto end
:end
echo OK!!! I think I am now ready to load Windows :)
win
</code>
;16start.bat file
<code>
@echo Starting IBM 16-bit Networking...
LOADHIGH NET START
@echo Connecting to the RIPL Server...
LOADHIGH connect
</code>  
This file starts the 16-bit networking in order to copy the client-specific files to the RAM-drive [C:].


<p>The advantage of doing this is that we can use <i>the same drive letter</i> for
==Appendix B: Windows Nucleus Listing==
Windows boot drive of a RIPL workstation, and for an auxiliary RAM-drive used to  
This listing corresponds to Win95 superfloppy nucleus running on IBM Network Station 2800 with a built-in IBM EtherJet adapter.
prepare the superfloppy image (on Windows development machine). This is particularly
useful when creating the Desktop folder, and various shortcuts from the Start Menu, as
we can do it directly from the Windows development machine, without having to
binary-edit shortcut files.</p>


<p>Interestingly, various experiments in my computer lab have indicated that
===Windows Folder===
the performance of RIPL clients with substituted boot drive letters has been slightly improved! Probably,
;Executables & Related
Windows uses different routines to access drives with a non-floppy drive
<pre>
letter (even if they operate in 16-bit mode).</p>
  COMMAND.COM    CONTROL.EXE    REGEDIT.EXE    PROTMAN.EXE    EXPLORER.EXE  
 
       WIN.COM                                    PROTMAN.DOS    TASKMAN.EXE
<h3>Enabling Client-Specific Configurations</h3>
 
<p>The superfloppy image we described so far contains one fixed burned-in registry, so it
is not suitable for user customizations and different clients. This can be fixed by
transfering a client-specific registry from the server, during the boot phase.</p>
 
 
<p>We can take advantage of <i>a filtering mechanism</i> built into the OS/2 server
RIPL service. The server interprets (for RIPL clients) certain strings on the superfloppy
image file in a very special way.</p>
 
<p>The critical strings are of the form <i>01:18, 23 April 2006 (CEST)m</i> where the hexadecimal digit <i>m</i>
refers to the workstation record in the RPL.MAP file (which is the main configuration
file for the OS/2 Warp Server RIPL subsystem). In addition, if the
replacement string has more than 6 characters, we should add the appropriate amount
of tilde characters in the string. The minimum number of tilde characters is 5, in
order to invoke the filtering mechanism. </p>
 
<p>For example, a line of the following form is standardly present in AUTOEXEC.BAT 
of all DOS requesters:</p>
 
<font color=#660000><p align="center">
 
LOADHIGH CONNECT 01:18, 23 April 2006 (CEST)B 01:18, 23 April 2006 (CEST)01:18, 23 April 2006 (CEST)5 01:18, 23 April 2006 (CEST)01:18, 23 April 2006 (CEST)~2 01:18, 23 April 2006 (CEST)01:18, 23 April 2006 (CEST)~6
</p></font>
 
<p>Now, suppose that the server name is AURORA, the domain name IMATH and the
workstation name DOS98, then the above line will appear to the client simply as
<font color=#660000><center>
LOADHIGH CONNECT Z AURORA DOS98 IMATH
</center></font></p><p>
 
Using this, it is easy to set up a RIPL client that connects to the OS/2 Warp server,
and copies the registry from the principal client-specific directory
<font color=#660000><center>IBMLAN\RPLUSER\MACHINENAME.</center></font></p>
 
<p>The simplest 16-bit solution involves starting IBM 16-bit networking and making
automatical redirections
<font color=#660000>
<center>[Y:]=\\SERVERNAME\WRKFILES=RPLUSER_Folder,
[Z:]=\\SERVERNAME\IBMLAN$=IBMLAN_Folder.</center></font> </p><p>
 
The registry is copied during DOS boot processing. </p>
 
<p>It is also possible, althought a bit trickier, to set up the superfloppy so the
system connects to the OS/2 server in 32-bit mode (using M$ networking), automatically makes the appropriate
redirections, and merges the client-specific portion of the registry, during
StartUp folder processing (the last part of Windows boot process). However, this requires
recompiling the burned-in registry with appropriate special strings introduced.</p>
 
<h2>Appendix A: Basic Configuration Files</h2>
 
<h3>msdos.sys file</h3>
 
<pre>[Paths]
WinBootDir=C:\WINDOWS
WinDir=F:\WINDOWS
HostWinBootDrv=F
             
[Options]
BootGUI=0
Network=1
Logo=1
Autoscan=0
;BootWarn=0
</pre>
 
<h3>config.sys file</h3>
 
<p>We shall define here 2 start-up configurations: The internal one
(loading a predefined registry burned into the superfloppy) and the standard
one (requiring the IBM 16-bit networking stuff, a part of which is the driver
DLSHELP.SYS).</p>
 
<pre>[Menu]
menuitem=1, Local Maintenance Mode
menuitem=2, IBM 16-bit Networking+RIPL
menucolor=15,1
menudefault=2, 8
 
[1]
DEVICE=A:\WINDOWS\HIMEM.SYS
DOS=HIGH,UMB
DEVICEHIGH=A:\WINDOWS\IFSHLP.SYS
 
[2]
DEVICE=A:\WINDOWS\HIMEM.SYS
DOS=HIGH,UMB
DEVICEHIGH=A:\WINDOWS\IFSHLP.SYS
DEVICEHIGH=A:\16IBM\DLSHELP.SYS
LASTDRIVE=Z
</pre>
 
<h3>autoexec.bat file</h3>
 
<p>The echo-messages are visible only if we turn off the animated Win95 Logo. For
simplicity, we have not included conditional error-checking commands, assuming
everything works perfectly. The system automatically loads Windows GUI (because
of WIN at the end of the file). Alternatively, we can put BootGUI=1 in MSDOS.SYS,
however such configurations show <i>a slight instability</i>. This is probably
because Windows preassumes some standard properties of its boot drive, in case
it thinks that GUI should be loaded. Indeed, with BootGUI=1 and without
BootWarn=0, Windows will present a weird error message!</p>
 
<pre>@echo off
echo * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
echo *            Netvista 2800 Diskless Win95 Client            *
echo *              Superfloppy Configuration V0.8A              *
echo *                                                          *
echo *                    by Micho Durdevich                    *
echo *                Institute of Mathematics                  *
echo *          National Autonomous University of Mexico        *
echo *  http://www.matem.unam.mx/~micho, micho@matem.unam.mx    *
echo *                                                          *
echo *  All this is based on OS/2 Warp Server RIPL Subsystem!!!  *
echo * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
                                           
echo Constructing a RAM-drive [C:]...
xmsdsk 8192 c: /Y
mkdir c:\windows
mkdir c:\junk
copy a:\windows\explorer.exe c:\windows >nul
copy a:\windows\command.com  c:\windows >nul
 
goto %config%
 
:1
echo Internal Configuration Files...
copy c_init\*.* c:\windows >nul
echo Final Adjustments...
set comspec=c:\windows\command.com
subst f: a:\
set path=c:\windows;f:\windows;f:\windows\command
set temp=c:\junk       
set  tmp=c:\junk
attrib +h +r +s c:\windows\*.dat
goto end
 
:2
cd 16ibm
call 16start.bat
cd\
echo Configuration Files and Final Adjustments...
copy Y:*.* c:\windows >nul
set comspec=c:\windows\command.com
subst f: a:\
set path=c:\windows;f:\windows;f:\windows\command;d:\win95
set temp=c:\junk       
set  tmp=c:\junk
set mathematica_preferences=d:
attrib +h +r +s c:\windows\*.dat
goto end
 
:end
echo OK!!! I think I am now ready to load Windows :)
win
</pre>
 
<h3>16start.bat file</h3>
 
<pre>@echo Starting IBM 16-bit Networking...
LOADHIGH NET START
                 
@echo Connecting to the RIPL Server...
LOADHIGH connect ~~~~~B ~~~~~~~~~~~~~~~5 ~~~~~~~~~~~~~~~2 ~~~~~~~~~~~~~~~6
</pre>
 
<p>This file starts the 16-bit networking in order to copy the client-specific files
to the RAM-drive [C:].</p>
 
<h2>Appendix B: Windows Nucleus Listing</h2>
 
<p>This listing corresponds to Win95 superfloppy nucleus running on IBM Network
Station 2800 with a built-in IBM EtherJet adapter.</p>
 
 
<h3>Windows Folder</h3>
 
<h4>Executables & Related</h4>
 
<pre> COMMAND.COM    CONTROL.EXE    REGEDIT.EXE    PROTMAN.EXE    EXPLORER.EXE  
       WIN.COM                                    PROTMAN.DOS    TASKMAN.EXE
  WINPOPUP.EXE                                        NET.EXE      RUNDLL.EXE
  WINPOPUP.EXE                                        NET.EXE      RUNDLL.EXE
   WINSOCK.DLL                                        NET.MSG                 
   WINSOCK.DLL                                        NET.MSG                 
Line 384: Line 218:
</pre>
</pre>


<h4>Miscellaneous</h4>
;Miscellaneous
 
<pre>
<pre>       TRIANGLES.BMP    CIRCLES.BMP      IFSHLP.SYS      LOGOW.SYS
  TRIANGLES.BMP    CIRCLES.BMP      IFSHLP.SYS      LOGOW.SYS
            WAVES.BMP      SETUP.BMP      HIMEM.SYS      LOGOS.SYS
      WAVES.BMP      SETUP.BMP      HIMEM.SYS      LOGOS.SYS
          BUBBLES.BMP                RAINFORREST.BMP    OS2WARP.SCR
    BUBBLES.BMP                RAINFORREST.BMP    OS2WARP.SCR
</pre>
 
<h4>Relevant Subfolders</h4>
 
<pre> [Start Menu]      [COMMAND]        [SYSTEM]          [INF]        [FONTS]
 
</pre>
</pre>


<p>In total, about 1600 Kbytes!</p>
;Relevant Subfolders
[Start Menu]      [COMMAND]        [SYSTEM]          [INF]        [FONTS]
In total, about 1600 Kbytes!


<h3>The Command Subfolder</h3>
===The Command Subfolder===
 
<pre>
 
  DISPLAY.SYS    XCOPY32.EXE      ATTRIB.EXE    SCANDISK.EXE
<pre> DISPLAY.SYS    XCOPY32.EXE      ATTRIB.EXE    SCANDISK.EXE
   CHOICE.COM    COUNTRY.SYS      DEBUG.EXE      CHKDSK.EXE    DISKCOPY.COM
   CHOICE.COM    COUNTRY.SYS      DEBUG.EXE      CHKDSK.EXE    DISKCOPY.COM
     XCOPY.EXE      DOSKEY.COM        EDIT.COM        EDIT.HLP    EXTRACT.EXE  
     XCOPY.EXE      DOSKEY.COM        EDIT.COM        EDIT.HLP    EXTRACT.EXE  
       FC.EXE        FIND.EXE        ANSY.SYS        KEYB.COM      LABEL.EXE  
       FC.EXE        FIND.EXE        ANSY.SYS        KEYB.COM      LABEL.EXE  
       MEM.EXE        SYS.COM        MOVE.EXE      SUBST.EXE        SORT.EXE  
       MEM.EXE        SYS.COM        MOVE.EXE      SUBST.EXE        SORT.EXE
     START.EXE        MORE.COM      FORMAT.COM    DELTREE.EXE  
     START.EXE        MORE.COM      FORMAT.COM    DELTREE.EXE
</pre>
</pre>
Many of these files are really not mandatory... but anyway all this takes only about 720 Kbytes of disk space!


<p>Many of these files are really not mandatory...but anyway all this takes only about
===The System Subfolder===
720 Kbytes of disk space!</p>
;Critical System Files
 
<pre>
<h3>The System Subfolder</h3>
  KERNEL32.DLL    KRNL386.DLL    MSMOUSE.VXD      SETUPX.DLL
 
  SHELL32.DLL      SHELL.EXE      MFC30.DLL      SETUP4.DLL
<h4>Critical System Files</h4>
    USER32.DLL        USER.EXE    MSVCRT20.DLL      VMM32.VXD
 
    GDI32.DLL        GDI.EXE                        VFD.VXD
<pre>         KERNEL32.DLL    KRNL386.DLL    MSMOUSE.VXD      SETUPX.DLL
  ADVAPI32.DLL    COMMDLG.DLL                    SPOOL32.EXE
          SHELL32.DLL      SHELL.EXE      MFC30.DLL      SETUP4.DLL
  COMDLG32.DLL    IOSCLASS.DLL                    SPOOLSS.DLL
          USER32.DLL        USER.EXE    MSVCRT20.DLL      VMM32.VXD
  COMCTL32.DLL    COMMCTRL.DLL                    SYSTRAY.EXE
            GDI32.DLL        GDI.EXE                        VFD.VXD  
  MSGSRV32.DLL
        ADVAPI32.DLL    COMMDLG.DLL                    SPOOL32.EXE
</pre>
        COMDLG32.DLL    IOSCLASS.DLL                    SPOOLSS.DLL  
;Extra DLLs
        COMCTL32.DLL    COMMCTRL.DLL                    SYSTRAY.EXE
<pre>
        MSGSRV32.DLL
LZEXPAND.DLL    DESKCP16.DLL    LINKINFO.DLL    SYSCLASS.DLL    SYNCENG.DLL
</pre>  
 
 
<h4>Extra DLLs</h4>
 
<pre> LZEXPAND.DLL    DESKCP16.DLL    LINKINFO.DLL    SYSCLASS.DLL    SYNCENG.DLL
     LZ32.DLL    TOOLHELP.DLL        VER.DLL      WINMM.DLL      SYNCUI.DLL
     LZ32.DLL    TOOLHELP.DLL        VER.DLL      WINMM.DLL      SYNCUI.DLL
   PIFMGR.DLL      DIBENG.DLL    VERSION.DLL        URL.DLL    SHLWAPI.DLL
   PIFMGR.DLL      DIBENG.DLL    VERSION.DLL        URL.DLL    SHLWAPI.DLL
Line 436: Line 260:
</pre>
</pre>


 
;Network-Oriented Stuff
<h4>Network-Oriented Stuff</h4>
The following listing corresponds to a simple configuration, consisting of M$ networking, NETBIOS protocol and the network adapter files. Some of the network files are located in the main Windows folder. The last column contains the files associated to the IBM EtherJet adapter...
 
<pre>
<p>The following listing corresponds to a simple configuration, consisting of  
NETAPI32.DLL      NETAPI.DLL    NETBIOS.DLL    NETBEUI.VXD    IBMFENT5.SYS
M$ networking, NETBIOS protocol and the network adapter files. Some of the network
files are located in the main Windows folder. The last column  
contains the files associated to the IBM EtherJet adapter...</p>
 
<pre> NETAPI32.DLL      NETAPI.DLL    NETBIOS.DLL    NETBEUI.VXD    IBMFENT5.SYS
   MSNET32.DLL      NETDI.DLL    NETMGMT.VXD      VREDIR.VXD      IBMDD.VXD
   MSNET32.DLL      NETDI.DLL    NETMGMT.VXD      VREDIR.VXD      IBMDD.VXD
   MSNP32.DLL      NETOS.DLL      SVRAPI.DLL        NDIS.VXD      IBMFE.SYS
   MSNP32.DLL      NETOS.DLL      SVRAPI.DLL        NDIS.VXD      IBMFE.SYS
   MAPI32.DLL        MPR.DLL      WSOCK.VXD    VNETSUP.VXD    IBMKDDP.VXD
   MAPI32.DLL        MPR.DLL      WSOCK.VXD    VNETSUP.VXD    IBMKDDP.VXD
   MSAB32.DLL        MSSP.VXD      PMSPL.DLL    NDIS2SUP.VXD    IBMSETP.CNT
   MSAB32.DLL        MSSP.VXD      PMSPL.DLL    NDIS2SUP.VXD    IBMSETP.CNT
   MSPP32.DLL      MPREXE.EXE      WSASRV.EXE                          
   MSPP32.DLL      MPREXE.EXE      WSASRV.EXE
   MSPWL32.DLL    MPRSERV.DLL    MSSHRUI.DLL
   MSPWL32.DLL    MPRSERV.DLL    MSSHRUI.DLL
   SECUR32.DLL    CHOOSUSR.DLL                    VNETBIOS.VXD    8255XNDI.DLL
   SECUR32.DLL    CHOOSUSR.DLL                    VNETBIOS.VXD    8255XNDI.DLL
</pre>
</pre>


 
;DRV-files
<h4>DRV-files</h4>
      VGA.DRV      MOUSE.DRV    MMSOUND.DRV    KEYBOARD.DRV
 
<pre>      VGA.DRV      MOUSE.DRV    MMSOUND.DRV    KEYBOARD.DRV  
     COMM.DRV    SUPERVGA.DRV    WINSPOOL.DRV      SYSTEM.DRV      POWER.DRV
     COMM.DRV    SUPERVGA.DRV    WINSPOOL.DRV      SYSTEM.DRV      POWER.DRV
</pre>


<h4>Control Panel</h4>
;Control Panel
 
    SYSDM.CPL        DESK.CPL        INTL.CPL        MAIN.CPL      NETCPL.CPL
<pre>    SYSDM.CPL        DESK.CPL        INTL.CPL        MAIN.CPL      NETCPL.CPL
  TIMEDATE.CPL      MODEM.CPL      APPWIZ.CPL    PASSWORD.CPL    INETCPL.CPL
  TIMEDATE.CPL      MODEM.CPL      APPWIZ.CPL    PASSWORD.CPL    INETCPL.CPL
</pre>
<h4>Miscalleneous</h4>
<pre>  CP_437.NLS      LOCALE.NLS    UNICODE.NLS    CP_1252.NLS    VGAFULL.3GR
WINOA386.MOD
</pre>
<p>In total, about 10 MBytes of superfloppy space!</p>
<h4>Subfolder system::vmm32</h4>
<pre>                          IFSMGR.VXD        IOS.VXD
</pre>


<p>About 250 Kbytes :)</p>
;Miscellaneous
  CP_437.NLS      LOCALE.NLS    UNICODE.NLS    CP_1252.NLS    VGAFULL.3GR
WINOA386.MOD
In total, about 10 MBytes of superfloppy space!


<h4>Subfolder system::iosubsys</h4>
;Subfolder system\vmm32
IFSMGR.VXD        IOS.VXD
About 250 Kbytes :)


<pre>   BIGMEM.DRV    AIC78XX.MPD    DISKTSD.VXD
;Subfolder system\iosubsys
<pre>
  BIGMEM.DRV    AIC78XX.MPD    DISKTSD.VXD
     CDTSD.VXD      CDVSD.VXD      AMSINT.MPD    DISKVSD.VXD    VOLTRACK.VXD
     CDTSD.VXD      CDVSD.VXD      AMSINT.MPD    DISKVSD.VXD    VOLTRACK.VXD
  NECATAPI.VXD        APIX.VXD     CDFS.VXD    NCRC710.MPD    NCRC810.MPD
  NECATAPI.VXD        APIX.VXD     CDFS.VXD    NCRC710.MPD    NCRC810.MPD
Line 490: Line 298:
  SCSI1HLP.VXD SMARTVSD.VXD TORISAN3.VXD
  SCSI1HLP.VXD SMARTVSD.VXD TORISAN3.VXD
</pre>  
</pre>  
In total, about 400 Kbytes!


<p>In total, about 400 Kbytes!</p>
[[Category:Networking Articles]]

Latest revision as of 10:37, 11 January 2023

Original work by Micho Durdevich

Introduction

The aim of this fifth article is to present the design of a new interesting class of diskless Win95/98/Me workstations, that remote boot from OS/2 Warp Server.

The basic idea is to boot Windows directly from a virtual superfloppy! The construction of such superfloppy images has been explained in the previous article. As we saw, the basic design of OS/2 Warp Server RIPL system for DOS requesters limits the size of a superfloppy image to approx 16 MB (because in this context the maximal number of cylinders is 256, and a floppy-like device should have maximum two heads-add to this the fact that the maximal # of sectors per track is 63).

Hence, a very interesting and challenging problem appears: Build a micro-Windows version (the nucleus) that has full GUI and 32-bit networking and fits into 16 MB!

As in our previous nucleus-type configurations, the (non-essential) extensions of the operating system, together with the corresponding applications, are all stored on the OS/2 server and become available to the RIPL client, after making the appropriate network drive connections in 32-bit mode. The main problem here is to separate the nucleus (the part that must stay on the superfloppy) from the rest of the operating system. However there are several simple methods of doing this...

The configurations that we are going to describe have the following basic properties:

  • There is no any 16-bit networking running, except the basic connections initiated during the initial RIPL processing.
  • The virtual boot drive [A:] remains 16-bit all the time.
  • Simplicity: No nucleus transfers, unzipping, 16-bit logins, VFAT adjustments...
  • Better memory usage (no big RAM drives).
  • Comparing with the previous nucleus-type configurations, they boot faster.
  • Long filenames support (even on the virtual floppy).
  • Full 32-bit networking support.
  • Easier installation and RIPL client management.

In the next section we shall discuss basic techniques to split Windows into the nucleus (to be installed on the virtual superfloppy) and the extension (to be installed on the OS/2 server). In particular, we shall see which Registry entries control the form of the nucleus.

We shall then consider some variations of the basic theme, presenting RIPL configurations that are automatically "client-oriented". This can be done using a powerful filtering mechanism built into OS/2 Warp Server RIPL subsystem. In the first appendix we present listings of CONFIG.SYS, AUTOEXEC.BAT, MSDOS.SYS and 16START.BAT files for such clients.

Finally, a detailed file-by-file specification of a Win95 nucleus (suitable for IBM Network Station 2800) is given in the second appendix. Similar considerations apply to Win98 workstations. On the other hand, Windows Millennium Edition systems require some very special steps, that will be discussed in the next article.

Constructing Windows Nucleus

Minimising Procedure

Perhaps the most direct method is the safest and the most instructive one: Construct the nucleus from scratch! We can start from a standard HD install, containing all the features we need (including networking). Make a backup copy of the entire WINDOWS folder. In order to remove unnecessary Windows parts, open a DOS Window and proceed with deleting (using DEL *) all files in WINDOWS directory and SYSTEM directory. This will actually delete all files, except those that are locked by the system. Such a procedure would give us a 0-approximation of the nucleus, we will have to put some files back. In particular some or all CPL-files (representing Control Panel object) should be copied back.

Reboot the system. Because of the missing files, the system will not boot, ha-ha-hahaha :) But hopefully, error messages will tell us which files are missing! Put them back from the backup copy. In such a way we should be able to get the standard GUI showing up.

Get a beautiful FILEMON program from SysInternals. This utility monitors in real time all the files the access to which is requested by various processes in the system. It is worth noting that there is a nice companion program REGMON, which monitors the Registry functions. With the help of FILEMON, figure out which files are needed for the basic system components (trying to open the objects, and inspecting the FILEMON log) to work.

In some cases FILEMON will not show all files there are really needed. Binary-read the initial files and find out which DLLs/VXDs are needed.

After having a lot of fun, you should end up with a clean smoothly working Windows. You can remove some files from the COMMAND subfolder, some or all *.INF files from INF subfolder, and also files from the HELP subfolder. Optionally, you can put back some background bitmaps, screen saver files and so on, but the entire Windows nucleus should not exceed 14 MB. This is because it is a good idea to leave some space on the 16MB-superfloppy (approx 2 MB) for the appropriate extra stuff, like some important diagnostic tools.

Registry Editing/Recompile

At first, simplify the system Registry, by removing unnecessary stuff. Export the registry into a text-file, change all occurrences of the Windows boot drive (normally it's the C-drive) into references to the A-drive. Compile the new file (from DOS) creating a new Registry (don't overwrite the initial registry)! The syntax for the recompilation procedure has been explained in the third article.

Furthermore, we have to remove some entries from the lists of 16-bit/32-bit known DLLs. If a DLL is "known" to Windows, the operating system looks only into the system subfolder when a corresponding access request is made. In contrary, if a DLL is "not known" Windows will look in all directories listed in the path statement of AUTOEXEC.BAT file. Hence, a simple removal from the corresponding known DLLs list, allows us to move a DLL to a different folder. Of course, in our case such non-essential Windows DLLs will be stored on the OS/2 Warp Server.

The corresponding Registry entries are:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\KnownDLLs

for important 32-bit DLLs and similarly

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\Known16DLLs

for important 16-bit DLLs. For example, the entire Object Linking and Embedding stuff (the files OLE*.DLL) can be safely removed from the nucleus and stored on the OS/2 server.

Creating Superfloppy Images

The structure of the superfloppy image file has been explained in our previous article. Let us recall here that the most subtle part of this game consists in editing the BIOS Parameter Block of the image file, and adding the appropriate 4-byte string at the beginning of the image (necessary for RPLLOADR.COM to start booting the client properly).

Here we shall focus on what to put into the image. The simplest way to put files on the image is to create a RAM-drive of the same size as the superfloppy (using for example SRDISK). This should be done within a standard Windows workstation. Later on, we should linearly map this drive to an image file (using HDCOPY for example) and finally we should edit the BPB and add the corresponding 4-byte string, to make the disk RIPL-deployable.

Copy the entire Windows folder of the previously created nucleus, except the files

SHELLICONCACHE, TTFCACHE, SYSTEM.DAT/0, USER.DAT/0, WIN.INI, SYSTEM.INI

to the RAM-drive representing the superfloppy. Note that in order to preserve long filenames, copying of the Windows nucleus should be performed within a Windows system.

Create a special folder (say C_INIT) in the RAM-drive, and put there WIN.COM, WIN.INI and SYSTEM.INI, as well as recompiled SYSTEM.DAT and USER.DAT (with all attributes stripped off). Edit SYSTEM.INI and make sure that something like

PagingFile=C:\WIN386.SWP

is included in the [386Enh] section.

Furthermore, include the appropriate RAM-drive software. Create the appropriate CONFIG.SYS and AUTOEXEC.BAT files. Make elementary adjustments to MSDOS.SYS. During DOS-mode booting, the RIPL client should create a small RAM-drive [C:], together with a WINDOWS folder where all the files from C_INIT should be copied.

Windows Extensions on the OS/2 Server

As we emphasized several times, non-essential extensions of Windows should be stored on the OS/2 server, in a normal form. There are several very simple ways to tell Windows where to look for these extra files.

As the first solution, we could configure the client to make an automatic redirection in 32-bit mode, so that after Windows boots, it sees a redirected drive [D:] with a subfolder say WIN95, containing the extensions. In AUTOEXEC.BAT we should append D:\WIN95 at the end of the path statement.

There is a second method which is perhaps conceptually clearer: Copy the entire Windows tree (a full-blown version, without client-specific files including Registry) to the appropriate folder in the OS/2 server. Construct a full-blown client-specific registry (starting from a client with an HD, say) edit it to point to the new drive location, and configure the RIPL client to merge this Registry into the Nucleus Registry, as a part of the StartUp folder processing (see below about the clientization procedures).

Interesting Variations

Controlling Boot Drive Letter

There is a simple way to control the main Windows drive letter of our RIPL requesters. Standardly, they would boot from [A:]. But if we execute

SUBST F: A:\

then we get a new drive [F:], which is a mirror of [A:]. We can adjust the system Registry, as well as MSDOS.SYS and AUTOEXEC.BAT so that the system will boot off [F:].

The advantage of doing this is that we can use the same drive letter for Windows boot drive of a RIPL workstation, and for an auxiliary RAM-drive used to prepare the superfloppy image (on Windows development machine). This is particularly useful when creating the Desktop folder, and various shortcuts from the Start Menu, as we can do it directly from the Windows development machine, without having to binary-edit shortcut files.

Interestingly, various experiments in my computer lab have indicated that the performance of RIPL clients with substituted boot drive letters has been slightly improved! Probably, Windows uses different routines to access drives with a non-floppy drive letter (even if they operate in 16-bit mode).

Enabling Client-Specific Configurations

The superfloppy image we described so far contains one fixed burned-in registry, so it is not suitable for user customizations and different clients. This can be fixed by transferring a client-specific registry from the server, during the boot phase.

We can take advantage of a filtering mechanism built into the OS/2 server RIPL service. The server interprets (for RIPL clients) certain strings on the superfloppy image file in a very special way.

The critical strings are of the form 01:18, 23 April 2006 (CEST)m where the hexadecimal digit m refers to the workstation record in the RPL.MAP file (which is the main configuration file for the OS/2 Warp Server RIPL subsystem). In addition, if the replacement string has more than 6 characters, we should add the appropriate amount of tilde characters in the string. The minimum number of tilde characters is 5, in order to invoke the filtering mechanism.

For example, a line of the following form is standardly present in AUTOEXEC.BAT of all DOS requesters:

LOADHIGH CONNECT

Now, suppose that the server name is AURORA, the domain name IMATH and the workstation name DOS98, then the above line will appear to the client simply as

LOADHIGH CONNECT Z AURORA DOS98 IMATH

Using this, it is easy to set up a RIPL client that connects to the OS/2 Warp server, and copies the registry from the principal client-specific directory

IBMLAN\RPLUSER\MACHINENAME.

The simplest 16-bit solution involves starting IBM 16-bit networking and making automatic redirections

[Y:]=\\SERVERNAME\WRKFILES=RPLUSER_Folder,
[Z:]=\\SERVERNAME\IBMLAN$=IBMLAN_Folder.

The registry is copied during DOS boot processing.

It is also possible, although a bit trickier, to set up the superfloppy so the system connects to the OS/2 server in 32-bit mode (using M$ networking), automatically makes the appropriate redirections, and merges the client-specific portion of the registry, during StartUp folder processing (the last part of Windows boot process). However, this requires recompiling the burned-in registry with appropriate special strings introduced.

Appendix A: Basic Configuration Files

msdos.sys file

[Paths]
WinBootDir=C:\WINDOWS
WinDir=F:\WINDOWS
HostWinBootDrv=F

[Options]
BootGUI=0
Network=1
Logo=1
Autoscan=0
;BootWarn=0

config.sys file

We shall define here 2 start-up configurations: The internal one (loading a predefined registry burned into the superfloppy) and the standard one (requiring the IBM 16-bit networking stuff, a part of which is the driver DLSHELP.SYS).

[Menu]
menuitem=1, Local Maintenance Mode
menuitem=2, IBM 16-bit Networking+RIPL
menucolor=15,1
menudefault=2, 8

[1]
DEVICE=A:\WINDOWS\HIMEM.SYS
DOS=HIGH,UMB
DEVICEHIGH=A:\WINDOWS\IFSHLP.SYS

[2]
DEVICE=A:\WINDOWS\HIMEM.SYS
DOS=HIGH,UMB
DEVICEHIGH=A:\WINDOWS\IFSHLP.SYS
DEVICEHIGH=A:\16IBM\DLSHELP.SYS
LASTDRIVE=Z

autoexec.bat file

The echo-messages are visible only if we turn off the animated Win95 Logo. For simplicity, we have not included conditional error-checking commands, assuming everything works perfectly. The system automatically loads Windows GUI (because of WIN at the end of the file). Alternatively, we can put BootGUI=1 in MSDOS.SYS, however such configurations show a slight instability. This is probably because Windows pre-assumes some standard properties of its boot drive, in case it thinks that GUI should be loaded. Indeed, with BootGUI=1 and without BootWarn=0, Windows will present a weird error message!

@echo off
echo * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
echo *            Netvista 2800 Diskless Win95 Client            *
echo *              Superfloppy Configuration V0.8A              *
echo *                                                           * 
echo *                    by Micho Durdevich                     *
echo *                 Institute of Mathematics                  *
echo *          National Autonomous University of Mexico         *
echo *   http://www.matem.unam.mx/~micho, micho@matem.unam.mx    *
echo *                                                           *
echo *  All this is based on OS/2 Warp Server RIPL Subsystem!!!  *
echo * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

echo Constructing a RAM-drive [C:]...
xmsdsk 8192 c: /Y
mkdir c:\windows
mkdir c:\junk
copy a:\windows\explorer.exe c:\windows >nul
copy a:\windows\command.com  c:\windows >nul

goto %config%

:1
echo Internal Configuration Files...
copy c_init\*.* c:\windows >nul
echo Final Adjustments...
set comspec=c:\windows\command.com
subst f: a:\
set path=c:\windows;f:\windows;f:\windows\command
set temp=c:\junk
set tmp=c:\junk
attrib +h +r +s c:\windows\*.dat
goto end

:2
cd 16ibm
call 16start.bat
cd\
echo Configuration Files and Final Adjustments...
copy Y:*.* c:\windows >nul
set comspec=c:\windows\command.com
subst f: a:\
set path=c:\windows;f:\windows;f:\windows\command;d:\win95
set temp=c:\junk
set tmp=c:\junk
set mathematica_preferences=d:
attrib +h +r +s c:\windows\*.dat
goto end

:end
echo OK!!! I think I am now ready to load Windows :)
win

16start.bat file

@echo Starting IBM 16-bit Networking...
LOADHIGH NET START

@echo Connecting to the RIPL Server...
LOADHIGH connect

This file starts the 16-bit networking in order to copy the client-specific files to the RAM-drive [C:].

Appendix B: Windows Nucleus Listing

This listing corresponds to Win95 superfloppy nucleus running on IBM Network Station 2800 with a built-in IBM EtherJet adapter.

Windows Folder

Executables & Related
  COMMAND.COM     CONTROL.EXE     REGEDIT.EXE     PROTMAN.EXE    EXPLORER.EXE 
      WIN.COM                                     PROTMAN.DOS     TASKMAN.EXE
 WINPOPUP.EXE                                         NET.EXE      RUNDLL.EXE
  WINSOCK.DLL                                         NET.MSG                 
 MORICONS.DLL                                        NETH.MSG    RUNDLL32.EXE
Miscellaneous
  TRIANGLES.BMP     CIRCLES.BMP      IFSHLP.SYS       LOGOW.SYS
      WAVES.BMP       SETUP.BMP       HIMEM.SYS       LOGOS.SYS
    BUBBLES.BMP                 RAINFORREST.BMP     OS2WARP.SCR
Relevant Subfolders
[Start Menu]       [COMMAND]        [SYSTEM]           [INF]         [FONTS]

In total, about 1600 Kbytes!

The Command Subfolder

  DISPLAY.SYS     XCOPY32.EXE      ATTRIB.EXE    SCANDISK.EXE
   CHOICE.COM     COUNTRY.SYS       DEBUG.EXE      CHKDSK.EXE    DISKCOPY.COM
    XCOPY.EXE      DOSKEY.COM        EDIT.COM        EDIT.HLP     EXTRACT.EXE 
       FC.EXE        FIND.EXE        ANSY.SYS        KEYB.COM       LABEL.EXE 
      MEM.EXE         SYS.COM        MOVE.EXE       SUBST.EXE        SORT.EXE
    START.EXE        MORE.COM      FORMAT.COM     DELTREE.EXE

Many of these files are really not mandatory... but anyway all this takes only about 720 Kbytes of disk space!

The System Subfolder

Critical System Files
  KERNEL32.DLL     KRNL386.DLL     MSMOUSE.VXD      SETUPX.DLL
   SHELL32.DLL       SHELL.EXE       MFC30.DLL      SETUP4.DLL
    USER32.DLL        USER.EXE    MSVCRT20.DLL       VMM32.VXD
     GDI32.DLL         GDI.EXE                         VFD.VXD
  ADVAPI32.DLL     COMMDLG.DLL                     SPOOL32.EXE
  COMDLG32.DLL    IOSCLASS.DLL                     SPOOLSS.DLL
  COMCTL32.DLL    COMMCTRL.DLL                     SYSTRAY.EXE
  MSGSRV32.DLL
Extra DLLs
 LZEXPAND.DLL    DESKCP16.DLL    LINKINFO.DLL    SYSCLASS.DLL     SYNCENG.DLL
     LZ32.DLL    TOOLHELP.DLL         VER.DLL       WINMM.DLL      SYNCUI.DLL
   PIFMGR.DLL      DIBENG.DLL     VERSION.DLL         URL.DLL     SHLWAPI.DLL
 TOOLHELP.DLL    MMSYSTEM.DLL    SYSTHUNK.DLL       DDEML.DLL    CONAGENT.EXE 
Network-Oriented Stuff

The following listing corresponds to a simple configuration, consisting of M$ networking, NETBIOS protocol and the network adapter files. Some of the network files are located in the main Windows folder. The last column contains the files associated to the IBM EtherJet adapter...

 NETAPI32.DLL      NETAPI.DLL     NETBIOS.DLL     NETBEUI.VXD    IBMFENT5.SYS
  MSNET32.DLL       NETDI.DLL     NETMGMT.VXD      VREDIR.VXD       IBMDD.VXD
   MSNP32.DLL       NETOS.DLL      SVRAPI.DLL        NDIS.VXD       IBMFE.SYS
   MAPI32.DLL         MPR.DLL       WSOCK.VXD     VNETSUP.VXD     IBMKDDP.VXD
   MSAB32.DLL        MSSP.VXD       PMSPL.DLL    NDIS2SUP.VXD     IBMSETP.CNT
   MSPP32.DLL      MPREXE.EXE      WSASRV.EXE
  MSPWL32.DLL     MPRSERV.DLL     MSSHRUI.DLL
  SECUR32.DLL    CHOOSUSR.DLL                    VNETBIOS.VXD    8255XNDI.DLL
DRV-files
     VGA.DRV       MOUSE.DRV     MMSOUND.DRV    KEYBOARD.DRV
    COMM.DRV    SUPERVGA.DRV    WINSPOOL.DRV      SYSTEM.DRV       POWER.DRV
Control Panel
   SYSDM.CPL        DESK.CPL        INTL.CPL        MAIN.CPL      NETCPL.CPL
TIMEDATE.CPL       MODEM.CPL      APPWIZ.CPL    PASSWORD.CPL     INETCPL.CPL
Miscellaneous
  CP_437.NLS      LOCALE.NLS     UNICODE.NLS     CP_1252.NLS     VGAFULL.3GR
WINOA386.MOD

In total, about 10 MBytes of superfloppy space!

Subfolder system\vmm32
IFSMGR.VXD         IOS.VXD

About 250 Kbytes :)

Subfolder system\iosubsys
   BIGMEM.DRV     AIC78XX.MPD     DISKTSD.VXD
    CDTSD.VXD       CDVSD.VXD      AMSINT.MPD     DISKVSD.VXD    VOLTRACK.VXD
 NECATAPI.VXD        APIX.VXD 	     CDFS.VXD     NCRC710.MPD     NCRC810.MPD
 ESDI_506.PDR      HSFLOP.PDR  	      RMM.PDR    SCSIPORT.PDR    ATAPCHNG.VXD
 SCSI1HLP.VXD	 SMARTVSD.VXD	 TORISAN3.VXD

In total, about 400 Kbytes!