2.1.5.12.8 FileCompressionInformation

OutputBuffer is of type FILE_COMPRESSION_INFORMATION as defined in [MS-FSCC] section 2.4.9.<163>

Pseudocode for the operation is as follows:

  • If OutputBufferSize is smaller than sizeof(FILE_COMPRESSION_INFORMATION), the operation MUST be failed with STATUS_INFO_LENGTH_MISMATCH.

  • The object store MUST initialize all fields in OutputBuffer to zero.

  • If Open.Stream.StreamType is DirectoryStream:

    • If Open.File.FileAttributes.FILE_ATTRIBUTE_COMPRESSED is TRUE:

      • The object store MUST set OutputBuffer.CompressionState to COMPRESSION_FORMAT_LZNT1.

    • Else:

      • The object store MUST set OutputBuffer.CompressionState to COMPRESSION_FORMAT_NONE.

    • EndIf

  • Else:

    • The object store MUST set OutputBuffer.CompressedFileSize to the number of bytes actually allocated on the underlying physical storage for storing the compressed data. This value MUST be a multiple of Open.File.Volume.ClusterSize and MUST be less than or equal to Open.Stream.AllocationSize.

    • If Open.Stream.IsCompressed is TRUE:

      • The object store MUST set OutputBuffer.CompressionState to COMPRESSION_FORMAT_LZNT1.

    • Else:

      • The object store MUST set OutputBuffer.CompressionState to COMPRESSION_FORMAT_NONE.

    • EndIf

  • EndIf

  • If OutputBuffer.CompressionState is not equal to COMPRESSION_FORMAT_NONE, the object store MUST set:

    • OutputBuffer.CompressedUnitShift to the base-2 logarithm of Open.File.Volume.CompressionUnitSize.

    • OutputBuffer.ChunkShift to the base-2 logarithm of Open.File.Volume.CompressedChunkSize.

    • OutputBuffer.ClusterShift to the base-2 logarithm of Open.File.Volume.ClusterSize.

  • EndIf

  • Upon successful completion of the operation, the object store MUST return:

    • ByteCount set to sizeof(FILE_COMPRESSION_INFORMATION).

    • Status set to STATUS_SUCCESS.