This function can be called during system startup before dos.library is
available. In this case filesystem loading will be delayed until dos.library
started up. Delayed loading will be handled automatically without any caller's
intervention.

root - PartitionHandle, where to add the new partition
taglist - tags that specify more information about the partition
unknown tags are ignored
PT_DOSENVEC - ptr to a DosEnvec
de_LowCyl and de_HighCyl specify start and end of cylinder
de_Reserved, de_Bootblocks, ...
de_Surfaces, de_BlocksPerTrack, ... are inherited from "root"
PT_TYPE - partition type (depends on PartitionTable type)
PT_POSITION - position number within the partition table (MBR->PC)
PT_ACTIVE - set this partition active (MBR->PC)
PT_NAME - set partition name (HD0, HD1, ...)

ph - PartitionHandle to the table
taglist - Taglist specifying arguments. Possible tags are:
FST_ID - specify ID of the filesystem.
FST_NAME - specify name of the filesystem.
If more than one condition is specified for the search, logical
AND will be applied to them. Empty taglist will give you the first
filesystem in the list.

Name is returned as a pointer to internally allocated string. You should copy
it if you want to keep it after filesystem's partition table had been closed.
The following fields in struct FileSysEntry will not be filled in:
- Node name
- fse_Handler
- fse_SegList
You need to query for filesystem's name separately and copy it into BSTR
yourself, if you need to. Loading the handler is done by LoadFileSystem()
function.

Nested partition tables (e. g. RDB subpartitions on PC MBR drive) are treated as virtual disks.
In this case start and end block numbers are relative to the beginning of the virtual disk
(which is represented by parent partition containing the RDB itself), not absolute numbers.
The same applies to DriveGeomerty and geometry-related fields in DosEnvec structure.
Note that geometry data can be stored on disk in the partition table ifself (RDB for example), and
this way it can not match physical device's geometry (for example, if the disk was partitioned on
another operating system which used virtual geometry). In this case you might need to adjust these
data in order to mount the file system correctly (if absolute start/end blocks are not
cylinder-aligned).
Starting from V2, partition.library always provides default values for all attributes, even for those
not listed as readable in QueryPartitionAttrs() results.

Open a partition table. On success root->list will be filled with a
list of PartitionHandles. If one partition contains more
subpartitions, the caller should call OpenPartitionTable() on the
PartitionHandle recursively.

Partition - a handle to a partition to read from
Buffer - a pointer to a data buffer
DataSize - Size of data to read in bytes. This size must be a multiple of block size,
in order to ensure correct operation
StartBlock - Number of the first block to start reading from.

Partition - a handle to a partition to read from
Buffer - a pointer to a data buffer
DataSize - Size of data to read in bytes. This size must be a multiple of block size,
in order to ensure correct operation.
StartBlock - Number of the first block to start writing from.