Technical Overview and Lessons Learned - CCS - Home

advertisement
Anytime Anywhere Component of AIS/W2k Pilot Project
Technical Overview and Lessons Learned
Doug Edmonds
Windows Administrative Servers – Virginia Tech
2/18/02
Table of Contents
Anytime Anywhere Component of AIS/W2k Pilot Project_____________________ 1
Technical Overview and Lessons Learned __________________________________ 1
2/18/02 _______________________________________________________________ 1
Table of Contents ______________________________________________________ 2
Table of Figures________________________________________________________ 4
Introduction ___________________________________________________________ 6
System and Disaster Recovery ____________________________________________ 7
Universal Disk Image ________________________________________________________ 8
Purpose ________________________________________________________________________ 8
UDI Creation Procedure ___________________________________________________________ 8
Partitions _____________________________________________________________________ 8
DOS Installation ______________________________________________________________ 10
Installing DOS to the C: Drive _________________________________________________ 10
Modification of Win98 Startup Disk files ________________________________________ 10
Other files on C Drive _______________________________________________________ 10
Windows 2000 Installation Procedure _____________________________________________ 12
SYSPREP ____________________________________________________________________ 13
Creating the Images ___________________________________________________________ 15
After running SYSPREP _____________________________________________________ 15
Creating the FS full disk image ________________________________________________ 15
Loading the FS and UDI images _______________________________________________ 16
Instructions for loading images ________________________________________________ 16
Conflict Resolution ____________________________________________________________ 17
LAZARUS________________________________________________________________ 19
Purpose _______________________________________________________________________ 19
SNAPSHOT ______________________________________________________________ 21
Purpose _______________________________________________________________________ 21
REMOUNTER ____________________________________________________________ 27
Purpose _______________________________________________________________________ 27
User Data Storage and Accessibility ______________________________________ 29
Roaming Profiles and Folder Redirection _____________________________________ 30
Purpose _______________________________________________________________________ 30
Roaming Profiles________________________________________________________________ 30
Folder Redirection ______________________________________________________________ 30
Folder Synchronization __________________________________________________________ 31
Anytime Anywhere Procedures _____________________________________________________ 32
Disk Quota __________________________________________________________________ 32
Group Policy Object ___________________________________________________________ 32
Roaming Profiles and Folder Redirection __________________________________________ 33
Security Concerns _______________________________________________________________ 34
Conflict Resolution ______________________________________________________________ 35
Winzip 8.0 ___________________________________________________________________ 35
Microsoft Office XP____________________________________________________________ 35
MS Access ___________________________________________________________________ 35
POPULUS ________________________________________________________________ 36
2
Purpose _______________________________________________________________________ 36
Creating User Accounts __________________________________________________________ 36
Creating Users’ Data Folders ______________________________________________________ 36
APPENDICES ________________________________________________________ 38
Appendix A: DEFAULT AUTOEXEC.BAT _____________________________________ 39
Appendix B: MODIFIED AUTOEXEC.BAT ____________________________________ 40
Appendix C: DEFAULT CONFIG.SYS ________________________________________ 41
Appendix D: MODIFIED CONFIG.SYS ________________________________________ 42
Appendix E: “SYSPREP.INF” ________________________________________________ 43
Appendix F: “MERGEIDE.REG” _____________________________________________ 48
Appendix G: AIS/W2K PILOT PROJECT DEPLOYMENT PROCEDURE ____________ 52
Appendix H: Lazarus v0.0.3 Source ____________________________________________ 58
Appendix I: Lazarus Ghost command switch files _________________________________ 59
Appendix J: SnapShot v1.2.0.0 Source _________________________________________ 60
Appendix K: SnapShot “Snap” Ghost command switch files ________________________ 68
Appendix L: SnapShot “Shot” Ghost command switch files _________________________ 69
Appendix M: RMounter v1.2.1.0 Source Code ___________________________________ 70
Appendix N: Example of mount.vol GUID list ___________________________________ 72
Appendix O: “Test-Lab User GP” _____________________________________________ 73
Appendix P: “Slow Link Policy” GPO __________________________________________ 97
Appendix Q: “Add Users” .csv file syntax ______________________________________ 110
Appendix R: W2k-Pilot “AddUser.csv” ________________________________________ 111
Appendix S: Populus v1.0.0.0 Source__________________________________________ 112
Appendix T: Procedure for Adding a new user to the AIS/W2k-Pilot _________________ 117
3
Table of Figures
Figure 1: HARD DRIVE PARTITIONS _____________________________________________ 9
Figure 2: Lazarus Windows interface _____________________________________________ 20
Figure 3: Lazarus System Shutdown ______________________________________________ 20
Figure 4: Informational Message box _____________________________________________ 23
Figure 5: SnapShot Selection Menu _______________________________________________ 23
Figure 6: Missing SnapShot History File ___________________________________________ 24
Figure 7: SnapShot Selection Menu (No History File) ________________________________ 24
Figure 8: No Previous SnapShot Activity (no SnapShot image or History File) _____________ 24
Figure 9: Loading a Snapshot image ______________________________________________ 25
Figure 10: No Snapshot available to load __________________________________________ 25
Figure 11: Old Snapshot Warning ________________________________________________ 25
Figure 12: Invalid Snapshot Age (creation date of file differs from SnapShot history file) _____ 25
Figure 13: Previous Snapshot Found when attempting to “take” a Snapshot ______________ 26
Figure 14: SnapShot Canceled___________________________________________________ 26
Figure 15: SnapShot Rebooting Warning __________________________________________ 26
Figure 16: System Rebooting ____________________________________________________ 26
Figure 17: “UserData” Permissions ______________________________________________ 34
Figure 18: Test-Lab GPO Screenshots ____________________________________________ 73
Figure 19 _____________________________________________________________ 74
Figure 20 _____________________________________________________________ 75
Figure 21 _____________________________________________________________ 76
Figure 22 _____________________________________________________________ 77
Figure 23 _____________________________________________________________ 78
Figure 24 _____________________________________________________________ 79
Figure 25 _____________________________________________________________ 79
Figure 26 _____________________________________________________________ 80
Figure 27 _____________________________________________________________ 81
Figure 28 _____________________________________________________________ 82
Figure 29 _____________________________________________________________ 83
Figure 30 _____________________________________________________________ 84
Figure 31 _____________________________________________________________ 85
Figure 32 _____________________________________________________________ 86
Figure 33 _____________________________________________________________ 87
Figure 34 _____________________________________________________________ 88
Figure 35 _____________________________________________________________ 89
Figure 36 _____________________________________________________________ 90
Figure 37 _____________________________________________________________ 91
Figure 38 _____________________________________________________________ 92
Figure 39 _____________________________________________________________ 93
Figure 40 _____________________________________________________________ 93
Figure 41 _____________________________________________________________ 94
Figure 42 _____________________________________________________________ 95
Figure 43 _____________________________________________________________ 96
Figure 44: Slow Link GPO Screenshots ____________________________________________ 97
Figure 45 _____________________________________________________________ 98
Figure 46 _____________________________________________________________ 99
Figure 47 ____________________________________________________________ 100
Figure 48 ____________________________________________________________ 101
Figure 49 ____________________________________________________________ 102
4
Figure 50 ____________________________________________________________ 103
Figure 51 ____________________________________________________________ 104
Figure 52 ____________________________________________________________ 105
Figure 53 ____________________________________________________________ 106
Figure 54 ____________________________________________________________ 107
Figure 55 ____________________________________________________________ 108
Figure 56 ____________________________________________________________ 108
Figure 57 ____________________________________________________________ 109
Figure 58: Options Dialog Box – selecting individual user ____________________________ 119
Figure 59: Individual User_____________________________________________________ 119
Figure 60: Options – selecting multiple users ______________________________________ 120
Figure 61: Enter User List Location _____________________________________________ 120
Figure 62: Invalid Users Log file – no invalid users in user list ________________________ 121
Figure 63: Invalid Users Log file –invalid users found in user list ______________________ 121
Figure 64: Cancel box if invalid users were found in user list _________________________ 122
Figure 65: Post-Populus Permission Cleanup ______________________________________ 123
Figure 66: Remove Inherited Permissions _________________________________________ 124
Figure 67: Reset Permissions on all child objects ___________________________________ 124
Figure 68: Permission Reset Verification _________________________________________ 125
Figure 69: Closing the Security Window __________________________________________ 125
5
Introduction
The goal of the Anytime Anywhere component of the AIS/W2k Pilot Project was
to explore technologies that decrease the user’s downtime during system failures and to
increase the user’s data accessibility, regardless of the user’s location and network access.
To accomplish this goal, it was necessary to differentiate between user data and system
data. After this was done, the Anytime Anywhere component can be divided into two
sections, one dealing with the system and disaster recovery, and one dealing with user
data storage and accessibility.
For the computer, “Lazarus” and a “Universal Disk Image (UDI)” were developed
to enable a user or computer technician to quickly restore a default Windows 2000 Pro
installation to a disabled computer. “SnapShot” was developed as a pre-emptive disaster
recovery tool to be initiated by the user.
For the user data, two Microsoft Windows 2000 technologies were implemented,
Roaming Profiles and Folder Redirection. This allowed for the transparent storing of the
user’s desktop profile and data on a network drive and making them available regardless
of the computer used to log into the domain.
This paper will give a detailed account of the implementation of these
technologies as well as detail the other programs and procedures that were developed
during the testing process to help automate the administration of the technologies.
6
System and Disaster Recovery
7
Universal Disk Image:
Purpose:
One of the purposes of the Anytime Anywhere component was to provide
a method to quickly restore a computer to a fresh, default Windows 2000
installation to aid in new computer rollout and disaster recovery. To this end, we
decided to make a default Windows 2000 Pro install with SP1 and the latest OS
hot-fixes, then, using imaging software, save an image of that install for use with
new computer deployment and disaster recovery/reinstallation. This image is the
Universal Disk Image (UDI).
UDI Creation Procedure:
Partitions:
For the deployment of the UDI to work, the computer’s hard drive must be
properly partitioned (See Figure 1). I booted off a standard Win98 Startup Disk
and used fdisk.exe to create the partitions I needed. I then again booted off the
Win98 Startup Disk and formatted the C: drive in FAT 16.
o Partition 1
 C: Drive
 FAT
 Partition Label “BOOT”
 102MB
 Contains
 DOS installation
 Windows 2000 boot files
o BOOT.INI
o BOOTSECT.DOS
o IO.SYS
o NTDETECT.COM
o NTLDR
 Other programs used in the Pilot Project.
o Partition 2
 D: Drive
 NTFS
 Approximately 45% of the size of the hard drive
 Partition Label “OS”
 Contains
 Windows 2000 installation
 Partition primarily accessed by user
 NTFS mount point is used to mount D:\I386 to the I386 partition
 The registry will be edited by the ReMounter utility to
point the system to the D:\I386 directory for the Windows
2000 Installation files.
8
o Partition 3
 No Drive Letter
 Invisible to user
 FAT32
 399MB
 Partition Label “I386”
 Contains
 Windows 2000 installation files
o This eliminates the need for the Windows 2000 Pro
CD when updating drivers or adding other
Windows 2000 components
 Mounted via NTFS mount points (in Disk Management) to
D:\I386. When booting to DOS, visible as the D: drive.
o Partition 4
 No Drive Letter
 Invisible to user
 FAT32
 Remaineder of the hard drive
 Partition Label “STORAGE”
 Contains
 Ghost executable for use with Lazarus and SnapShot
 UDI image to allow for disaster recovery
 Snapshot image and the SnapShot history file
o When SnapShot is run, a temporary NTFS mount
point to the STORAGE partition is created. This
mount point is closed after SnapShot is done.
 When booting to DOS, visible as the E: drive.
