2.12.2 Reconstituting a File from an NT Backup File

An implementation creating a file F given an NT backup file MUST process all of the backup streams contained within the NT backup file.

For OBJECT_ID, REPARSE_DATA, and SECURITY_DATA backup streams, it SHOULD create the corresponding object ID, reparse point, or security descriptor on F, if the file system in which F resides supports those features. If there is more than one backup stream of any of these particular types (or of type DATA), the implementation creating F can either:

  • Select any one of the backup streams of that type, or <7>

  • Fail without reconstituting that stream due to the presence of more than one backup stream of that type

If the NT backup file contains a DATA backup stream, the code that creates F MUST put the data from the DATA backup stream into the main stream of F. If any SPARSE_BLOCK backup streams occur in the NT backup file after the DATA backup stream and before any ALTERNATE_DATA backup stream, the code that creates F MUST put the data that is contained in the SPARSE_BLOCK at the specified place in F's main stream. If there are SPARSE_BLOCKs and the file system storing F has support for sparse files, it SHOULD use the sparse file support to avoid allocating disk space for the portions of the main stream that are not described by the DATA or SPARSE_BLOCK backup stream.

If the NT backup file contains one or more ALTERNATE_DATA backup streams and the file system holding F supports ALTERNATE_DATA streams, the code that creates F SHOULD generate the appropriate named stream, using as the name the contents of the cStreamName field in the WIN32_STREAM_ID header. Processing of ALTERNATE_DATA streams MUST otherwise be identical to that of DATA streams, including the rules for SPARSE_BLOCKs.