Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

456 lines
13 KiB

Modifications:
Joe Holman 12.09.94 Added information, corrected some spelling,
and add PPC information.
Added information about tools.
This Document Tells You About
-----------------------------
-----------------------------
This describes the bom.txt file and associated utilities to make
NT Workstation and NT Server products.
The BOM.TXT File.
-----------------
The bill of materials is a text file that describes all the files in
Windows NT, and provides information necessary to lay-out the distribution
media and generate the setup INF files.
The bom is typically treated as a spreadsheet. Each row describes one file
and the neccessary information to generate a corresponding line in an inf
file. Thus a file may be listed more than once, if it appears in more
than one inf section.
Each column gives some particular bit of information about the file.
Following is a description of the 21 columns.
Column A (name)
---------------
This is the name of the file as it is distributed by the build group.
This is not necessarily the same as the name the file will have on the
retail distribution media (see column T).
Column B (source)
-----------------
This information is used by the media generation tools to specify
what share-point the file is originating.
This value is typically x86bins, mipsbins, infs, x86dbg, mipsdbg, etc.
However, this value can be even more generic, such as @bins. In this case
the media tools expands this value out to separe lines each
containing one of x86bins,mipsbins, etc.
Column C (path)
---------------
This information is used by the media generation tools when copying files
from the build distribution points to the destination harddrive.
>>>This value is used in conjunction with the Column B's value.
Most files will simply have \ as the
path.
INF files are generated during the layout process;
the tools then gather them up from platform specific subdirectories,
so inf files typically have a path of \i386, \mips, etc.
This column can have platform-independent information.
See discussion below.
Column D (grouping)
-------------------
This column contains selection criteria used by the media generation tools
to filter out certain files, such as the far-east nls files in US/European
products. Generally this column is left blank.
For example, if the %LANGUAGE% is ENG (for English), only rows with a blank
or n*ENG value will be copied.
Column E (comment)
------------------
A comment about the file. Can be anything or nothing.
Column F (product)
------------------
If blank, then the file is part of both the Workstation and Server products.
If the value is "nt", then the file is ONLY part of the Workstation product.
If the value is "as", then the file is ONLY part of the Server product.
Any Other values are invalid and may cause random results.
Column G (dbg file)
-------------------
If this column contains an 'x' then the layout tools will fetch the
file's corresponding .dbg file, and place it in the support area of the CD.
For example, ntoskrnl.exe's ntoskrnl.dbg file.
Column H (platform)
-------------------
An identifier used to filter out files not applicable to the product
being generated (x86 AS floppies, alpha NT cd-rom, etc).
This column can have platform-independent information.
See discussion below.
Column I (cdpath)
-----------------
Specifies the path on the cd where the file is to be placed.
Generally \i386, \mips, etc; other values are used to generate the support
section of the CD and have meaning to the layout tools. A value of just \
means the root of the media.
This column can have platform-independent information.
See discussion below.
Columns J,K,L (inf file, section, line)
---------------------------------------
Describes an entry in an inf file that will be made to describe the file.
The inf file is a value like i386\initial.inf, etc.
The section is a value like [Files-i386-system], etc.
The line is a format string, where certain symbols are recognized and
replaced:
[d] - replaced with the disk designator for the file.
[n] - replaced with the name of the file as it appears on the media.
[s] - replaced with the file size.
So J = i386\initial.inf
K = [Files-mips-system]
L = [d],[n], SIZE=[s]
might result in the line "d2,progman.exe, SIZE=123657" being written in the
[Files-mips-system] section of mips initial.inf.
These columns can have platform-independent information.
See discussion below.
Columns M,N (size,csize)
------------------------
These fields are used internally by the layout tools. Essentially, the
size column contains the uncompressed size of a file and the csize column
contains the compressed size of the file. These values are used to
calculate which files will go on a particular disk.
Column O (nocomp)
-----------------
This field is used to indicate that the file should NOT be compressed.
Any empty value in this column means that the file should be compressed.
If this value is 'x' then the file will NOT be compressed on the retail CD,
but will be on floppies.
If this value is 'xfloppy' then the file will NOT be compressed on the
retail CD and NOT be compressed on the retail floppies.
Watch out here, since some of the tools consider any char sometimes as a 'x'.
Column P (priority)
-------------------
This value is used by the layout tools to ensure that certain files are
grouped together. Files that will be copied during text setup should be
packed together on the first n disks; this will ensure a smooth disk order
during setup. Certain pther files are grouped to minimize disk swaps
during maintenance operations (ncpa, printman, internation applet, etc)
that invoke setup to get system files installed.
Note that this is only important for floppies as on the cd all files
are on the same single piece of media.
The important common values are:
0 File must go on a particular disk and
Column U must specifiy disk 1 to n.
1 File is copied during text mode. Column U should be 0.
n The current break-point for textmode/gui-mode is around 60 now.
This varies depending upon the # of files. Column U should be 0.
999 File needs to be copied during gui-mode. Column U should be 0.
1000 Do NOT include this file on the x86 floppies. Column U should be 0.
NOTE: Normally, no textmode files need to have a specific disk assigned to
them but, for OEM floppy sets, we'll put the following files on the same
floppy set just to be nice to them, ie they only have to change one disk:
o initial.inf
o shell32.dll
o registry.inf
NOTE: If we go to just shipping CD, this column can be eliminated.
Columns Q,R (lmacl, ntacl)
--------------------------
These values are placed into winperms.txt for the file for the Workstation
and Server products.
Column S (aclpath)
------------------
Supplies the path in the target tree where the file will receive acls.
This value is relative to sysroot unless it starts with *, in which case
it's relative to C:\ (for ntldr, etc on x86). If a file is listed more
than once with different aclpaths, then there will be multiple listings
for the file in winperms.txt.
This column can have platform-independent information.
See discussion below.
Column T (medianame)
--------------------
This is the name the file will have on the distribution media, which may
be different than the name the file has on the build distribution servers.
If blank, the name on the distribution media is the same as the build
distribution name (column A).
Column U (disk)
---------------
Hardcoded disk number, used only when laying out x86 floppies.
Common values are:
0 Put on any disk, but group with Column P's files.
n Put on this specific disk, Column P must be 0.
Platform Independent Entries
----------------------------
The vast majority of files in the product are not specific to x86, mips,
alpha, etc, but are included for all platforms. Instead of requiring
one entry per platform for a file, the bom supports platform-independent
syntax so we can have one line per file, if the file is applicable to
all platforms.
The data in certain columns can contain a '@' character. If this chararacter
is seen in those columns, the bom tools internally expand the line to n
lines, one per platform, by substituting platform-specific values on each
line.
The columns that support this and the substitution values are as follows:
B (source) : @ = {alpha , mips , x86, ppc }
C (path) : @ = {alpha , mips , i386, ppc }
H (platform) : @ = {alpha , mips , x86, ppc }
I (cdpath) : @ = {alpha , mips , i386, ppc }
J (inf file) : @ = {alpha , mips , i386, ppc }
K (inf sect) : @ = {alpha , mips , i386, ppc }
S (aclpath) : @ = {w32alpha, w32mips, w32x86, w32ppc }
The other columns are platform-independent by their nature. The value in
the bom is simply replicated to each of the n entries. Note that the
priority and disk fields are used only for x86, so the entry in the bom
should reflect the desired positioning on the x86 floppies if appropriate.
(ie, replicating the x86 floppy values into the mips, alpha, etc lines
does no harm and has no effect).
So for example a line with (I changed the orientation so you can see it)
A: _DEFAULT.PIF
B: @bins
C: \
D:
E: default pif
F:
G:
H: @
I: \@
J: @\initial.inf
K: [Files-@-nt-system]
L: [d],[n], SIZE = [s]
M:
N:
O:
P: 999
Q: 7*10*15*17
R: 7*10*15
S: .\system32
T:
U: 0
will be changed internally to
A: _DEFAULT.PIF _DEFAULT.PIF _DEFAULT.PIF
B: alphabins mipsbins x86bins
C: \ \ \
D:
E: default pif default pif default pif
F:
G:
H: alpha mips x86
I: \alpha \mips \i386
J: alpha\initial.inf mips\initial.inf i386\initial.inf
K: [Files-alpha-nt-system] [Files-mips-nt-system] [Files-i386-nt-system]
L: [d],[n], SIZE = [s] [d],[n], SIZE = [s] [d],[n], SIZE = [s]
M:
N:
O:
P: 999 999 999
Q: 7*10*15*17 7*10*15*17 7*10*15*17
R: 7*10*15 7*10*15 7*10*15
S: .\system32 .\system32 .\system32
T:
U: 0 0 0
when any bom tool loads the bom.
Utilities To Make The Media
---------------------------
The current process to make CD and floppy media is to call the following
utilities:
o Cats.Exe
o Filter.Exe
o Msize.Exe
o Mlayout.Exe
o Infs.Exe
o Dosnet.Exe
o Acllist.Exe
o Build.Exe
o Diamwrap.Exe
o Mcpyfile.Exe
Refer to Make_Cd.Cmd for a current example of all the utilities being called
with appropriate parameters.
Cats.Exe
--------
The cats program prints out the different values in Column B for a
particular product.
Running this program doesn't affect anything, but is just informative.
Filter.Exe
----------
The filter program filters-out rows of files that are not included in this
language release as specified above.
Note that this program is an important step in making media because it does
the following important things:
>>> o loads the bom.txt COMPLETELY >>> this makes all the @ entries
(explained above) expand into the correct values.
The key call is for LoadFile ( "ALL" ). All the remaining utilities
will call LoadFile ( "<product>" ).
o filters out all files not included in this language release
o writes this information back out to file so that other utilities
can continue to process/write data from/to it.
Msize.Exe
---------
The misze program finds all the compressed and uncompressed file sizes for
each file specified in the bom file. The program then writes this
information back out to the bom.
Mlayout.Exe
-----------
The mlayout program calculates which files go on which piece of media.
For CDs, this is no big deal since ALL the files go on the same piece of
media. So, for CDs, we just assign all the files to go on Disk #1.
However, for floppies, the task is a bit more cumbersome. Firstly, we
need to know how much data the floppy can contain. This value is provided
by a paramter to mlayout.
Once we know the size of the media, mlayout uses a couple of nested loops
to perform the following until all the files have been assigned disk #s.
o starts working on disk #1
o first assigns all files hardcoded to this disk (Column U)
o then, by starting with the priority 1 value (Column P) decides if this
files with can go on the disk with space remaining. If a file won't fit
on a disk with space remaining, the priority value is bumped-up by one
to see if any files with the next priority can fit. A disk # is only
moved up when that disk is full.
o goes to the next disk # and performs the above 2 steps again.
Infs.Exe
--------
The Infs program puts the following information into an inf
filelist file section for later building of a complete inf file (Column J):
o disk # of file (Column U)
o name of the file (Column T)
o uncompressed file size (Column M)
o filelist section (Column K)
Dosnet.Exe
----------
tbd
Acllist.Exe
-----------
tbd
Build.Exe
---------
tbd
Diamwrap.Exe
------------
tbd
Mcpyfile.Exe
------------
tbd