Initially, I manually set the size for the OS and the STORAGE partitions.
Command line switches for Ghost allows for the resizing of individual partitions
as the image is being loaded. Using these switches, I set the OS partition to be
45% of the total hard drive size and the STORAGE partition to use the remainder
of the hard drive space.
Figure 1: HARD DRIVE PARTITIONS
Drive Letter
C
D
Label
BOOT
OS
I386
STORAGE
Size
102MB
45% of HD
399MB
Remainder of HD
9
File System
FAT16
NTFS
FAT32
FAT32
DOS Installation:
After formatting the C: drive, I made it bootable by transferring the system files
from the floppy to the C: drive. I then copied the rest of the contents of the floppy
disk to the C: Drive and modified them for my purpose. After this, I was ready to
install Windows 2000.
Installing DOS to the C: Drive:
1. After C: Drive is formatted in FAT16, boot to Win98 Startup.
2. At the A prompt (“A:\>”) type (w/o quotes) “sys c:”
3. This command transfers the system files to the C: drive and makes it
bootable.
Modification of Win98 Startup Disk files:
When you boot to a Win98 Startup Disk, it creates a RAM Disk and
extracts the contents of ebd.cab to the RAM Disk. The ebd.cab file
contains the following tools:
ATTRIB.EXE
CHKDSK.EXE
DEBUG.EXE
EDIT.COM
EXT.EXE
EXTRACT.EXE
FORMAT.COM
HELP.BAT
MSCDEX.EXE
RESTART.COM
SCANDISK.EXE
SCANDISK.INI
SYS.COM
Because I wanted these files to be available, I manually extracted them
and placed them in the C:\EBD directory that I created.
I then modified the Autoexec.bat and Config.sys to remove the following
(See APPENDICES A, B, C, and D):
1. AUTOEXEC.BAT modifications (See APPENDICES A and
B)
a. Removed lines for RAM Disk Creation
b. Removed lines for EBD.CAB error checking and
extraction
2. CONFIG.SYS modifications (See APPENDICES C and D)
a. Modified the menu time for the CD Rom Driver
install to automatically enable the CD Rom drive
b. Removed the line referring to the RAM Drive
Other files on C Drive:
The C: Drive also contains a DF directory containing other programs used
in the Pilot Project. These programs are as follows:
10
1. “boot” directory – modified autoexec.bat and boot.ini files used by
SnapShot and Lazarus for booting into DOS and then back into
Windows 2000
2. “Lazarus” directory – Disaster Recovery tool (See Lazarus section)
3. “ReMounter” directory – Tool used to Reassign drive letters, populate
the STORAGE partition with Ghost and the SnapShot directories, and
configure the Installation Path to point to D: instead of the CD-ROM
Drive (See ReMounter section)
4. “SMS Launch” directory – SMS Client utility for connecting to SMS
Server
5. “SnapShot” directory – Pre-emptive Disaster Recovery tool (See
SnapShot section)
6. “sys” directory – Miscellaneous utilities used by several of the other
programs.
7. REP2???.BAT – 3 trouble shooting utilities for modifying the
autoexec.bat and boot.ini.
11
Windows 2000 Installation Procedure:
The Windows 2000 Pro installation procedure was fairly typical. Following is the
procedure I followed to install Windows 2000 and prepare it for Ghosting to
create the UDI.
1. Installed Windows 2000 Pro (SP1 integrated)
a. When prompted for installation partition, I selected the second
partition, set its size to 6000MB and the file format to NTFS.
b. When prompted for which components to install, I unselected all
but the following:
i. Index Service
1. I actually don’t think I selected this but it was
installed anyway
ii. Management and Monitoring ToolsSimple Network
Management Protocol
1. SNMP was installed initially for SMS but later it
was discovered that it wasn’t needed. Future
versions of the UDI will not have SNMP installed.
2. Set Administrator password to a non-blank password. SYSPREP requires
that the Administrator password be blank to run but for security purposes,
don’t make it blank yet.
3. Ran Daisy
4. Daisy downloaded and installed the latest OS hot-fixes and rebooted.
5. Formatted I386 and STORAGE directory in FAT32 and copied the
following folders/files to the partitions
a. Files copied to I386 partition
i. The contents of the I386 directory on the Windows 2000
Pro (w/ int. SP1) CD
ii. The files are copied but not the I386 folder itself
b. Files copied to the STORAGE partition
i. “Ghost” directory
1. “GHOST.EXE” (version 7.0)
ii. “SnapShot” directory
1. “Snap” directory
6. SYSPREP preparation
a. Create a “SYSPREP” directory at the root of the D: Drive
b. Copy SYSPREP and accompanying files (See SYSPREP section)
to D:\SYSPREP
12
SYSPREP:
I used SYSPREP v1.1 to remove the SID from the computer and prepare it for
Ghosting. Along with removing the SID, SYSPREP, using an answer file (See
APPENDIX E), greatly decreases the Hardware dependency of an image by
allowing for different Mass Storage Devices between the computer the image was
created on and the computer the image is to be loaded on.
Also, an MS Knowledge Base article (Article ID: Q271965) was found that
documents a procedure by which you are able to merge registry entries ahead of
time to support all IDE controllers natively supported by Windows 2000.
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q271965
I used Setup Manager from the Windows 2000 Server Resource Kit to generate a
SYSPREP.INF file. The SYSPREP.INF file is an answer file for SYSPREP.EXE
and is used for answer the questions to the Mini-Setup Wizard that runs after
running SYSPREP.EXE and restarting the computer. Setup Manager also created
a SYSPREP.BAT file that you can edit to add command line switches for the
SYSPREP.EXE program to run.
1. Boot into Safe Mode (an MS PSS support call regarding SYSPREP
verified that it is not necessary to boot into safe mode. Future UDI
Creations will not boot into safe mode here, but the initial UDI was.)
2. Open Device Manager
a. Show hidden devices by clicking on “View””Show hidden
devices”
b. Uninstall every device that is allowed
i. Start with “System Devices””PCI bus” to remove a
majority of devices initially
ii. After removing the “PCI bus”, a message might appear
stating that a new device has been found. Click “OK” and
continue uninstalling the rest of the devices.
iii. DO NOT restart the computer if prompted
c.
3. Running SYSPREP
a. Purpose
i. Removes computer SID and prepares for Ghosting
ii. Using a SYSPREP.INF file, allows difference in Mass
Storage Devices and for automation of the Mini-Setup
Wizard that appears after running SYSPREP and rebooting
b. Browse to “D:\SYSPREP\move_to_sysroot-sys32-drivers” and
copy the contents (atapi.sys, intelide.sys, pciide.sys, pciidex.sys) to
the “D:\Winnt\System32” directory.
c. Open D:\SYSPREP\mergeide.reg in Notepad and remove the
following lines:
13
d.
e.
f.
g.
i. The first line: ********* START COPY FROM HERE
*************
ii. The last line: ************ END COPY HERE
***************
iii. Make sure to remove the whole line including the carriage
return but leave an empty line at the end of the file.
iv. Save the file
Double-click on the “MERGEIDE.REG” (See APPENDIX F) file
to merge its contents into the registry
Open Command Prompt and browse to D:\SYSPREP
Run SYSPREP.BAT
i. This batch file runs SYSPREP with the –pnp switch that
forces Windows to do a legacy device detection and to reenumerate the Plug and Play devices on the destination
computer
SYSPREP should shut down the computer if no errors occur and
you are now ready to Ghost the computer
14
Creating the Images:
Two Ghost images are actually needed, one of just the whole hard drive
and one of the just the OS partition (the partition that contains the Windows 2000
install). The reason for this is that Ghost will not save the Master Boot Record
(MBR, the record of what OSes are installed and where) when just imaging a
partition. But, because the UDI will be updated periodically, we want the UDI to
just be of the OS partition. Also, having a full disk image, minus the OS
Partition, allows faster computer deployment because we can automate the disk
partitioning and formatting.
Here is the procedure I followed for creating the UDI and what is called
the FS Image (image containing the partitioned hard drive image, Windows 2000DOS dual boot MBR, DOS installation, the “DF” directory programs, and I386
Windows 2000 installations files).
After running SYSPREP and shutting down the computer but prior to
restarting it:
Creating the UDI OS partition image:
1. Run Ghost and save a “Partition Image” of the computer. This can be
done employing several methods
a. Install a second hard drive and ghost the original hard drive to
an image onto the second hard drive
b. Boot the initial computer from a networked enabled Ghost boot
disk and
i. Connect a second computer to the initial computer via a
crossover cable/private network and map a network
drive to the second computer. Use that mapped drive to
store the Partition Image.
ii. Run a Ghost Multicast Server and initiate the creation
of the Partition Image from the Multicast Server, saving
the Partition Image to the Multicast Server
c. Use Removable media to save the Partition Image
i. CD-RW
ii. Jaz
2. This partition image is the Universal Disk Image used to load
Windows 2000 on new systems and on systems needing disaster
recovery.
Creating the FS full disk image:
1. Run Ghost and save a “Disk Image” of the computer. This can be
done employing several methods that are described above in the
“Creating the UDI OS partition image” section.
2. Move the Disk Image created to a computer that has Ghost Explorer
installed.
3. Run Ghost Explorer and open up the Disk Image.
15
4. Delete the contents of the OS Partition. ***NOTE*** Delete just the
contents of the partition and not the partition itself.
5. Recompile the Disk Image in Ghost Explorer.
6. This disk image is the FS Image.
Loading the FS and UDI images:
The FS image only needs to be loaded on new computers. On
computers where disaster recovery is needed, the hard drive has already been
partitioned so only the UDI is needed to be loaded. Loading the images
involves booting to a DOS boot disk and running Ghost to load the specific
image with the proper Ghost command line switches.
To help automate this, I have developed a set of bootable CDs with
custom batch files that will run Ghost with the proper command line switches
to load the FS and UDI images. For new computers, first load the FS image
and then the UDI. For computers needing disaster recovery, load just the
UDI.
Instructions for loading images:
See APPENDIX G for detailed instructions on loading the FS and UDI
images using the deployment CDs. When performing Disaster Recovery, start
at step “IV” of the document to load only the UDI image.
16
Conflict Resolution:
In deciding on the partitioning above, many configurations were tried but
abandoned.
1. Hiding the C: Drive
We wanted to have Windows 2000 installed on the C: Drive
because that is what the users are familiar with but since DOS was
on the C drive it had to be formatted in FAT16, which was not
acceptable. I attempted to hide the C: drive but was not allowed by
Windows 2000 because it contained the system files necessary to
boot to Windows 2000. So, we decided to leave C: drive visible
and educate the user that the D: drive was his/her primary drive.
2. Creating a UDI with Windows 2000 Pro (w/int SP2)
I attempted to create a new UDI based on a Windows 2000 Pro
install that had Service Pack 2 slipstreamed (integrated) into the
installation files. I used the same SYSPREP answer file that I
previously used for the original UDI (that was based on a
Windows 2000 Pro w/int SP1 install) and followed the exact same
procedure as is listed in the UDI section. When running SYSPREP
on the install to prepare it for ghosting, I would receive the
following error message and SYSPREP would abort
SYSPREP Error:
An error occurred while trying to update your
registry.
Unable to continue.
I was able to determine that the error was due to an invalid entry in
the [SYSPREPMassStorage] section of the SYSPREP.INF answer
file. PSS suggested commenting out the entire section and adding
each entry back one at a time, attempting to run SYSPREP each
time to see if SYSPREP crashed. Doing this, I found that two lines
of the 156 entries were invalid. MS PSS wanted to close the case
there but I wanted them to answer why the two lines caused an
error in the SP2 install but not the SP1 install. MS PSS said that to
answer that it would require a great deal of research. I asked them
to answer it anyway. MS PSS called back two days later to say
that, even though the entries in the [SYSPREPMassStorage]
section were taken from the MS sample SYSPREP.INF, MS does
not support it and they closed the case. MS does not support any
modifications made to the Syprep.inf file that is generated by the
“Setup Manager” Resource Kit utility. (See MS PSS Call:
SYSPREP)
I created an image using the revised SYSPREP.INF file but every
attempt to load it on a computer other than the one the UDI was
created on caused the computer to hang at the blue screen
17
immediately prior to the Windows Login box appearing. This
error would occur even though the computer receiving the UDI
was identical to the computer the UDI was created on.
It was decided to just stick with the original UDI for the duration
of the Pilot Project.
18
LAZARUS
Purpose:
The concept behind Lazarus was to develop a technique to aid in new computer
deployment and disaster recovery, in respect to the other components of the AIS/W2k
Pilot Project.
To this end, using Winbatch, I developed a program that would automate the
loading of the UDI onto a computer. Lazarus is a program that is located on the user’s
computer and, when run, would reboot the computer into DOS and load the UDI
(Universal Disk Image) onto the D: (OS) partition. After the image has been loaded, the
computer is then rebooted back into Windows 2000 at which time the Windows 2000
Mini-Setup Wizard is run (because SYSPREP was used prior to the Ghosting of the
image) assigning the computer a new Security Identifier (SID).
Lazarus is actually two programs, “LAZ.EXE” (See APPENDIX H), which is run
while in Windows 2000, and “RUS.BAT”, which runs after the computer has booted into
DOS. The Windows component, “LAZ.EXE”, merely informs the user that the computer
will be rebooted and modifies the “BOOT.INI” and “AUTOEXEC.BAT” files to boot
into DOS and execute “RUS.BAT”. The user interface with “LAZ.EXE” is simply a
message box informing the user that computer will be rebooted then a system message
box counting down to the restart. “RUS.BAT” is executed by the “AUTOEXEC.BAT”
file when DOS is loaded. “RUS.BAT” modifies the “BOOT.INI” and
“AUTOEXEC.BAT” files to boot back into Windows 2000 at next reboot and executes
“GHOST.EXE” with the “RUSWITCH.TXT” (See APPENDIX I) command file.
The final version of Lazarus developed is v0.0.3. It is a simple program so not
much tweaking needed to be done from the initial version.
The executable and source code, along with the .CMP file (contains compiling
information for Winbatch) are included in the “Source” folder provided with this
documentation.
19
Lazarus Screenshots
Figure 2: Lazarus Windows interface
Figure 3: Lazarus System Shutdown
20
SNAPSHOT
Purpose:
SnapShot was not originally part of the Pilot Project. While explaining Lazarus at
an early Status Meeting, the concept of a tool that could allow the users to backup their
computer before making a system change was suggested. From this, SnapShot was
conceived.
SnapShot has become a pre-emptive disaster recovery tool that allows a user to
take a “snapshot” image of the D: (OS) prior to making any changes to the system
configuration, i.e., installing new hardware, installing a new software driver, etc. If
anything occurs that makes the computer unstable, SnapShot can be run again to reload
the snapshot to restore the computer to the state it was in prior to the configuration
change.
Like Lazarus, SnapShot is comprised of two programs: the Windows component,
“SNAPSHOT.EXE” (See APPENDIX J), and the DOS component, “SNAP.BAT” or
“SHOT.BAT” depending on whether SnapShot is taking or loading a “snapshot”. When
“SNAPSHOT.EXE” is executed, an informational message is displayed informing the
user the function of SnapShot. The user selects whether to take or load a snapshot.
“SNAPSHOT.EXE” then modifies the “BOOT.INI” and the “AUTOEXEC.BAT” files to
boot the computer into DOS and restarts the computer. After DOS loads, the
“AUTOEXEC.BAT” file executes either “SNAP.BAT” or “SHOT.BAT” which runs
Ghost and the accompanying command switch file (See APPENDICES K and L). The
.BAT file also modifies the “BOOT.INI” and “AUTOEXEC.BAT” to boot the computer
back into Windows 2000 after the snapshot is loaded and the computer is restarted.
SnapShot has been through many version updates. The original was very simple
and did not have much user intervention or error-checking. The latest version has an
Informational Message, error-checking, checks for previous snapshots (SnapShot
currently allows for only one snapshot), gives date of last snapshot, gives username of
last person to initiate SnapShot (last person to take or load a snapshot), and gives age of
last snapshot.
For SnapShot to be able to determine information such as, username and action of
last SnapShot user, and age of snapshot, a SnapShot History file, “SNAPSHOT.HIS”,
was added. This file is stored on the STORAGE partition, which is hidden from
Windows 2000. For SnapShot to be able to access it, it creates a temporary NTFS Mount
Point to the STORAGE partition, gathers the information needed from the
“SNAPSHOT.HIS” file, writes new information to the “SNAPSHOT.HIS” file, then
removes the mount point.
If the snapshot image is older than 7 days, the user is given a warning stating that
loading an old image could have disastrous effects. There are two reasons for this
warning. First, a lot can change on a user’s computer in 7 days and loading a snapshot
will overwrite any changes that have occurred, good or bad. Second, when a computer is
joined to a Domain, a Computer Account password is established between the computer
21
and the Domain Controller’s. This Computer Account password is changed
automatically every 7 days. The domain keeps a copy of the current password and the
immediate previous password in cases where the computer is not available at the time the
password is changed. If a computer is unavailable twice for two consecutive password
changes, then the computer will have to be removed from the domain and re-added
before it can access domain resources again. If a user loads a snapshot that is older than
3 weeks, the Computer Account password that the computer has will not match any of the
Computer Account passwords that the Domain Controller’s have for this computer.
The executable and source code, along with the .CMP file (contains compiling
information for Winbatch) are included in the “Source” folder provided with this
documentation.
22
SnapShot Screenshots
Figure 4: Informational Message box
Figure 5: SnapShot Selection Menu
23
Figure 6: Missing SnapShot History File
Figure 7: SnapShot Selection Menu (No History File)
Figure 8: No Previous SnapShot Activity (no SnapShot image or History File)
24
Figure 9: Loading a Snapshot image
Figure 10: No Snapshot available to load
Figure 11: Old Snapshot Warning
Figure 12: Invalid Snapshot Age (creation date of file differs from SnapShot history file)
25
Figure 13: Previous Snapshot Found when attempting to “take” a Snapshot
Figure 14: SnapShot Canceled
Figure 15: SnapShot Rebooting Warning
Figure 16: System Rebooting
26
REMOUNTER
Purpose:
ReMounter is a Winbatch program whose original purpose was for the automation
of reassigning the drive letters of a computer after the UDI has been loaded. Even though
the I386 and STORAGE partitions were hidden on the system that the UDI was created
on, after SYSPREP is run, all the drives become visible again. It became necessary to
again hide the I386 and STORAGE partitions and recreate the NTFS Mount Point for the
I386 partition to the D:\I386 directory. Also, since SYSPREP reset the SourcePath and
ServicePackSourcePath (registry keys determining where the computer looks for the OS
installation files when needed) back to the CD-Rom Drive, it became necessary to set
these registry keys to point to the D:\I386 directory again.
ReMounter automates these processes. The SYSPREP.INF, the SYSPREP
Answer file, executes ReMounter after the Mini-Setup Wizard is completed. For some
reason, SYSPREP sometimes fails to run ReMounter. It is easy to determine if
ReMounter has failed to run. Simply open My Computer and look for an I386 or
STORAGE partition. If ReMounter did fail to run, you can manually execute it at
C:\DF\ReMounter\Rmounter.exe.
Since the initial creation of ReMounter, I have added other configuration changes
that are needed on systems that have just received the UDI. The following are the
functions provided by ReMounter v1.2.1 (See APPENDIX M):
1. Hide the I386 and STORAGE partitions and reassign drive letters for the
remaining drives
2. Change the following registry keys for the source path of the OS install files
and Service Pack files found at
HKLM\Software\Microsoft\Windows\CurrentVersion\Setup
a. SourcePath – Value = D:
b. ServicePackSourcePath – Value = D:
3. Create Start Menu shortcuts for Lazarus and SnapShot in “D:\Documents and
Settings\All Users\Start Menu\Programs\Administrative Tools”
4. Create the needed directory structure and copy needed files to the STORAGE
partition
a. Create the following directories
i. Ghost
ii. SnapShot
1. Snap – located inside the SnapShot folder
b. Copy GHOST.EXE to the Ghost directory
Since ReMounter was created to run on the initial login after the UDI has been
loaded, it was created to run silently and has no user interface. It is not a utility that
should be used on a regular basis. ReMounter depends on having no partitions hidden for
it to run properly (after the UDI is loaded no drive letters are hidden). It enumerates the
GUIDs for each drive using the MS “MOUNTVOL.EXE” utility (See APPENDIX N)
and determines which partition is which based on the order the GUIDs are listed.
Lettered hard drive partitions (i.e. C:, D:, etc) are listed first so the I386 and STORAGE
27
partitions are always E: and F: respectively. If some of the partitions are not assigned
numbers, they will appear after the numbered drives and ReMounter will not work
properly. Error-checking has been written in for some of the other functions of
ReMounter, but because of the limitations of the “MOUNT.VOL” utility, none were able
to be added for this function.
The executable and source code, along with the .CMP file (contains compiling
information for Winbatch) are included in the “Source” folder provided with this
documentation.
28
User Data Storage and Accessibility
29
Roaming Profiles and Folder Redirection
Purpose:
The concept of “Anytime Anywhere” refers to the ability of a user to access
his/her data regardless of what computer s/he is on or the status of network availability.
This would allow a user to work on documents in the office or at home, connected to the
Internet/Intranet or disconnected. To this end, two Microsoft technologies were used:
Roaming Profiles and Folder Redirection.
Roaming Profiles
Roaming Profiles allow a user to log into any computer in his/her domain or
trusted domain and receive the same desktop environment as they would from their own
computer. This includes the Desktop Wallpaper, Favorites, certain Application Data, My
Documents, User’s Desktop Folder, etc. The benefits of Roaming Profiles are that no
matter which computer you are working on, the environment is the same and your files
will be available to you.
With Roaming Profiles, a user’s profile is saved on a network drive (for the Pilot,
we used a Dell PowerVault 735N Network Attached Storage device, NAS) and is
accessed and downloaded when a user logs into a computer. When a user logs in to a
computer for the first time, his User Profile is downloaded to that computer. When s/he
finishes his/her work and logs off, any changes to his/her profile are saved back up to the
network location. If the network is unavailable when the user logs on, the user’s profile
will be loaded with a cached copy of the user profile (this only works if the user has
logged on to the computer previously when the computer was on the network; if not,
there is no cached profile to load). When the network becomes available again, a
synchronization of the network profile and the cached profile will take place.
One downside of Roaming Profiles is that the entire profile must be downloaded
at login and then uploaded at log off. Login and logoff times therefore increase. For
users with high speed connections, this will be barely noticeable. If the user has a large
number of files stored in his My Documents folder or on his/her Desktop, the time again
increases. Over a modem, this can cause the login/logout times to be very long.
Folder Redirection
To help alleviate this downside, we implemented Folder Redirection along with
Roaming Profiles. Folder Redirection allows for certain directories to be transparently
redirected to a network drive. To the user, it appears as if the folder is still on his/her
computer. Redirected folders look just like any other folder except that its contents are
located on a network drive.
The five folders that can be redirected are the user’s My Documents folder, My
Pictures folder, Desktop folder, Start Menu folder, and Application Data folder.
Redirected Folders are not downloaded to the user’s computer at login. Instead, the files
will be downloaded to the user’s computer as s/he accesses them. For the Pilot Project,
we elected to redirect just the user’s My Document and Desktop folders.
30
Folder Synchronization
Since the goal was to make the user’s files available to him/her, while on or off
the network, we also enabled Offline Stores, which using the Folder Synchronization
utility, allows a user to store cached copies of specified network files and folders to the
local computer. Like Roaming Profiles, if changes are made to a file while offline, when
the user gets back online, a Folder Synchronization takes place and uploads the changes
to the network files. In cases where there is a discrepancy between the network and the
local file during the Folder Synchronization (i.e., I work offline on a file at home on my
laptop, then come to work the next day and make different changes to the original file on
my desktop computer), the user will be prompted to either keep one file over the other or
to keep both files.
31
Anytime Anywhere Procedures:
For the Pilot Project, the user’s Roaming Profiles and Redirected Folders were
stored on a Dell PowerVault 735N Network Attached Storage Device (NAS) running
“Powered by Windows 2000” software. Since it is running Windows 2000 natively, I
was able to easily implement Windows 2000 technology, such as Disk Quota and NTFS
permissions.
Initially, this was to be tested on the NetApp NAS owned by the "General Use,
Research UNIX and Security" (GURUS) department as well, but several issues prevented
full testing (later tests have shown that the NetApp NAS, with the latest ONTap OS, is
capable of performing the same function that the Dell NAS performed in the Pilot).
I used a custom built utility named Populus, Windows 2000 Group Policy
Objects, and Windows 2000 Disk Quota, to setup users and configure the Roaming
Profiles and Folder Redirection.
Disk Quota
Windows 2000 Disk Quota allows me to restrict the amount of disk space a user
gets on a partition. Since I was given no indication of how much space should be
allotted, I randomly chose 500MB as the default quota limit. The quota limit can be
adjusted on a user by user basis but the initial quota is 500MB. The restriction is not on a
folder by folder basis, but rather on the user. User A gets 500MB of space anywhere on
the network share that he has been granted NTFS permissions. The pilot users were
granted permission only to their UserData\%UserName%\ folders.
Group Policy Object
To begin, I created a Windows 2000 Group Policy Object (GPO) that would be
applied to all users in the Test-Lab Organizational Unit (OU) located in the W2k-Pilot
Domain. This GPO allows me to make a blanket configuration change to multiple
computers without having to go to each computer and manually make the changes. This
GPO contains some basic computer configuration settings, but its main purpose is for
enabling the folder redirection on the “My Document” and individual user’s “Desktop”
folders, enabling Offline Stores for the redirected files, and configuring Folder
Synchronization for the redirected files. (See APPENDIX O)
I also created another GPO for use with laptop users. This GPO is a computer
GPO only. It is applied to all computers located in the “Laptop” OU of the Test-Lab
domain. This GPO contains configurations that enable “Slow Link” detection for
laptops. Windows 2000 allows a modem user to dial his/her internet connection when
he/she logs in. If this occurs and slow link detection is not enabled, then the computer
will try to download the user’s Profile, which could take a long time. With slow link
detection enabled, Windows 2000 will detect that the user’s connection is low speed and
instead load the user’s cached profile. See “Slow Link Policy” on the second following
page. (See APPENDIX P)
32
Roaming Profiles and Folder Redirection
User accounts were created for all the AIS/W2k Pilot Project participants. Each
account was configured to use Roaming Profiles and have a profile stored on the Dell
NAS, at \\tron.ais-pilot.w2k-pilot.vt.edu\UserData\Profiles\%username%\. The UserData
folder is the share folder on the NAS. The “Test-Lab User GP” GPO was also configured
so that each user’s “My Documents” and “Desktop” folder was located at the following
locations, respectively:
\\tron.ais-pilot.w2k-pilot.vt.edu\UserData\%username%\My Documents
\\tron.ais-pilot.w2k-pilot.vt.edu\UserData\%username%\Desktop.
Roaming Profiles consist of the following folders and files:
Application Data (MS Office personalization, Netscape bookmarks (at least 6.x),
Wallpaper, etc)
Cookies
Favorites
NetHood
PrintHood
Recent
SendTo
Templates
And the following “top-level” files (located in the root of the user’s profile folder)
NTUSER.DAT
NTUSER.DAT.LOG
NTUSER.INI
NTUSER.POL
When a member of the AIS-PILOT OU logs onto a computer in the forest, one of
two things happens. One, if it is the first time the user has logged onto a computer since
his/her account has been configured for roaming profiles, the user receives the default
profile configuration for that computer and the profile is copied to the user’s “Profile”
data folder located on the NAS and becomes the users roaming profile. Or two, after the
initial login and roaming profile creation, when the user logs onto a computer, the user’s
profile is downloaded to the computer and loaded for the user. When the user logs off,
any changes made to the profile are saved up to the NAS.
At each login, every part of the user’s profile is copied from the NAS to the
workstation and loaded. At every logoff, the profile on the local workstation
synchronizes with the copy on the NAS, i.e., if the user made any changes to the local
profile, it will get replicated up to the copy on the NAS.
Folder Redirection has been implemented for all users participating in the
AIS/W2k-Pilot. This feature changes the actual location of the user’s “My Documents”
folder and the user’s “Desktop” folder. Folder redirection lessens the time it takes to
complete the logon process and saves network bandwidth by downloading files located in
a user’s “My Document” and “Desktop” folders on a file-by-file basis, as the files are
33
needed. If Folder Redirection is implemented by itself, no synchronization is needed at
logoff because the user’s files are saved directly to the NAS. Implementing Folder
Redirection with Offline Stores, as we do, causes the Redirected Folders on the local
system to synchronize with the folders on the NAS. This allows the user to access his/her
files even when the computer is off the network and the NAS is unavailable. When the
network becomes available again, a File Synchronization is triggered (by logging in,
logging out, or initiated by the user) and any changes are uploaded to the NAS. If there is
a discrepancy between the network version of a file and the local version, then the user is
given the option to save one or the other, or both files.
Security Concerns:
By default, when a user that has been configured for Roaming Profiles and Folder
Redirection logs in for the first time, the user’s Profile folder and redirected folders will
be created on the network share. When this was initially tested, it was determined that
the NTFS Security on the user’s folders was not strict enough. A user would be able to
not only see his/her share but also be able to enumerate the parent folder of every user,
thus giving a full list of usernames.
To prevent this, the NTFS permissions were set as shown in Figure 17. The
Authenticated Users group had “Traverse Folder / Execute File” permission on the
UserData folder (the share folder) but no other permissions and then each individual user
had full permissions on his/her %username% folder. SYSTEM had full control over all
folders and files. To be able to set the NTFS permissions to the security level desired, the
user folders had to be created and permissions had to be set manually. Later, due to
conflicts with software (WinZip, Microsoft Office XP, and MS Access, see “Conflict
Resolutions”), the permissions had to be reduced back to the original NTFS permissions
(See Figure 17).
Figure 17: “UserData” Permissions
Share Permissions
E:\UserData – Everyone = Full (default share permissions)
NTFS Permissions
E:\UserData – [Permissions not propagated to child files/folders]
Domain Admins = “Full”
SYSTEM = “Full”
Authenticated User’s = “Traverse Folder / Execute File”
“List Folder / Read Data”
“Read Attributes”
“Read Extended Attributes”
E:\UserData\%username% - [Permissions propagated to child files/folders]
SYSTEM = “Full”
%Username% = “Full”
34
Conflict Resolution
WinZip 8.0:
When users attempted to extract a zipped file to a redirected folder, they would
receive an error that the location could not be found. I corresponded with WinZip Tech
Support via e-mail but received no useful information from them. I began trying
different NTFS permission configurations and found that, for WinZip to work, the
Authenticated User’s group had to have “List Folder / Read Data” permission on the
UserData folder as well as the “Traverse Folder / Execute File” permission. WinZip
Tech Support could not tell me why this was necessary.
Microsoft Office XP: (See MS PSS Call: Office XP)
When users attempted to save an Office document, an error would occur and the
Office program would exit, causing a loss of data. After some testing, it was determined
that the real issue was not with saving a document but with the Office product’s ability to
access the default “Document” location. A Microsoft Paid Support Services case was
opened. While waiting to hear back from MS on this case, I discovered that the NTFS
permissions on the parent share (UserData folder) was too strict. Along with the original
NTFS permissions, it was necessary to add the “Read Attributes” and the “Read
Extended Attributes” permissions. The MS PSS call was left open until they could
explain why the parent folder (UserData) needed the added permissions even when the
permissions were not propagated to the child files/folders. After a month, and no
progress from MS PSS, we closed the case.
MS Access:
A user would receive an error when attempting to open an Access Database from
a redirected folder. After some research, I came across the following MS KB Article:
“An Intranet Site Is Identified as an Internet Site When You Use an FQDN or IP Address
(Q303650)”. Because a “Fully Qualified Domain Name”, FQDN, is used for the
Redirected Folder locations, Windows 2000 treats it as an Internet site. To be able to
open an Access Database over an Internet site, a modification is needed in the IE Internet
Security Zone settings. To allow users to open Access databases located in redirected
folders, the FQDN of the NAS needed to be added to the Trusted Sites of each computer.
I was able to add this change to the “Test-Lab User GP” GPO instead of having to
manually make the change on all the Test-Pilot computers.
35
POPULUS
Purpose:
When the AIS/W2k-Pilot Project began, user accounts and user data folders had
to be created for all Pilot participants. For each user, it was necessary to enable Roaming
Profiles and to manually set NTFS permissions on the user data folders. As the Pilot
progressed, more users were added to broaden the testing. When we were nearing the
completion of this testing phase, the W2k-Pilot AD Forest was reinstalled to eliminate
anything that was implemented and then rejected in the first phase of testing. At this
point, a method for automating the creation of user accounts and user data folders (and
subsequent NTFS Permissions on said folders) was explored. The solution was found in
the combination of the “Add Users” Windows 2000 Server Resource Kit utility and an inhouse utility called “Populus”.
Creating User Accounts:
The Windows 2000 Server Resource Kit has a utility called “Add Users”
(ADDUSERS.EXE) that allows an administrator to batch create/delete/edit user accounts
and local and global groups based on a comma-delimited file (like the .CSV files used in
Excel). When the W2k-Pilot AD Forest was reinstalled, I used the “Add Users” utility
and a .CSV file (See APPENDIX Q and R) to batch create the 54 user accounts needed as
well as enabling Roaming Profiles for each account.
For more information regarding the “Add Users” (ADDUSERS.EXE) Windows
2000 Resource Kit Utility, reference the following website:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q199878
Creating Users’ Data Folders:
Each user needed a location on the Dell PowerVault 735N Network Applied
Storage (NAS) Device to store his/her roaming profile and redirected folders (“My
Document” and “Desktop” folders). If the folders for both the Roaming Profile and the
Redirected Files do not exist, they are created when the user logs on (for example, the
folders do not exist for users that have never logged onto the domain before). For the
Pilot, the default NTFS permissions applied to the folders were too lenient so permissions
would need to be modified.
Instead of having the folders and NTFS permissions automatically generated and
then modifying the permissions on a user-by-user basis, it is simpler for administrative
purposes to manually create the folders and manually set the proper NTFS permissions.
It is simpler because the permissions are set properly initially. If the NTFS permissions
were automatically generated and then modified on a user-by-user basis, there is the
possibility that a set of folders could be missed and the NTFS permissions not modified
to the more secure configuration.
Whereas it is easier for administrative purposes to manually create the folders and
set the NTFS permissions, it is still a tedious job that would be very susceptible to user
error when being performed. For this reason, I developed a Winbatch program called
Populus (See APPENDIX S) to create user data folders and set the proper NTFS
36
permissions needed for each. Used in conjunction with the “Add Users” Windows 2000
Resource Kit utility, I was able to effectively automate both the creation of user accounts
and the creation of said user’s data folders (and NTFS permissions) on the NAS. I have
also written up the procedure I followed when adding new users to the AIS/W2k-Pilot
(See APPENDIX T).
The executable and source code, along with the .CMP file (contains compiling
information for Winbatch) are included in the “Source” folder provided with this
documentation.
37
APPENDICES
38
Appendix A: DEFAULT AUTOEXEC.BAT
BOLD – Removed lines
ITALIC– Modified lines
@ECHO OFF
set EXPAND=YES
SET DIRCMD=/O:N
set LglDrv=27 * 26 Z 25 Y 24 X 23 W 22 V 21 U 20 T 19 S 18 R 17 Q 16 P 15
set LglDrv=%LglDrv% O 14 N 13 M 12 L 11 K 10 J 9 I 8 H 7 G 6 F 5 E 4 D 3
C
cls
call setramd.bat %LglDrv%
set temp=c:\
set tmp=c:\
path=%RAMD%:\;a:\;z:\
copy command.com %RAMD%:\ > NUL
set comspec=%RAMD%:\command.com
copy extract.exe %RAMD%:\ > NUL
copy readme.txt %RAMD%:\ > NUL
:ERROR
IF EXIST ebd.cab GOTO EXT
echo Please insert Windows 98 Startup Disk 2
echo.
pause
GOTO ERROR
:EXT
%RAMD%:\extract /y /e /l %RAMD%: ebd.cab > NUL
echo The diagnostic tools were successfully loaded to drive %RAMD%.
echo.
IF "%config%"=="NOCD" GOTO QUIT
IF "%config%"=="HELP" GOTO HELP
LH %ramd%:\MSCDEX.EXE /D:mscd001 /L:z
echo.
GOTO QUIT
:HELP
cls
call help.bat
echo Your computer will now restart and the startup menu will appear.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
restart.com
GOTO QUIT
:QUIT
echo To get help, type HELP and press ENTER.
echo.
rem clean up environment variables
set CDROM=
set LglDrv=
39
Appendix B: MODIFIED AUTOEXEC.BAT
@ECHO OFF
cls
set temp=c:\temp
set tmp=c:\temp
path=c:\;c:\ebd;%CDROM%:\
LH c:\ebd\MSCDEX.EXE /D:mscd001 /L:%CDROM%
40
Appendix C: DEFAULT CONFIG.SYS
BOLD – Removed lines
ITALIC – Modified lines
[menu]
menuitem=CD, Start computer with CD-ROM support.
menuitem=NOCD, Start computer without CD-ROM support.
menuitem=HELP, View the Help file.
menudefault=CD,30
menucolor=7,0
[CD]
device=himem.sys /testmem:off
device=oakcdrom.sys /D:mscd001
device=btdosm.sys
device=flashpt.sys
device=btcdrom.sys /D:mscd001
device=aspi2dos.sys
device=aspi8dos.sys
device=aspi4dos.sys
device=aspi8u2.sys
device=aspicd.sys /D:mscd001
[NOCD]
device=himem.sys /testmem:off
[HELP]
device=himem.sys /testmem:off
[COMMON]
files=10
buffers=10
dos=high,umb
stacks=9,256
devicehigh=ramdrive.sys /E 2048
lastdrive=z
41
Appendix D: MODIFIED CONFIG.SYS
[menu]
menuitem=CD, Start computer with CD-ROM support.
menuitem=NOCD, Start computer without CD-ROM support.
menuitem=HELP, View the Help file.
menudefault=CD,0
menucolor=7,0
[CD]
device=himem.sys /testmem:off
device=oakcdrom.sys /D:mscd001
device=btdosm.sys
device=flashpt.sys
device=btcdrom.sys /D:mscd001
device=aspi2dos.sys
device=aspi8dos.sys
device=aspi4dos.sys
device=aspi8u2.sys
device=aspicd.sys /D:mscd001
[NOCD]
device=himem.sys /testmem:off
[HELP]
device=himem.sys /testmem:off
[COMMON]
files=10
buffers=10
dos=high,umb
stacks=9,256
lastdrive=z
42
Appendix E: “SYSPREP.INF”
;SetupMgrTag
[Unattended]
InstallFilesPath=D:\SYSPREP\i386
TargetPath=\WINNT
[GuiUnattended]
OEMSkipRegional=1
TimeZone=35
[UserData]
FullName="Va Tech"
OrgName="Va Tech"
[Display]
BitsPerPel=32
Xresolution=1024
YResolution=768
Vrefresh=75
[Identification]
JoinWorkgroup=WORKGROUP
[Networking]
InstallDefaultComponents=Yes
[SYSPREPMassStorage]
PCMCIA\*PNP0600=%systemroot%\inf\mshdc.inf
PCMCIA\KME-KXLC005-A99E=%systemroot%\inf\mshdc.inf
PCMCIA\_-NinjaATA--3768=%systemroot%\inf\mshdc.inf
PCMCIA\FUJITSU-IDE-PC_CARD-DDF2=%systemroot%\inf\mshdc.inf
*AZT0502=%systemroot%\inf\mshdc.inf
PCI\CC_0101=%systemroot%\inf\mshdc.inf
PCI\VEN_10B9&DEV_5215=%systemroot%\inf\mshdc.inf
PCI\VEN_10B9&DEV_5219=%systemroot%\inf\mshdc.inf
PCI\VEN_10B9&DEV_5229=%systemroot%\inf\mshdc.inf
PCI\VEN_1097&DEV_0038=%systemroot%\inf\mshdc.inf
PCI\VEN_1095&DEV_0640=%systemroot%\inf\mshdc.inf
PCI\VEN_1095&DEV_0646=%systemroot%\inf\mshdc.inf
PCI\VEN_0E11&DEV_AE33=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_1222=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_1230=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_7010=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_7111=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_2411=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_2421=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_2441=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_244A=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_244B=%systemroot%\inf\mshdc.inf
PCI\VEN_8086&DEV_7199=%systemroot%\inf\mshdc.inf
PCI\VEN_1042&DEV_1000=%systemroot%\inf\mshdc.inf
PCI\VEN_1039&DEV_0601=%systemroot%\inf\mshdc.inf
PCI\VEN_1039&DEV_5513=%systemroot%\inf\mshdc.inf
43
PCI\VEN_10AD&DEV_0001=%systemroot%\inf\mshdc.inf
PCI\VEN_10AD&DEV_0150=%systemroot%\inf\mshdc.inf
PCI\VEN_105A&DEV_4D33=%systemroot%\inf\mshdc.inf
PCI\VEN_1106&DEV_0571=%systemroot%\inf\mshdc.inf
*ADP1540=%systemroot%\inf\scsi.inf
*ADP1542=%systemroot%\inf\scsi.inf
*ADP4215=%systemroot%\inf\scsi.inf
DETECTEDIsa\aha154x=%systemroot%\inf\scsi.inf
SPARROW_SCSI=%systemroot%\inf\scsi.inf
DETECTED\sparrow=%systemroot%\inf\scsi.inf
*ADP1502=%systemroot%\inf\scsi.inf
*ADP1505=%systemroot%\inf\scsi.inf
*ADP1510=%systemroot%\inf\scsi.inf
*ADP1512=%systemroot%\inf\scsi.inf
*ADP1515=%systemroot%\inf\scsi.inf
*ADP1520=%systemroot%\inf\scsi.inf
*ADP1522=%systemroot%\inf\scsi.inf
*ADP3015=%systemroot%\inf\scsi.inf
*ADP3215=%systemroot%\inf\scsi.inf
*ADP6360=%systemroot%\inf\scsi.inf
*ADP6370=%systemroot%\inf\scsi.inf
PCMCIA\Adaptec__Inc.-APA-1460_SCSI_Host_Adapter-BE89=%systemroot%\inf\scsi.inf
PCMCIA\Adaptec__Inc.-APA-1460_SCSI_Host_Adapter-B67E=%systemroot%\inf\scsi.inf
PCMCIA\Adaptec__Inc.-APA-1460_SCSI_Host_Adapter-6F71=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5075=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5175=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5275=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5375=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5475=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5575=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5675=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5775=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5078=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5178=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5278=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5378=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5478=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5578=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5678=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_5778=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7860=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6078=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6178=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6278=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6378=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6478=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6578=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6778=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7078=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7178=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7278=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7478=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7578=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7678=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7778=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_8078=%systemroot%\inf\scsi.inf
44
PCI\VEN_9004&DEV_8178=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_8278=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_8478=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_8578=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_8678=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_8778=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_8878=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7891=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7892=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7895=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7896=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_7897=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_3B78=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_EC78=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6075=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_6075&SUBSYS_75609004=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_3860=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_0010=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_0020=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_0030=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_001F=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_002F=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_003F=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_0050=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_0051=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_005F=%systemroot%\inf\scsi.inf
*FDC0000=%systemroot%\inf\scsi.inf
DETECTEDPci\Fd16_700=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_00CF=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_00C0=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_008F=%systemroot%\inf\scsi.inf
PCI\VEN_9005&DEV_0080=%systemroot%\inf\scsi.inf
PCI\VEN_10CD&DEV_2300=%systemroot%\inf\scsi.inf
PCI\VEN_10CD&DEV_1100=%systemroot%\inf\scsi.inf
PCI\VEN_10CD&DEV_1200=%systemroot%\inf\scsi.inf
PCI\VEN_10CD&DEV_1300=%systemroot%\inf\scsi.inf
PCMCIA\AdvanSys_-PCMCIA_Ultra_SCSI_ABP460-25c7=%systemroot%\inf\scsi.inf
PCI\VEN_10CD&DEV_1300&SUBSYS_133010CD=%systemroot%\inf\scsi.inf
PCI\VEN_1022&DEV_2020=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_0438101E=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_11121111=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_10C6103C=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_0466101E=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_11111111=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_10C7103C=%systemroot%\inf\scsi.inf
PCI\VEN_101E&DEV_9060=%systemroot%\inf\scsi.inf
PCI\VEN_101E&DEV_9010=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_03A2113C=%systemroot%\inf\scsi.inf
BUSLOGIC_SCSI=%systemroot%\inf\scsi.inf
DETECTED\buslogic=%systemroot%\inf\scsi.inf
*BUS0042=%systemroot%\inf\scsi.inf
MF\EISA_BUS4201_DEV0=%systemroot%\inf\scsi.inf
PCI\VEN_104B&DEV_1040=%systemroot%\inf\scsi.inf
FLASHPNT_SCSI=%systemroot%\inf\scsi.inf
PCI\VEN_104B&DEV_8130=%systemroot%\inf\scsi.inf
CPQARRAY_SCSI=%systemroot%\inf\scsi.inf
45
PCI\VEN_0E11&DEV_AE10=%systemroot%\inf\scsi.inf
*CPQ4410=%systemroot%\inf\scsi.inf
*CPQ4411=%systemroot%\inf\scsi.inf
CPQFWS2E_SCSI=%systemroot%\inf\scsi.inf
PCI\VEN_0E11&DEV_A0EC=%systemroot%\inf\scsi.inf
CPQFCALM_SCSI=%systemroot%\inf\scsi.inf
*CPQFD17=%systemroot%\inf\scsi.inf
DETECTED\cpqarray=%systemroot%\inf\scsi.inf
DETECTED\cpqfcalm=%systemroot%\inf\scsi.inf
DETECTED\cpqfws2e=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_008F=%systemroot%\inf\scsi.inf
PCI\VEN_10DF&DEV_1AE5=%systemroot%\inf\scsi.inf
PCI\VEN_10DF&DEV_f700=%systemroot%\inf\scsi.inf
PCI\VEN_10DF&DEV_f800=%systemroot%\inf\scsi.inf
FD16_700_SCSI=%systemroot%\inf\scsi.inf
PCMCIA\Future_Domain_Corporation-SCSI_PCMCIA_Credit_Card_Controller1BF8=%systemroot%\inf\scsi.inf
PCI\VEN_1036&DEV_0000=%systemroot%\inf\scsi.inf
DETECTED\fd16_700=%systemroot%\inf\scsi.inf
GEN_SCSIADAPTER=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_10CC103C=%systemroot%\inf\scsi.inf
PCI\VEN_8086&DEV_1960&SUBSYS_10CD103C=%systemroot%\inf\scsi.inf
PCI\VEN_1014&DEV_002E=%systemroot%\inf\scsi.inf
PCMCIA\IBM-PCMCIA_PorTable_CD-ROM_Drive-84E3=%systemroot%\inf\scsi.inf
PCMCIA\IBM-PCMCIA_CD-ROM_DRIVE_CD-400-5AFA=%systemroot%\inf\scsi.inf
PCMCIA\IBM-PCMCIA_PorTable_CD-ROM_Drive-84E2=%systemroot%\inf\scsi.inf
PCI\VEN_1101&DEV_9500=%systemroot%\inf\scsi.inf
PCI\VEN_1101&DEV_9400=%systemroot%\inf\scsi.inf
PCI\VEN_1101&DEV_9401=%systemroot%\inf\scsi.inf
PCI\VEN_1101&DEV_134A=%systemroot%\inf\scsi.inf
PCI\VEN_1101&DEV_0002=%systemroot%\inf\scsi.inf
PCI\VEN_9004&DEV_1160=%systemroot%\inf\scsi.inf
PCI\VEN_1069&DEV_0001=%systemroot%\inf\scsi.inf
PCI\VEN_1069&DEV_0002=%systemroot%\inf\scsi.inf
PCI\VEN_1069&DEV_0010=%systemroot%\inf\scsi.inf
PCI\VEN_1011&DEV_1065&SUBSYS_00201069=%systemroot%\inf\scsi.inf
PCI\VEN_1069&DEV_BA55=%systemroot%\inf\scsi.inf
DETECTED\dac960nt=%systemroot%\inf\scsi.inf
NCRC710_SCSI=%systemroot%\inf\scsi.inf
DETECTED\ncrc710=%systemroot%\inf\scsi.inf
PCI\VEN_1077&DEV_1020=%systemroot%\inf\scsi.inf
PCI\VEN_1077&DEV_2100&SUBSYS_00011077=%systemroot%\inf\scsi.inf
PCI\VEN_1077&DEV_1240=%systemroot%\inf\scsi.inf
PCI\VEN_1077&DEV_1080=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_0001=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_0002=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_0003=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_0004=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_0005=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_0006=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_000B=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_000C=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_000D=%systemroot%\inf\scsi.inf
PCI\VEN_1000&DEV_000F=%systemroot%\inf\scsi.inf
PCI\VEN_105A&DEV_4D38=%systemroot%\inf\scsi.inf
46
[Branding]
BrandIEUsingUnattended=Yes
[Proxy]
Proxy_Enable=0
Use_Same_Proxy=0
[GuiRunOnce]
Command0=c:\DF\ReMounter\rmounter.exe
47
Appendix F: “Mergeide.reg”
********* START COPY FROM HERE *************
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\prim
ary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\seco
ndary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*pnp
0600]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*azt0
502]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\gend
isk]
"ClassGUID"="{4D36E967-E325-11CE-BFC1-08002BE10318}"
"Service"="disk"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#c
c_0101]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_0e11&dev_ae33]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_1039&dev_0601]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_1039&dev_5513]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_1042&dev_1000]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
48
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_105a&dev_4d33]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_1095&dev_0640]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_1095&dev_0646]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_1097&dev_0038]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_10ad&dev_0001]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_10ad&dev_0150]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_10b9&dev_5215]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_10b9&dev_5219]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_10b9&dev_5229]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_1106&dev_0571]
"Service"="pciide"
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_8086&dev_1222]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
49
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_8086&dev_1230]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_8086&dev_2411]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_8086&dev_2421]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_8086&dev_7010]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_8086&dev_7111]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#
ven_8086&dev_7199]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
;Add driver for Atapi (requires atapi.sys in drivers directory)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi]
"ErrorControl"=dword:00000001
"Group"="SCSI miniport"
"Start"=dword:00000000
"Tag"=dword:00000019
"Type"=dword:00000001
"DisplayName"="Standard IDE/ESDI Hard Disk Controller"
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,61,00,74,00,61,00,70,00,69,00,2e,\
00,73,00,79,00,73,00,00,00
;Add driver for intelide (requires intelide.sys in drivers directory)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IntelIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000004
"Type"=dword:00000001
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6e,00,74,00,65,00,6c,00,69,\
00,64,00,65,00,2e,00,73,00,79,00,73,00,00,00
50
;Add driver for pciide (requires pciide.sys and pciidex.sys in drivers directory)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PCIIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000003
"Type"=dword:00000001
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,70,00,63,00,69,00,69,00,64,00,65,\
00,2e,00,73,00,79,00,73,00,00,00
************ END COPY HERE ***************
51
Appendix G: AIS/W2K PILOT PROJECT CONFIGURATION DEPLOYMENT
PROCEDURE
v1.0
011129
***NOTE*** It is possible that there are multiple CDs for the deployment of the AIS/W2k Pilot Project System
Configurations. This is due to the fact that the File Structure image (FS), which includes the Windows 2000
Installation files (I386 files) can cause the data to exceed that of a normal, high-capaciy (700MB) CD. If this occurs,
CD 1 will be labled the FS CD for File Structure CD and CD 2 will be the UDI CD for Universal Disk Image CD.
For the most part the instructions for single-cd installs and multiple-cd installs will be the same. If the instructions
differ for a particular step, the single-CD instructions will be listed as normal, followed by the multiple-CD instructions
(MCD) enclosed in brackets, "[]", and and between the following tags, <MCD>instructions</MCD>.
CONTENTS OF CD(s):
"BootDisk.exe" Creates UDI BootDisk if the computer can't "Boot to CD"
"fs.bat" Batch file to load the FS Image ("w2kfs.gho") using the switches in "fswtich.txt"
"fswitch.txt" File containing the batch command line switches for loading the FS Image
"ghost.exe" "Disk Imaging Software", used to load the images
"udi.bat" Batch file to load the UDI ("udi.gho") using the switches in "udisw.txt"
"udi.gho" UDI (Universal Disk Image) file
"udisw.txt" File containing the batch command line switches for loading the UDI
"W2k Deployment Procedures.txt" Instructions for installing the AIS/W2k Pilot Project Configuration
"w2kfs.gho" FS Image
"QUICK-INSTALLATION" INSTRUCTIONS (SEE BELOW FOR DETAILED-INSTALLATION
INSTRUCTIONS):
I. Power on computer and boot to CD (or to the UDI BootDisk you created. See the Detailed-Installation Instructions
for how to create the UDI BootDisk.)
[<MCD>Boot off of the FS CD (CD 1)</MCD>]
II. Change to DOS prompt to CD-ROM drive letter, should be Z:.
type following at "C:\>":
z: <enter>
III. Load the "File System" image by running the fs.bat file
type the following at Z:\>:
fs.bat
IV. After the "File System" image has been loaded the computer will reboot. Allow it to boot to the CD again.
[<MCD>Boot off of the UDI CD (CD 2)</MCD>]
V. Change to DOS prompt to CD-ROM drive letter, should be Z:.
type following at "C:\>":
z: <enter>
52
VI. Load the "UDI" image by running the udi.bat file
type the following at the Z:\>:
udi.bat
VII. After the "UDI" image has been loaded the computer will reboot. Remove the CD from the CD Drive and allow
the computer to boot to the hard drive
VIII. Windows 2000 will start up and the Mini-Setup Wizard should begin.
The Mini-Setup Wizard should prompt you for the following
1) Agreement to MS EULA (License agreement)
2) COMPUTER NAME and Administrator Password
3) Prompt to reboot after Mini-Setup Wizard is complete
4) At first login after loading the UDI, there might be an error box that appears stating that
"D:\SYSPREP" could not be found. Click "OK" and ignore.
IX. After completing the Mini-Setup Wizard and rebooting, there are 4 more steps that need to be completed to finish
the setup.
1) Configure the Network Properties
2) Add the computer to the test-lab.w2k-pilot.vt.edu domain
3) Install the SMS Client
a) Run SMSMan.exe located at c:\df\SMSLaunch\SMSMan.exe
b) When prompted for the "Select a Systems Management Installation Option", choose to "Specify
installation Location" and enter "yori" (without the quotes)
c) Allow setup to finish, keeping the default settings.
4) If this is on of the TEST-LAB-?? computers, add the associated admin user (i.e. orient_admin for the
Orientation's lab computer) to the local administrators group.
--------------
[SEE THE TROUBLESHOOTING SECTION FOR ADDITIONAL INFORMATION]
DETAILED-INSTALLATION INSTRUCTIONS:
I. Power on computer and boot to CD
You might need to enable the "Boot to CD" option in the BIOS. If after configuring the BIOS the computer
still won't boot from the CD, place the CD in an already booted up computer and run BootDisk.exe to create the UDI
BootDisk. You will need a blank floppy.
[<MCD>Boot off of the FS CD (CD 1).</MCD>]
II. Change to DOS prompt to CD-ROM drive letter, should be Z:.
type following at "C:\>":
z: <enter>
III. Load the "File System" image by running the fs.bat file
File System image = "Full Disk" image (as opposed to a "Single Partition" image) loaded using Ghost
command line switches to do the following:
1) Re-size and Re-partition the computer hard drive (It will only affect the Master hard drive if
multiple hard drives are present)
2) Install DOS 7.0 on the C: drive and the Master Boot Record (MBR) for dual-booting DOS and
Windows 2000
3) Copy the Windows 2000 (w/integrated SP1) I386 directory to the I386 partition
To Load the File System image:
type the following at Z:\>:
53
fs.bat
The fs.bat simply runs "z:\ghost.exe @z:\fswitch.txt", which executes ghost.exe and tells it to run
the command line switches found in the fswitch.txt file.
This will run Ghost and load an image that repartitions the hard drive into 4 partitions and sizes them
accordingly:
PARTITION #
DRIVE LETTER
PARTITION NAME
FILE SYSTEM
SIZE
1st Partition
C:
BOOT
FAT
100MB
2nd Partition
D:
OS
NTFS
45% of the hard drive size
3rd Partition
none
I386
FAT32
400MB
4th Partition
none
STORAGE
FAT32
remainder of hard drive
The BOOT and I386 partitions will have DOS 7.0 and the Windows 2000 installation files on them,
respectively. The OS and STORAGE partitions will be blank.
The Ghost Command Line switches used can be found in the fswitch.txt file. Following is the full contents
of the fswitch.txt file
###########################
-batch
-clone,mode=load,SRC=w2kfs.gho,DST=1,sze1=100M,sze2=45P,sze3=400M,sze4=V
-quiet
-fnf
-sure
-rb
###########################
EXPLANATION OF SWITCHES
1) -batch
Batch mode switch. Prevents abort messages waiting for user acknowledgment, and
removes user interaction prompts.
2) -clone,mode=load,SRC=w2kfs.gho,DST=1,sze1=100M,sze2=45P,sze3=400M,
sze4=V
Clone operation switch. This switch allows automation of Ghost operations. Used to
specify to Ghost how to size the partitions.
3) -quiet
Quiet mode. Disables status updates and user intervention.
4) -fnf
Turns off fingerprint creation.
5) -sure
Use the -sure switch in conjunction with -clone to avoid being prompted with the final
question ‘Proceed with disk clone - destination drive will be overwritten?’
6) -rb
Restarts after finishing a load or copy. After completing a load or copy operation, the
target computer must be restarted so that the operating system can load the new
disk/partition information.
IV. After the "File System" image has been loaded the computer will reboot. Allow it to boot to the CD again.
[<MCD>Boot off of the UDI CD (CD 2)</MCD>]
V. Change to DOS prompt to CD-ROM drive letter, should be Z:.
type following at "C:\>":
z: <enter>
VI. Load the "UDI" image by running the udi.bat file
UDI image = "Single Partition" loaded using Ghost command line switches to do the following
1) Load a Windows 2000 image to the 2nd partition (D:). The SYSPREP Utility was used in the
preparation of this image.
54
To Load the UDI image:
type the following at the Z:\>:
udi.bat
The udi.bat simply runs "z:\ghost.exe @z:\udisw.txt", which executes ghost.exe and tells it to run
the command line switches found in the udisw.txt file.
This will run Ghost and load a "Single Partition" image which contains a freshly sypreped Windows 2000,
meaning that at the next boot up the Windows 2000 Mini-Setup Wizard will run, generating a new SID for the
computer, as if it were a new install.
The Ghost Command Line switches used can be found in the udisw.txt file. Following is the full contents of
the udisw.txt file. All but the "-clone" line is identical to the contents of the fswitch.txt.
###########################
-batch
-clone,mode=pload,SRC=udi.gho:1,DST=1:2,sze3=V
-quiet
-fnf
-sure
-rb
###########################
SEE ABOVE FOR EXPLANATION OF SWITCHES
VII. After the "UDI" image has been loaded the computer will reboot. Remove the CD from the CD Drive and allow
the computer to boot to the hard drive
NOTE -- There is no danger if the computer again boots to the CD. Merely remove the CD and reboot the
computer again.
VIII. Windows 2000 will start up and the Mini-Setup Wizard should begin.
The Mini-Setup Wizard should prompt you for the following
1) Agreement to MS EULA (License agreement)
2) COMPUTER NAME and Administrator Password
3) Prompt to reboot after Mini-Setup Wizard is complete
4) At first login after loading the UDI, there might be an error box that appears stating that
"D:\SYSPREP" could not be found. Click "OK" and ignore. This error occurs because
SYSPREP was executed from Windows Explorer. After SYSPREP is executed and the
computer is rebooted, the SYSPREP folder is deleted. At first login, Windows trys to open
Windows Explorer up to D:\SYSPREP but it doesn't exist and therefore generates the error.
This error should be eliminated in future UDI versions by running SYSPREP from the
command line.
IX. After completing the Mini-Setup Wizard and rebooting, there are 4 more steps that need to be completed to finish
the setup.
1) Configure the Network Properties
2) Add the computer to the test-lab.w2k-pilot.vt.edu domain
3) Install the SMS Client
a) Run SMSMan.exe located at c:\df\SMSLaunch\SMSMan.exe
b) When prompted for the "Select a Systems Management Installation Option", choose to "Specify
installation Location" and enter "yori" (without the quotes)
c) Allow setup to finish, keeping the default settings.
4) If this is on of the TEST-LAB-?? computers, add the associated admin user (i.e. orient_admin for the
Orientation's lab computer) to the local administrators group.
--------------
[SEE THE TROUBLESHOOTING SECTION FOR ADDITIONAL INFORMATION]
TROUBLESHOOTING
55
It is also a good idea to make sure that the Rmounter program ran properly. Rmounter.exe is a utility that
runs at the initial login immediately following the loading of the UDI. The purpose of Rmounter.exe is to hide the I386
and STORAGE partitions, mount the I386 partition as an NTFS Mount Point to the D:\I386 directory, and re-assign
drive letters.
Below is a description of the partions and drive letter assignments before and after Rmounter.exe is executed.
Pre-rmounter.exe
BOOT (C:)
OS (D:)
I386 (E:)
STORAGE (F:)
[Remaining Removable drives--depending on system hardware, could be one or more
Zip, Jaz, or CD peripheral]
Post-rmounter.exe
BOOT (C:)
OS (D:)
[Remaining Removable drives--depending on system hardware, could be one or more
Zip, Jaz, or CD peripheral]
If after loading the UDI and logging in, the disk partitions are still in a "Pre-rmounter.exe" configuration, rerun the rmounter.exe.
-Run the Rmounter utility
1) Run rmounter.exe located at c:\df\ReMounter\rmounter.exe
2) Rmounter will run transparently and should only take a couple of seconds
a) if you currently have the Windows Explorer open, you should see the
changes take place
3) Verify the Rmounter has properly configured the disk partitions in the "Postrmounter.exe" configuration
4) If the the disk partitions are still in a "Pre-rmounter.exe" configuration, follow the
"Rules for Manually Setting the Disk Partion Configuration"
-------------Rules for Manually Setting the Disk Partion Configuration
1. Make sure to close any instances of "Windows Explorer" that are open so no drives will be "in use" as we
changed the configuration
2. Open the Disk Management Utility
a) Right-click on the "My Computer" icon on the Desktop and select "Manage" from the context
menu that appears
b) In the left window pane, left-click on "Computer Management (Local)"-->"Storage"-->"Disk
Management"
3. Remove the drive letter assignment for the I386 partition and mount it as a volume to the D:\I386 directory
A) Remove "I386" Drive Letter Assignment
1) In the bottom, right window pane, Right-click on the partion block labeled "I386 (E:)"
and select "Change Drive Letter and Path..." from the context menu that appears
2) In the "Change Drive Letter and Path for I386 (E:)" window that appears, left-click on
the "Remove" button
3) In the "Confirm" message that appears, left-click on the "Yes" button
4) Now the partion label should have chanbed from "I386 (E:)" to "I386"
B) Add I386 as Mount Volume
1) In the bottom, right window pane, Right-click on the partion block labeled "I386 (E:)"
and select "Change Drive Letter and Path..." from the context menu that appears
2) In the "Change Drive Letter and Path for I386 (E:)" window that appears, left-click on
the "Add" button
3) In the "Add New Drive Letter or Path" window that appears, left-click on the circle
next to "Mount in this NTFS Folder" and then left-click on the "Browse" button
4) In the "Browse for Drive Path", click on the "+" next to "D:\" in the bottom window to
expand the directory listing
56
5) IF AN "I386" DIRECTORY ALREADY DOES NOT EXIST, FOLLOW STEP 5)a)
IF AN "I386" DIRECTORY DOES EXIST, SKIP TO STEP 6
a) How to Create an "I386" Directory if it doesn't already exist
i) If an "I386" directory does not exist, left-click on "D:\" to highlight
it and then left-click on the "New Folder" button
ii) A new folder will appear in the directory listing highlighted and
ready to be renamed. Name it "I386"
6) Left-click on the "I386" directory to highlight it and then left-click on the "OK" button
a) If after highlighting the I386 directory, the "OK" button is still "grayed out"
then the I386 directory is not empty. You should delete the contents of the
D:\I386 directory and then continue with Step 6.
7) Left-click on the "OK" button in the "Add New Drive Letter or Path" window
C) Remove "STORAGE" Drive Letter
1) In the bottom, right window pane, Right-click on the partion block labeled
"STORAGE (F:)" and select "Change Drive Letter and Path..." from the context
menu that appears
2) In the "Change Drive Letter and Path for STORAGE (F:)" window that appears, leftclick on the "Remove" button
3) In the "Confirm" message that appears, left-click on the "Yes" button
4) Now the partion label should have chanbed from "STORAGE (F:)" to "STORAGE"
D) Change Drive Letter Assignment for existing removable media peripheral (i.e., Zip, Jaz, CD,
etc)
1) In the bottom, right window pane, down the left side is the listing of the different hard
drives and removable media installed on the computer. After any hard drives
(labeled as "Disk0", "Disk1", etc.), the removable media devices will be listed.
Repeat the following instructions for each removable media device starting from the
top of the list down.
a) Right-click on the removable device in the left side of the bottom, right
window and select "Change Drive Letter and Path..."
b) In the "Change Drive Letter and Path for %DEVICENAME%
(%DRIVELETTER%:)" window that appears, left-click on the "Edit"
button (where "%DEVICENAME%" is the device and
"%DRIVELETTER%" is the assigned drive letter)
c) Change the Drive letter to the next available drive letter alphabetically.
i) In the "Edit Drive Letter or Path" window that appears, left-click
on the arrow next to the current drive letter.
ii) In the drop down menu that appears, use the up arrow to select the
first available drive letter.
iii) When you left-click on the first available drive letter, the context
menu will disappear
d) Left-click on the "OK" button to close the "Edit Drive Letter or Path"
window
e) In the "Confirm" message that appears, left-click on the "Yes" button
f) Now the drive letter assignment should have changed from the old drive
letter to the new drive letter
g) Follow steps a)-f) for the next peripheral
57
Appendix H: Lazarus v0.0.3 Source
;Part one of "Lazarus" - "Laz"
;v0.0.3
; moved Pause function to top of script - Now, no changes are made to
the system until the user has reach
;
the "point of no return", the point at which he is unable to back
out of the action
;v0.0.2
; modified Laz to remove "Read-Only" attribute from autoexe.bat as well
as the "Hidden" attribute
;v0.0.1
; 1) Modify the Boot.ini so that the system boots immediately into DOS
on the next boot up
;
a) Have 3 "Boot.ini" files - 1) Boots to Windows 2000 regularly,
2) Boots to DOS immediately, 3) Currently active Boot.ini (will
alternate between the first two)
;Added Extenders
AddExtender("wwwnt34i.dll")
Pause ("Rebooting", 'Click "OK" to Reboot your Computer')
;Remove the file attributes from the boot.ini and autoexec.bat files
FileAttrSet("c:\boot.ini","rsh")
FileAttrSet("c:\autoexec.bat","rh")
;Copying and renaming the boot.dos file to c:\boot.ini, overwriting the
previous boot.ini file
FileCopy ("c:\df\boot\boot.dos","c:\boot.ini",@FALSE)
;Copying and renaming the autoexec.dos file to c:\autoexec.bat,
overwriting the previous autoexec.bat file
FileCopy ("c:\df\boot\autoexec.laz","c:\autoexec.bat",@FALSE)
;Reboot the local computer
wntShutdown("",'Your computer will now reboot and beginning loading the
Default System State. This will take several
minutes.',5,@FALSE,@TRUE)
58
Appendix I: Lazarus Ghost command switch files
Ruswitch.txt — descriptions in bold following
-batch
-clone,mode=pload,SRC=e:\ghost\images\0-image.gho:1,DST=1:2
-quiet
-fnf
-sure
-rb
-batch = Prevents abort messages that wait for user acknowledgement.
-clone,mode=pload,SRC=e:\ghost\images\0-image.gho:1,DST=1:2
-clone = specifies the cloning operation that you want Ghost to perform
mode=pload = loading a partition instead of a full image
SRC=e:\ghost\images\0-image.gho = give path to source image
:1 = use 1 partition on source image, needed even if it only contains one partition
DST=1:2 = tells location of destination partition, here it is on hard drive #1, partition #2
-quiet = QUIET mode. No user intervention allowed and no screen display.
-fnf = Turns off Fingerprint creation.s
-sure = Used in conjunction with -CLONE to avoid the final proceed prompt.
-rb = In batch mode, this forces automatic reboot after completion.
59
Appendix J: SnapShot v1.2.0.0 Source
;"SnapShot"
; -Pre-emptive Disaster Recovery tool
AddExtender("wwwnt34i.dll")
utils=("C:\DF\SYS\")
GoSub ABOUT
curPid=(Environment("USERNAME"))
mvf=("D:\Temp\DF\sto_mv")
If !(DirExist(mvf)) Then
DirMake(mvf)
EndIf
sys=("C:\DF\SYS")
If !(DirExist(sys)) Then
DirMake(sys)
EndIf
RunHideWait(Environment("COMSPEC"),"/c %utils%mountvol >
C:\DF\SYS\parguids.txt")
pguid=(FileOpen("C:\DF\SYS\parguids.txt","READ"))
A = ""
B = ""
while (B != "*EOF*")
A = B
B = StrTrim(FileRead(pguid))
If B == "*** NO MOUNT POINTS ***" Then
fex=FileExist("C:\DF\SYS\i386.txt")
Switch fex
Case 0
i386 = FileOpen("C:\DF\SYS\i386.txt","WRITE")
FileWrite(i386,"%A%")
FileClose(i386)
Break
Case 1
storage = FileOpen("C:\DF\SYS\storage.txt","WRITE")
FileWrite(storage,"%A%")
FileClose(storage)
Break
EndSwitch
EndIf
EndWhile
stotxt=FileOpen("C:\DF\SYS\storage.txt","READ")
stoguid=FileRead(stotxt)
FileClose(stotxt)
RunHideWait(Environment("COMSPEC"),'/c %utils%mountvol
"D:\Temp\DF\sto_mv" %stoguid%')
FileClose(pguid)
60
lstSnp=FileExist("D:\Temp\DF\sto_mv\SnapShot\Snap\snapshot.gho")
hisExist=FileExist("D:\Temp\DF\sto_mv\SnapShot\Snap\snapshot.his")
If (lstSnp==1) Then
snpCreateDate=(FileYmdHms("D:\Temp\DF\sto_mv\SnapShot\Snap\snapsho
t.gho"))
Endif
If (lstSnp==1) && (hisExist==0) Then
txt1=("A previous SnapShot was found but the corresponding History
file is missing. ")
txt2=("The SnapShot history will not be available. This is NOT a
Critical error. ")
txt3=("%@crlf%%@crlf%You can continue without problems and a new
SnapShot History file will be generated.")
txtFull=StrCat(txt1,txt2,txt3)
Message("SnapShot - Missing History File",txtFull)
EndIf
If (hisExist==0) Then
snpHisNew=(FileOpen("D:\Temp\DF\sto_mv\SnapShot\Snap\snapshot.his","A
PPEND"))
FileWrite(snpHisNew,"#ACTION*DATE*USER")
If (lstSnp==1) Then
FileWrite(snpHisNew,"take*%snpCreateDate%*unknown")
Endif
FileClose(snpHisNew)
EndIf
While ((lstSnp==2) || (hisExist==2))
Message("File in Use",'A needed file is currently being used by
another program. Please close all programs and then click "OK"')
EndWhile
Switch lstSnp
Case 0
lstPid="No Previous Snapshot Present"
lstDate="No Previous Snapshot Present"
lstAct="No Previous Snapshot Present"
lstCrtDate="No Previous Snapshot Present"
Break
Case 1
snpHis=(FileOpen("D:\Temp\DF\sto_mv\SnapShot\Snap\snapshot.his","R
EAD"))
nxtLine=""
lstLine=""
While (nxtLine!="*EOF*")
lstLine=nxtLine
nxtLine=FileRead(snpHis)
EndWhile
FileClose(snpHis)
lstPid=StrSub(lstLine,26,-1)
lstAct=StrSub(lstLine,1,4)
61
lstDateLong=StrSub(lstLine,6,19)
lstDateY=StrSub(lstDateLong,1,4)
lstDateM=StrSub(lstDateLong,6,2)
lstDateD=StrSub(lstDateLong,9,2)
lstTimeH=StrSub(lstDateLong,12,2)
lstTimeM=StrSub(lstDateLong,15,2)
lstTimeS=StrSub(lstDateLong,18,-1)
delTime=":"
delDate="/"
lstDate=StrCat(lstDateM,delDate,lstDateD,delDate,lstDateY)
If Int("%lstTimeH%")<12 Then AMPM=0
Else AMPM=1
Switch AMPM
Case 0
morn=" AM"
lstTimeAM=StrCat(lstTimeH,delTime,lstTimeM,delTime,lstTimeS,morn)
Break
Case 1
eve=" PM"
lstTimeHPM=Int("%lstTimeH%")-int("12")
lstTimePM=StrCat(lstTimeHPM,delTime,lstTimeM,delTime,lstTimeS,eve)
Break
EndSwitch
lstCrtDateY=StrSub(SnpCreateDate,1,4)
lstCrtDateM=StrSub(SnpCreateDate,6,2)
lstCrtDateD=StrSub(SnpCreateDate,9,2)
lstCrtTimeH=StrSub(SnpCreateDate,12,2)
lstCrtTimeM=StrSub(SnpCreateDate,15,2)
lstCrtTimeS=StrSub(SnpCreateDate,18,-1)
delCrtTime=":"
delCrtDate="/"
delCrtSpace=" on "
lstCrtDay=StrCat(lstCrtDateM,delCrtDate,lstCrtDateD,delCrtDate,lst
CrtDateY)
If ((Int("%lstCrtTimeH%")<=11) || (Int("%lstCrtTimeH%")==24)) Then
AMPM=0
Else AMPM=1
Switch AMPM
Case 0
morn=" AM"
lstCrtTime=StrCat(lstCrtTimeH,delCrtTime,lstCrtTimeM,delCrtTime,ls
tCrtTimeS,morn)
Break
Case 1
eve=" PM"
lstCrtTimeHPM=Int("%lstCrtTimeH%")
If lstCrtTimeHPM>12 Then
lstCrtTimeHPM=lstCrtTimeHPM-int("12")
EndIf
lstCrtTime=StrCat(lstCrtTimeHPM,delCrtTime,lstCrtTimeM,delCrtTime,
lstCrtTimeS,eve)
62
Break
EndSwitch
lstCrtDate=StrCat(lstCrtTime,delCrtSpace,lstCrtDay)
Break
EndSwitch
GoSub MENU
While ((snpAction!=1) && (lstSnp==0))
GoSub MENU
EndWhile
newAction=""
newDateTime=TimeYmdHms()
delHis="*"
Switch snpAction
Case 1
If lstSnp==1 Then
q=AskYesNo("Previous Snapshot Found","A previous Snapshot
was found. If you Take a Snapshot, the previous Snapshot will be
overwritten.%@crlf%%@crlf%Do you wish to continue?")
If q==@NO Then
Message("SnapShot Canceled", "You have chosen
not to continue. The SnapShot utility will now exit.")
GoSub Leave
EndIf
EndIf
newAction="TAKE"
Break
Case 2
snpAge=(TimeDiffDays(newDateTime,lstDateLong))
txtLoad1="Loading a Snapshot will overwrite any changes made to
your computer since the Snapshot was taken."
txtLoad2='%@crlf%%@crlf%The Snapshot to be loaded is %snpAge% days
old.%@crlf%%@crlf%Select "YES" to begin loading the Snapshot or "No"
to abort.'
txtLoadFull=StrCat(txtLoad1,txtLoad2)
q=AskYesNo("Loading Snapshot",txtLoadFull)
If q==@YES Then
If snpAge>14 Then
GoSub OLD
Else
If snpAge<0 Then
GoSub INVALID
EndIf
EndIf
EndIf
If q==@NO Then
63
continue.
Message("SnapShot Canceled", "You have chosen not to
The SnapShot utility will now exit.")
GoSub Leave
EndIf
newAction="LOAD"
Break
EndSwitch
GoSub CONFIRM
newDateTime=TimeYmdHms()
newHis=StrCat(newAction,delHis,newDateTime,delHis,curPid)
newSnpHis=FileOpen("D:\Temp\DF\sto_mv\SnapShot\Snap\snapshot.his","APPEND
")
FileWrite(newSnpHis,"%newHis%")
FileClose(newSnpHis)
Switch snpAction
case 1
FileAttrSet("c:\boot.ini","rsh")
FileCopy("\df\boot\boot.dos","c:\boot.ini",@FALSE)
FileAttrSet("c:\autoexec.bat","rsh")
FileCopy("\df\boot\autoexec.snp","c:\autoexec.bat",@FALSE)
break
case 2
FileAttrSet("c:\boot.ini","rsh")
FileCopy("\df\boot\boot.dos","c:\boot.ini",@FALSE)
FileAttrSet("c:\autoexec.bat","rsh")
FileCopy("\df\boot\autoexec.sht","c:\autoexec.bat",@FALSE)
break
EndSwitch
RunHideWait(Environment("COMSPEC"),'/c %utils%linkd "D:\Temp\DF\sto_mv"
/d')
GoSub REBOOT
;SUB-ROUTINES
:LEAVE
RunHideWait(Environment("COMSPEC"),'/c %utils%linkd "D:\Temp\DF\sto_mv"
/d')
Exit
:ABOUT
snpAboutFormat=`WWWDLGED,5.0`
snpAboutCaption=`About SnapShot`
snpAboutX=166
snpAboutY=118
snpAboutWidth=182
snpAboutHeight=193
snpAboutNumControls=15
snpAbout01=`14,6,156,DEFAULT,STATICTEXT,DEFAULT,"SnapShot is a utility
for taking an image of the current"`
snpAbout02=`14,16,156,DEFAULT,STATICTEXT,DEFAULT,"status of your
computer. You can also use SnapShot to"`
64
snpAbout03=`14,26,156,DEFAULT,STATICTEXT,DEFAULT,"load a previously taken
snapshot to restore your system"`
snpAbout04=`14,36,156,DEFAULT,STATICTEXT,DEFAULT,"to it's previous
configuration. This can be useful as a"`
snpAbout05=`14,46,156,DEFAULT,STATICTEXT,DEFAULT,"disaster recovery
method when you are attempting to change"`
snpAbout06=`14,56,156,DEFAULT,STATICTEXT,DEFAULT,"the configuration of
your computer, i.e when you are"`
snpAbout07=`14,66,156,DEFAULT,STATICTEXT,DEFAULT,"installing new programs
or device drivers."`
snpAbout08=`14,88,156,DEFAULT,STATICTEXT,DEFAULT,"NOTE: While SnapShot
does have some archival qualities it is"`
snpAbout09=`14,98,156,DEFAULT,STATICTEXT,DEFAULT,"not meant as a
Backup/Archive Solution. It's purpose is for"`
snpAbout10=`14,108,156,DEFAULT,STATICTEXT,DEFAULT,"'short term' system
backup. A snapshot older than one week"`
snpAbout11=`14,118,156,DEFAULT,STATICTEXT,DEFAULT,"can be severely
outdated depending on the amount of"`
snpAbout12=`14,128,156,DEFAULT,STATICTEXT,DEFAULT,"changes you have made.
"`
snpAbout13=`20,164,64,DEFAULT,PUSHBUTTON,DEFAULT,"Continue",1`
snpAbout14=`98,164,64,DEFAULT,PUSHBUTTON,DEFAULT,"Cancel",2`
snpAbout15=`14,146,156,DEFAULT,STATICTEXT,DEFAULT,"RESTORE OLDER
SNAPSHOTS AT YOUR OWN RISK!"`
aboutBP=Dialog("snpAbout")
If aboutBP==2 Then GoSub Leave
Return
:OLD
snpOldFormat=`WWWDLGED,5.0`
snpOldCaption=`WARNING - OLD SNAPSHOT`
snpOldX=115
snpOldY=145
snpOldWidth=170
snpOldHeight=96
snpOldNumControls=6
snpOld01=`14,10,144,DEFAULT,STATICTEXT,DEFAULT,"The Snapshot you are
about to load is %snpAge% days old."`
snpOld02=`24,68,52,DEFAULT,PUSHBUTTON,DEFAULT,"Continue",1`
snpOld03=`90,68,52,DEFAULT,PUSHBUTTON,DEFAULT,"Abort",2`
snpOld04=`14,48,110,DEFAULT,STATICTEXT,DEFAULT,"You may continue but do
so at your own risk."`
snpOld05=`14,18,144,DEFAULT,STATICTEXT,DEFAULT,"Loading an Old Snapshot
is not advisable since many"`
snpOld06=`14,26,134,DEFAULT,STATICTEXT,DEFAULT,"changes to the computer
have likely taken place."`
oldBP=Dialog("snpOld")
If oldBP==2 Then GoSub Leave
Return
:INVALID
snpInvAgeFormat=`WWWDLGED,5.0`
snpInvAgeCaption=`INVALID SNAPSHOT AGE`
snpInvAgeX=115
65
snpInvAgeY=145
snpInvAgeWidth=160
snpInvAgeHeight=96
snpInvAgeNumControls=6
snpInvAge01=`14,10,134,DEFAULT,STATICTEXT,DEFAULT,"The SnapShot utility
has returned an invalid Age for"`
snpInvAge02=`20,64,52,DEFAULT,PUSHBUTTON,DEFAULT,"Continue",1`
snpInvAge03=`84,64,52,DEFAULT,PUSHBUTTON,DEFAULT,"Abort",2`
snpInvAge04=`14,46,110,DEFAULT,STATICTEXT,DEFAULT,"Load Snapshot at your
own risk."`
snpInvAge05=`14,18,126,DEFAULT,STATICTEXT,DEFAULT,"the current Snapshot.
The validity of the Snapshot"`
snpInvAge06=`14,26,50,DEFAULT,STATICTEXT,DEFAULT,"cannot be verified."`
invBP=Dialog("snpInvAge")
If invBP==2 Then GoSub Leave
Return
:MENU
snpFormat=`WWWDLGED,5.0`
snpCaption=`SnapShot Selection Menu`
snpX=115
snpY=145
snpWidth=151
snpHeight=148
snpNumControls=15
snp01=`8,126,44,DEFAULT,PUSHBUTTON,DEFAULT,"Take SnapShot",1`
snp02=`54,126,44,DEFAULT,PUSHBUTTON,DEFAULT,"Load SnapShot",2`
snp03=`100,126,44,DEFAULT,PUSHBUTTON,DEFAULT,"Cancel",3`
snp04=`12,50,74,DEFAULT,STATICTEXT,DEFAULT,"Date of last Snapshot
activity:"`
snp05=`12,82,74,DEFAULT,STATICTEXT,DEFAULT,"Snapshot action perfomed
by:"`
snp06=`94,50,52,DEFAULT,VARYTEXT,lstDate,""`
snp07=`94,82,52,DEFAULT,VARYTEXT,lstPid,""`
snp08=`12,4,128,DEFAULT,STATICTEXT,DEFAULT,"Press 'Take SnapShot' to
capture a system snapshot."`
snp09=`12,16,128,DEFAULT,STATICTEXT,DEFAULT,"Press 'Load SnapShot' to
restore a system snapshot."`
snp10=`12,28,128,DEFAULT,STATICTEXT,DEFAULT,"Press 'Cancel' to abort the
SnapShot utility."`
snp11=`12,66,36,DEFAULT,STATICTEXT,DEFAULT,"Action taken:"`
snp12=`94,66,52,DEFAULT,VARYTEXT,lstAct,""`
snp13=`12,98,64,DEFAULT,STATICTEXT,DEFAULT,"Creation date of current"`
snp14=`12,106,64,DEFAULT,STATICTEXT,DEFAULT,"Snapshot image:"`
snp15=`94,98,52,DEFAULT,VARYTEXT,lstCrtDate,""`
snpAction=Dialog("snp")
If snpAction==3 Then GoSub Leave
If ((snpAction==2) && (lstSnp==0)) Then
Message("NO SNAPSHOT TO LOAD",'A Snapshot cannot be loaded because no
Snapshot was found. Click "OK" to return to the Snapshot Selection
Menu')
EndIf
Return
66
:CONFIRM
confirmFormat=`WWWDLGED,5.0`
confirmCaption=`REBOOTING`
confirmX=115
confirmY=145
confirmWidth=161
confirmHeight=83
confirmNumControls=5
confirm01=`10,10,144,DEFAULT,STATICTEXT,DEFAULT,"SnapShot needs to reboot
your computer to begin the utility. "`
confirm02=`10,28,136,DEFAULT,STATICTEXT,DEFAULT,"Click "OK" to reboot
your computer and run SnapShot"`
confirm03=`10,40,92,DEFAULT,STATICTEXT,DEFAULT,"Click "Cancel" to abort
Snapshot"`
confirm04=`22,62,48,DEFAULT,PUSHBUTTON,DEFAULT,"OK",1`
confirm05=`90,62,48,DEFAULT,PUSHBUTTON,DEFAULT,"Cancel",2`
confirmBP=Dialog("confirm")
If confirmBP==2 Then GoSub Leave
EndIf
Return
:REBOOT
wntShutdown("","Your computer will now reboot and run SnapShot.
will take several minutes.",10,@FALSE,@TRUE)
Return
67
This
Appendix K: SnapShot “Snap” Ghost command switch files
Snswitch.txt – for taking a snapshot
-batch
-clone,mode=pdump,SRC=1:2,DST=e:\SnapShot\Snap\snapshot.gho
-quiet
-z
-fnf
-sure
-rb
-batch = Prevents abort messages that wait for user acknowledgement
-clone,mode=pdump,SRC=1:2,DST=e:\SnapShot\Snap\snapshot.gho
-clone = specifies the cloning operation that you want Ghost to perform
mode=pdump = dumping a partition to an image
SRC=1:2 = gives location of partition to create image from. The
specified partition is on Hard Drive #1, Partition #2
DST=e:\SnapShot\snapshot.gho = destination and file name to which
the partition image will be saved
-quiet= QUIET mode. No user intervention allowed and no screen display.
-z = Compression rate at which to save the image. –Zx where x is
a number between 1 and 9. 1 is the fastest compression and is
also the default if no number is given with the –Z switch.
-fnf = Turns off Fingerprint creation.
-sure = Used in conjunction with -CLONE to avoid the final proceed prompt.
-rb = In batch mode, this forces automatic reboot after completion.
68
Appendix L: SnapShot “Shot” Ghost command switch files
Shswitch.txt – for taking a snapshot
-batch
-clone,mode=pload,SRC=e:\SnapShot\Snap\snapshot.gho,DST=1:2
-quiet
-fnf
-sure
-rb
-batch = Prevents abort messages that wait for user acknowledgement
-clone,mode=pload,SRC=e:\SnapShot\Snap\snapshot.gho,DST=1:2
-clone = specifies the cloning operation that you want Ghost to perform
mode=pdump = dumping a partition to an image
SRC= e:\SnapShot\snapshot.gho = source path and file name of
image to be loaded
DST=1:2 = destination of image to be loaded. The destination
partition listed here is on Hard Drive #1, Partition #2
-quiet= QUIET mode. No user intervention allowed and no screen display.
-fnf = Turns off Fingerprint creation.
-sure = Used in conjunction with -CLONE to avoid the final proceed prompt.
-rb = In batch mode, this forces automatic reboot after completion.
69
Appendix M: RMounter v1.2.1.0 Source Code
;Rmounter
; Used after SYSPREP image is loaded to setup the proper "SourcePath",
STORAGE Partition directories, Lazarus and Snapshot shortcuts, and
drive letters and mount points
regkey=RegOpenKey(@REGMACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\
Setup")
RegSetValue(regkey,"[SourcePath]","D:\")
RegSetValue(regkey,"[ServicePackSourcePath]","D:\")
RegCloseKey(regkey)
;Place Lazarus and Snapshot shortcuts in the All Users' Administrative
Tools
LnkDes=("D:\Documents and Settings\All Users\Start
Menu\Programs\Administrative Tools")
LnkSrc=("C:\DF\ReMounter")
lazLnk=("%LnkDes%\Lazarus.lnk")
snpLnk=("%LnkDes%\Snapshot.lnk")
If !(FileExist(lazLnk)) Then
FileCopy("%LnkSrc%\Lazarus.lnk","%LnkDes%\",@False)
EndIf
If !(FileExist(snpLnk)) Then
FileCopy("%LnkSrc%\Snapshot.lnk","%LnkDes%\",@False)
EndIf
;Create the STORAGE Partition directory structure and copy ghost.exe to
it
snapdir=("F:\SnapShot\Snap")
ghostdir=("F:\Ghost")
If !(DirExist(snapdir)) Then
DirMake(snapdir)
EndIf
If !(DirExist(ghostdir)) Then
DirMake(ghostdir)
EndIf
ghostSrc=("C:\DF\ReMounter\ghost.exe")
ghostDes=("%ghostdir%\ghost.exe")
If ((FileExist(ghostSrc)) && (!(FileExist(ghostDes)))) Then
FileCopy("%ghostSrc%","%ghostDes%",@FALSE)
;Hide Partitions and reassign drive letters
utils=("C:\DF\SYS\")
RunHideWait(Environment("COMSPEC"),"/c %utils%mountvol > volids.txt")
volids=FileOpen("volids.txt","READ")
RunHideWait(Environment("COMSPEC"),"/c %utils%delrp d:\I386")
DirMake("d:\I386")
A = ""
B = ""
i386ID = ""
storageID = ""
70
jazID = ""
cdromID = ""
while (B != "*EOF*")
A = B
B = StrTrim(FileRead(volids))
If ((B == "E:\") | (B == "*** NO MOUNT POINTS ***"))
i386ID = A
EndIf
Then
If B == "F:\" Then
storageID = A
EndIf
If B == "G:\" Then
jazID = A
EndIf
If B == "H:\" Then
cdromID = A
EndIf
EndWhile
ie_i386ID=ItemExtract(4,i386ID,"\")
ie_storageID=ItemExtract(4,storageID,"\")
ie_jazID=ItemExtract(4,jazID,"\")
ie_cdromID=ItemExtract(4,cdromID,"\")
RunHideWait(Environment("COMSPEC"),"/c %utils%mountvol d:\I386
\\?\%ie_i386ID%\")
RunHideWait(Environment("COMSPEC"),"/c
RunHideWait(Environment("COMSPEC"),"/c
RunHideWait(Environment("COMSPEC"),"/c
RunHideWait(Environment("COMSPEC"),"/c
%utils%mountvol
%utils%mountvol
%utils%mountvol
%utils%mountvol
E:\
F:\
G:\
H:\
RunHideWait(Environment("COMSPEC"),"/c %utils%mountvol E:\
\\?\%ie_jazID%\")
RunHideWait(Environment("COMSPEC"),"/c %utils%mountvol F:\
\\?\%ie_cdromID%\")
FileClose(volids)
Exit
71
/D")
/D")
/D")
/D")
Appendix N: Example of mount.vol GUID list
Creates, deletes, or lists a volume mount point.
MOUNTVOL [drive:]path VolumeName
MOUNTVOL [drive:]path /D
MOUNTVOL [drive:]path /L
path
VolumeName
/D
/L
Specifies the existing NTFS directory where the mount
point will reside.
Specifies the volume name that is the target of the mount
point.
Removes the volume mount point from the specified
directory.
Lists the mounted volume name for the specified
directory.
Possible values for VolumeName along with current mount points are:
\\?\Volume{5cc6e393-495b-11d5-8fb9-806d6172696f}\
C:\
\\?\Volume{5cc6e391-495b-11d5-8fb9-806d6172696f}\
D:\
\\?\Volume{69f25d58-6cbe-11d5-9bd3-806d6172696f}\
P:\
\\?\Volume{5cc6e38d-495b-11d5-8fb9-806d6172696f}\
Z:\
\\?\Volume{5cc6e38e-495b-11d5-8fb9-806d6172696f}\
X:\
\\?\Volume{5cc6e38f-495b-11d5-8fb9-806d6172696f}\
Y:\
\\?\Volume{5cc6e38c-495b-11d5-8fb9-806d6172696f}\
A:\
72
Appendix O: “Test-Lab User GP”
pushed to w2k-pilot.vt.edu/VT/TEST-LAB OU (v1.3, 011129)
Computer Configuration settings=Enabled
User Configuration settings=Enabled
Figure 18: Test-Lab GPO Properties
73
Computer Configuration
Administrative Templates
Administrative Templates Network
Administrative Templates NetworkOffline Files
Figure 19
74
***Event logging level=[Not configured] Enabled – 3 (Log ‘server offline’, ‘net stopped’ and ‘net
started’, and ‘server available for reconnection’)
Figure 20
75
***Subfolders always available offline=[Not configured] Enabled
Figure 21
76
User Configuration
Windows Settings
Windows Settings Internet Explorer Maintenance  Security
Figure 22
77
***Security Zones and Content Ratings=[blank] Under the “Security Zones” section, I clicked
“Modify Settings” which brought up a typical IE Security configuration window. I
selected “Trusted Sites”, clicked on the “Sites” button, added “tron.test-lab.w2kpilot.vt.edu”, and unchecked “Require server verification (https:) for all sites in this
zone”. I added this object to fix an issue with opening an Access DB from the user’s My
Documents/Desktop Folder.
Figure 23
78
Figure 24
Figure 25
79
Windows Settings Folder Redirection (Right-click on the individual component and select properties to
modify the policy)
Figure 26
80
***Desktop=[No administrative policy specified] Basic – Redirect everyone’s folder to the same
location; Target folder location: \\tron.ais-pilot.w2kpilot.vt.edu\Stores\Users\%username%\Desktop
[Settings Tab -- clear the “Grant the user exclusive rights to Desktop” box]
Figure 27
81
***My Documents=[No administrative policy specified] Basic – Redirect everyone’s folder to the
same location; Target folder location: \\tron.ais-pilot.w2k-pilot.vt.edu\
UsersData\%username%\My Documents
[Settings Tab -- clear the “Grant the user exclusive rights to My Documents” box]
Figure 28
82
***My Pictures=[ No administrative policy specified] Follow the My Documents folder
Figure 29
83
Administrative Templates
Administrative TemplatesStart Menu & Taskbar
Figure 30
84
***Add Logoff to the Start Menu=[Not configured] Enabled
Figure 31
85
Administrative TemplatesDesktop
Figure 32
86
***Remove My Documents icon from desktop=[Not configured] Disabled
Figure 33
87
***Prohibit user from changing My Documents path=[Not configured] Enabled
Figure 34
88
Administrative TemplatesNetworkOffline Files
Figure 35
89
***Synchronize all offline files before logging off=[Not configured] Enabled
Figure 36
90
***Action on server disconnect=[Not configured] Enable – Action: Work offline (Server’s files are
available to local computer
Figure 37
91
***Disable 'Make Available Offline'=[Not configured] Enabled
Figure 38
92
***Administratively assigned offline files=[Not configured] Enabled – Specify network files and
folders that are always available offline (\\%computername%\Documents and
Settings\%username%\My Documents; \\%computername%\Documents and
Settings\%username%\Desktop)
Figure 39
Figure 40
93
***Event logging level=[Not configured] Enabled – 3 (Log ‘server offline’, ‘net stopped’ and ‘net
started’, and ‘server available for reconnection’)
Figure 41
94
Administrative TemplatesSystemLogon/Logoff
Figure 42
95
***Exclude directories in roaming profile=[Not configured] Enabled – Temporary Internet Files;
History; Temp; Windows; Start Menu
Figure 43
96
Appendix P: “Slow Link Policy” GPO
pushed to entire test-lab.w2k-pilot.vt.edu/Laptops OU (v1.2, 020208)
Computer Configuration settings=Enabled
User Configuration settings=Disabled
Figure 44: Slow Link GPO Properties
97
Computer Configuration
Administrative Templates
Administrative TemplatesSystemLogon
Figure 45
98
***Do not detect slow network connections=[Not configure] Disabled
Figure 46
99
***Slow network connection timeout for user profiles=[Not configured] Endabled – Connection
speed (Kbps): 500 or Time (milliseconds): 120
Figure 47
100
***Prompt user when slow link is detected=[Not configured] Enabled
Figure 48
101
***Timeout for dialog boxes=[Not configured] Enabled – Time (seconds): 45
Figure 49
102
Administrative Templates NetworkOffline Files
Figure 50
103
***Enabled=[Not configured] Enabled
Figure 51
104
***Disable user configuration of Offline Files=[Not configured] Enabled
Figure 52
105
***Synchronize all offline files before logging off=[Not configured] Enabled
Figure 53
106
***Action on server disconnect=[Not configured] Enabled – Work offline
Figure 54
107
***Administratively assigned offline files=[Not configured] Enabled – Specify network files and
folders that are always available offline (\\%computername%\Documents and
Settings\%username%\My Documents; \\%computername%\Documents and
Settings\%username%\Desktop)
Figure 55
Figure 56
108
***Subfolders always available offline=[Not configured] Enabled
Figure 57
109
Appendix Q: “Add Users” .csv file syntax
[User]
UserName,FullName,Password,Comment,HomeDriveAndPath,Profile,Script,
[Global]
GlobalGroupName,Comment,UserName, ...
[Local]
LocalGroupName,Comment,UserName, ...
110
Appendix R: W2k-Pilot “AddUser.csv”
[User]
Username,username(reverse) ,,,,\\tron.test-lab.w2k-pilot.vt.edu\UserData\%username%\Profile\,
111
Appendix S: Populus v1.0.0.0 Source
;POPULUS -- beta v.1 -; Local program to automate the creation of the Profile and Redirected
Folders directories on TRON and set the proper NTFS permissions,
%username% Full, System Full
;
Will create directories one PID (just enter the PID in the field)
at a time or multiple PIDs (using a line-delimited text file)
localpath = FilePath(WinExeName(""))
;Add Required WIL Extender(s)
AddExtender("wwwnt34i.dll")
;Remove previous InvalidUsers.log and create a new one
If FileExist("%localpath%InvalidUsers.log") == 1 Then
FileDelete("%localpath%InvalidUsers.log")
EndIf
;Run the OPTION Sub-Routine
GoSub OPTION
;Check for the existence of the E:\UserData folder
path = "E:\UserData"
If !DirExist(path) Then
Message("Directy Path Doesn't Exist","Verify the Existence of the
Directory Path and Re-run Populus.%@CRLF%Path should be E:\UserData")
GoSub LEAVE
EndIf
While chk1 == "0"
Message("Invalid Selection", "You must choose at least one Folder to
create.")
GoSub OPTION
EndWhile
Switch rad1
Case 1
pid = "PID"
While ((pid == "") | (pid == "PID"))
IndFormat=`WWWDLGED,5.0`
IndCaption=`Individual User`
IndX=61
IndY=82
IndWidth=104
IndHeight=75
IndNumControls=4
Ind01=`14,8,64,DEFAULT,STATICTEXT,DEFAULT,"Enter the User's
PID"`
Ind02=`12,24,64,DEFAULT,EDITBOX,pid,"PID"`
Ind03=`12,42,36,DEFAULT,PUSHBUTTON,DEFAULT,"OK",1`
Ind04=`54,42,36,DEFAULT,PUSHBUTTON,DEFAULT,"Cancel",2`
listBP=Dialog("Ind")
If listBP==2 Then GoSub LEAVE
If ((pid == "") | (pid == "PID")) Then
Message("Invalid PID", "You Must Enter A PID")
EndIf
112
EndWhile
Break
Case 2
list = "USERLIST"
While ((list == "") | (list == "USERLIST"))
IndFormat=`WWWDLGED,5.0`
IndCaption=`Multiple Users`
IndX=61
IndY=82
IndWidth=100
IndHeight=67
IndNumControls=4
Ind01=`14,8,76,DEFAULT,STATICTEXT,DEFAULT,"Enter the User
List Location"`
Ind02=`12,24,64,DEFAULT,EDITBOX,list,"USERLIST"`
Ind03=`12,42,36,DEFAULT,PUSHBUTTON,DEFAULT,"OK",1`
Ind04=`54,42,36,DEFAULT,PUSHBUTTON,DEFAULT,"Cancel",2`
listBP=Dialog("Ind")
If listBP==2 Then GoSub LEAVE
If ((list == "") | (list == "PID")) Then
Message("Invalid Selection", "You Must Enter a valid
path")
EndIf
EndWhile
Break
EndSwitch
If rad1 == 1 Then
GoSub ONE
Else
GoSub MULTI
EndIf
:LEAVE
Exit
Return
:OPTION
PopulusFormat=`WWWDLGED,5.0`
PopulusCaption=`Populus`
PopulusX=61
PopulusY=82
PopulusWidth=144
PopulusHeight=88
PopulusNumControls=10
Populus01=`16,24,50,DEFAULT,CHECKBOX,chk1,"Roaming Profile",1`
Populus02=`16,36,50,DEFAULT,CHECKBOX,chk1,"My Documents",2`
Populus03=`16,48,50,DEFAULT,CHECKBOX,chk1,"Desktop",4`
Populus04=`86,24,52,DEFAULT,RADIOBUTTON,rad1,"Individual User",1`
Populus05=`30,68,36,DEFAULT,PUSHBUTTON,DEFAULT,"Process",1`
Populus06=`84,68,36,DEFAULT,PUSHBUTTON,DEFAULT,"Cancel",2`
Populus07=`86,48,48,DEFAULT,RADIOBUTTON,rad1,"Multiple Users",2`
Populus08=`94,36,36,DEFAULT,STATICTEXT,DEFAULT,"OR"`
Populus09=`10,8,60,DEFAULT,STATICTEXT,DEFAULT,"FOLDERS TO CREATE"`
Populus10=`78,8,58,DEFAULT,STATICTEXT,DEFAULT,"NUMBER OF USERS"`
113
optBP=Dialog("Populus")
If optBP==2 Then GoSub LEAVE
Return
;Sub-Routine for Single User
:ONE
GoSub CREATE
Return
;Sub-Routine for Multiple Users
:MULTI
pid = ""
pidlist = FileOpen(list,"READ")
;Process the PID List and look for invalid PIDs
time = Timedate()
noExistLogCreate = FileOpen("%localpath%InvalidUsers.log","WRITE")
FileWrite(noExistLogCreate,"%time% -- Invalid User Log")
FileClose(noExistLogCreate)
While (pid != "*EOF*")
pid = StrTrim(FileRead(pidlist))
noExist = wntUserExist("\\BONOBOS","%pid%")
If noExist == 0 Then
noExistLogAppend =
FileOpen("%localpath%InvalidUsers.log","APPEND")
FileWrite(noExistLogAppend,"%pid%")
FileClose(noExistLogAppend)
EndIf
EndWhile
FileClose(pidlist)
;Show the InvalidUsers.log file to the operator so he can determine if
there are invalid accounts. Anything between the Date line and the
*EOF* line are invalid accounts.
RunWait("notepad.exe","%localpath%InvalidUsers.log")
invPIDs = AskYesNo("Any Invalid Accounts?", "Were there invalid
accounts?%@CRLF%Select 'YES' to exit Populus and edit the user
list.%@CRLF%Otherwise, select 'NO' to continue.")
If invPIDs == @YES Then
GoSub LEAVE
EndIf
;Use PID list to create the User Folders and Set Permissions
pid = ""
nextpid = ""
pidlist = FileOpen(list,"READ")
While (pid != "*EOF*")
pid = StrTrim(FileRead(pidlist))
If pid == "*EOF*" Then
Break
EndIf
GoSub CREATE
EndWhile
Return
114
;Sub-Routine for creating the folders
:CREATE
fullpath = StrCat(path,"\",pid)
DirMake(fullpath)
Switch chk1
Case 0
Message("Invalid Variable","Invalid 'chk1' variable.
re-run Populus.%@CRLF%Value cannot = 0 (zero)")
GoSub LEAVE
Break
Case 1
;
GoSub PROFILE
GoSub PERMS
Break
Case 2
GoSub MYDOCS
GoSub PERMS
Break
Case 3
;
GoSub PROFILE
GoSub MYDOCS
GoSub PERMS
Break
Case 4
GoSub DESKTOP
GoSub PERMS
Break
Case 5
;
GoSub PROFILE
GoSub DESKTOP
GoSub PERMS
Break
Case 6
GoSub MYDOCS
GoSub DESKTOP
GoSub PERMS
Break
Case 7
;
GoSub PROFILE
GoSub MYDOCS
GoSub DESKTOP
GoSub PERMS
Break
EndSwitch
Return
;:PROFILE
;prof = "Profile"
;ProfilePath = StrCat(fullpath,"\",prof)
;DirMake(ProfilePath)
;Return
:MYDOCS
docs = "My Documents"
MyDocsPath = StrCat(fullpath,"\",docs)
DirMake(MyDocsPath)
Return
:DESKTOP
115
Debug and
desk = "Desktop"
DesktopPath = StrCat(fullpath,"\",desk)
DirMake(DesktopPath)
Return
;Sub-Routine for setting the proper NTFS permissions on the users'
directories, %username% - Full, SYSTEM - Full
:PERMS
svrname = "BONOBOS"
uncpath = StrCat("\\",svrname)
acct = StrCat("W2k-Pilot","\",pid)
wntAccessAdd(uncpath,fullpath,acct,300,"Dir2K:Full",4)
wntAccessAdd(uncpath,fullpath,"SYSTEM",300,"Dir2K:Full",4)
;wntAccessMod(uncpath,fullpath,300,2,1)
Return
116
Appendix T: Procedure for Adding a new user to the AIS/W2k-Pilot
1.
Create the user
a. Create a “comma separated value (csv)” text file containing the following syntax and user
attributes (For a large number of users, you can create the file in a spreadsheet program,
such as Excel, and then save it as a .csv file, then rename the .csv file it to a .txt file)
i. SYNTAX
1. User Name , Full name, Password, Description, HomeDrive,
Homepath, Profile, Script
ii. ATTRIBUTES
1. User Name = PID
2. Full name
3. Password
4. Profile = Full path to the storage location of the users Roaming Profile,
i.e. \\Fully Qualified Domain Name
(FQDN)\UserData\%username%\Profile\
iii. TEXT FILE EXAMPLE: (For the attributes that aren’t used, still add the
commas)
LINE 1:
[User]
LINE 2:
<PID1>,<fullname1>,<password>,,,,\\servername.test-lab.w2kpilot.vt.edu\UserData\%username%\Profile\
LINE 3 (and following):
<PID2>,<fullname2>,<password>,,,,\\servername.test-lab.w2kpilot.vt.edu\UserData\%username%\Profile\
iv. SAMPLE TEXT FILE (Lines shouldn’t wrap):
[User]
msmith,Mike Smith,changeme,,,,\\tron.test-lab.w2kpilot.vt.edu\UserData\%username%\Profile\
ndoe,Nancy Doe, changeme,,,,\\tron.test-lab.w2kpilot.vt.edu\UserData\%username%\Profile\
jluser,Joe L. User, changeme,,,,\\tron.test-lab.w2kpilot.vt.edu\UserData\%username%\Profile\
b. Save the text file to a location that is accessible by a Domain Controller (DC) of the
domain in which the user accounts will reside or copy the file to a floppy disk
c. Also save a copy of the “addusers.exe” utility from the Windows 2000 Server Resource
Kit to the same location as the text file (either network share or floppy disk)
d. Login to the DC of the domain in which the user accounts will reside and download the
txt file (or copy it from the floppy disk)
e. Open up DOS window by typing “cmd” from the “Run…” utility
f. Change the prompt to the location in which you save the addusers.exe file and the text
file by using the “cd” command
i. If you saved the files to c:\temp\utility\ directory, at the command prompt type
the following
<type>
cd \
 Goes to the root level
cd temp\utility
 changes to the c:\temp\utility>
g. Run the addusers.exe with the following variables, where DC Name is the NetBIOS name
of the DC, FilePath is the location of the comma-delimited text file, and FileName.txt is
the actual name of the text file:
<type>
addusers \\DC Name /c c:\FilePath\FileName.txt
117
h.
i.
j.
2.
Text should begin to stream by in the DOS window, displaying either that the account
was created or it failed
i. If an account creation failed, check the following:
1. See if an account by this name already exists, if so either user a
different name or delete the already created account
2. Verify that the correct syntax is used for the individual account in the
text file
In Active Directory Users and Computers, verify that they accounts have been created
and move them to the proper Organizational Unit (OU)
NOTE—by default, all user accounts created via the addusers.exe utility are set to “User
must change password at next login”. To disable this, use the “/p” switch when you run
addusers.exe
Use the “Populus” utility to create user data folders in the UserData share and set ACLs on the
folders [NOTE—Populus verifies the existence of the user accounts before it creates the folders so
the account creation must be done first]
a. Preparations prior to running Populus
i. For the creation of data folders for INDIVIDUAL USERS, simply run Populus
and follow the instructions
ii. For the creation of data folders for MULTIPLE USERS, create a line-delimited
text file containing the user account names only (no preceding or trailing
carriage returns) [NOTE--If you created a text document from an Excel
spreadsheet for the User Account Creation, you can save the first column, which
contains the User Name attribute, to a text file and save it.]
1. SYNTAX
a. User Name
2. ATTRIBUTES
a. User Name = PID
3. TEXT FILE EXAMPLE:
LINE 1:
user01
LINE 2:
user02
LINE 3:
user03
LINE 4:
etc.
4. SAMPLE TEXT FILE:
msmith
ndoe
jluser
iii. Save the text file to a location that is accessible by a TRON or copy the file to a
floppy disk
iv. Log into TRON and copy the Populus text file to a location on TRON. A good
place is in the same directory as the Populus utility, E:\0_Installed\Populus.
b. POPULUS LOCATION:
i. Populus is located on TRON.TEST-LAB.W2K-PILOT.VT.EDU at
E:\0_Installed\Populus\Populus.exe
ii. You can run Populus by either of the following methods
1. Click on “Start””Run…”; In the “Run” window that appears, type
“E:\0_Installed\Populus\Populus.exe” and click the “OK” button
2. Via Windows Explorer or My Computer, browse to
“E:\0_Installed\Populus” and double click on “Populus.exe”
c. SINGLE USER
i. For creation of data folders for a single user, run Populus and select the
following:
118
1.
2.
3.
Under “FOLDERS TO CREATE”, select
a. My Documents
b. Desktop
c. Do not select “Roaming Profiles”, this folder will be created
auto-magically when the user first logs on and his/her profile
is generated. Future versions of Populus will remove this
folder option.
Under “NUMBER OF USERS”, select
a. “Individual User”
Click the “Process” button
Figure 58: Options Dialog Box – selecting individual user
4.
In the “Individual User” window that appears
a. Enter the User’s PID in the “PID” field and click the “OK”
button to create the user data folders selected and set the
proper user NTFS Permissions
Figure 59: Individual User
119
d.
MULTIPLE USERS
i. For creation of data folders for a multiple users, run Populus and select the
following:
1. Under “FOLDERS TO CREATE”, select
a. My Documents
b. Desktop
c. Do not select “Roaming Profiles”, this folder will be created
auto-magically when the user first logs on and his/her profile
is generated. Future versions of Populus will remove this
folder option.
2. Under “NUMBER OF USERS”, select
a. “Individual User”
3. Click the “Process” button
Figure 60: Options – selecting multiple users
4.
In the “Multiple Users” window that appears
a. Enter the full path to the location of the Populus text file
created in the “Preparations prior to running Populus” section
(for example, “E:\0_Installed\Populus”) and click the “OK”
button to have Populus process the text file and verify the user
accounts existence.
Figure 61: Enter User List Location
120
5.
Populus will then open up “InvalidUsers.log” in Notepad and display
any user accounts in the Populus text file that do not have
corresponding domain user accounts.
a. If there are no invalid user accounts, the file will be displayed
like the following:
Figure 62: Invalid Users Log file – no invalid users in user list
b.
If there are invalid user accounts, the file will be displayed
like the following, with “blah4” and “blah5” being invalid
user accounts:
Figure 63: Invalid Users Log file –invalid users found in user list
121
6.
Populus will wait to continue until you have closed Notepad at which
time it will present you with the “Any Invalid Accounts?” message box
a. If there are invalid accounts, click on the “Yes” button to
cancel Populus. Create the needed accounts or fix the entries
in the Populus text file and re-run Populus
b. If there are no invalid accounts, click on the “No” button and
Populus will finish processing the text file and create the user
data folders selected and set the proper user NTFS
Permissions
Figure 64: Cancel box if invalid users were found in user list
122
e.
Post-Populus Permission Cleanup
i. The current version of Populus does not remove the NTFS File Inheritance
option for the file permissions. This must be done manually. This is due to a
limitation in the Winbatch programming language and should be fixed with a
new version of Populus when Winbatch is updated.
1. After the user data folders are created, modify the NTFS Permissions to
remove permissions for the “Authenticated Users” group and the
“Domain Admins” group.
a. Browse to “E:\UserData”, right-click on the user data folder
just created (the folder named with his/her PID), and select
“Properties” from the context menu that appears.
b. In the “%FolderName% Properties” window, click on the
“Security Tab” and uncheck the option “Allow inheritable
permissions from parent to propagate to this object”
Figure 65: Post-Populus Permission Cleanup
123
c.
In the “Security” window that appears, click on the “Remove”
button
Figure 66: Remove Inherited Permissions
d.
e.
In the “%FolderName% Properties” window, click on the
“Advanced” button
In the “Access Control Setting for %FolderName%”, click to
enable the “Reset permissions on all child objects and enable
propagation of inheritable permissions.” option and click the
“OK” button
Figure 67: Reset Permissions on all child objects
124
f.
In the “Security” message that appears, click on the “Yes”
button
Figure 68: Permission Reset Verification
g.
Click on the “OK” button to close the “%FolderName%
Properties” window
Figure 69: Closing the Security Window
125
Download