mirror of
https://github.com/SabreTools/SabreTools.Models.git
synced 2026-09-24 23:57:18 +00:00
Add OLE models
This commit is contained in:
23
SabreTools.Models/OLE/ArrayDimension.cs
Normal file
23
SabreTools.Models/OLE/ArrayDimension.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The ArrayDimension packet represents the size and index offset of a dimension of an array
|
||||
/// property type.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class ArrayDimension
|
||||
{
|
||||
/// <summary>
|
||||
/// An unsigned integer representing the size of the dimension.
|
||||
/// </summary>
|
||||
public uint Size { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A signed integer representing the index offset of the dimension. For
|
||||
/// example, an array dimension that is to be accessed with a 0-based index would have the value
|
||||
/// zero, whereas an array dimension that is to be accessed with a 1-based index would have the
|
||||
/// value 0x00000001.
|
||||
/// </summary>
|
||||
public int Value { get; set; }
|
||||
}
|
||||
}
|
||||
29
SabreTools.Models/OLE/ArrayHeader.cs
Normal file
29
SabreTools.Models/OLE/ArrayHeader.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The ArrayHeader packet represents the type and dimensions of an array property type.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class ArrayHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// MUST be set to the value obtained by clearing the VT_ARRAY (0x2000) bit of
|
||||
/// this array property's PropertyType value.
|
||||
/// </summary>
|
||||
public PropertyType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An unsigned integer representing the number of dimensions in the array
|
||||
/// property. MUST be at least 1 and at most 31.
|
||||
/// </summary>
|
||||
public uint NumDimensions { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be a sequence of ArrayDimension packets
|
||||
///
|
||||
/// The number of scalar values in an array property can be calculated from the ArrayHeader packet
|
||||
/// as the product of the Size fields of each of the ArrayDimension packets.
|
||||
/// </summary>
|
||||
public ArrayDimension[]? Dimensions { get; set; }
|
||||
}
|
||||
}
|
||||
19
SabreTools.Models/OLE/BLOB.cs
Normal file
19
SabreTools.Models/OLE/BLOB.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The BLOB packet represents binary data
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class BLOB
|
||||
{
|
||||
/// <summary>
|
||||
/// The size in bytes of the <see cref="Bytes"> field, not including padding (if any)
|
||||
/// </summary>
|
||||
public uint Size { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be an array of bytes, followed by zero padding to a multiple of 4 bytes.
|
||||
/// </summary>
|
||||
public byte[]? Bytes { get; set; }
|
||||
}
|
||||
}
|
||||
15
SabreTools.Models/OLE/CURRENCY.cs
Normal file
15
SabreTools.Models/OLE/CURRENCY.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The CURRENCY (Packet Version) packet represents a CURRENCY as specified in [MS-OAUT]
|
||||
/// section 2.2.24.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class CURRENCY
|
||||
{
|
||||
/// <summary>
|
||||
/// The value of the int64 field specified in [MS-OAUT] section 2.2.24.
|
||||
/// </summary>
|
||||
public ulong Value { get; set; }
|
||||
}
|
||||
}
|
||||
26
SabreTools.Models/OLE/ClipboardData.cs
Normal file
26
SabreTools.Models/OLE/ClipboardData.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The ClipboardData packet represents clipboard data
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class ClipboardData
|
||||
{
|
||||
/// <summary>
|
||||
/// The total size in bytes of the <see cref="Format"> and <see cref="Data"> fields,
|
||||
/// not including padding (if any).
|
||||
/// </summary>
|
||||
public uint Size { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An application-specific identifier for the format of the data in the
|
||||
/// <see cref="Data"> field.
|
||||
/// </summary>
|
||||
public uint Format { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be an array of bytes, followed by zero padding to a multiple of 4 bytes
|
||||
/// </summary>
|
||||
public byte[]? Data { get; set; }
|
||||
}
|
||||
}
|
||||
33
SabreTools.Models/OLE/CodePageString.cs
Normal file
33
SabreTools.Models/OLE/CodePageString.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The CodePageString packet represents a string whose encoding depends on the
|
||||
/// value of the property set's CodePage property.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class CodePageString
|
||||
{
|
||||
/// <summary>
|
||||
/// The size in bytes of the <see cref="Characters"/> field, including the null terminator,
|
||||
/// but not including padding (if any). If the property set's CodePage property
|
||||
/// has the value CP_WINUNICODE (0x04B0), then the value MUST be a multiple of 2
|
||||
/// </summary>
|
||||
public uint Size { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If <see cref="Size"/> is zero, this field MUST be zero bytes in length. If <see cref="Size"/>
|
||||
/// is nonzero and the CodePage property set's CodePage property has the value CP_WINUNICODE (0x04B0),
|
||||
/// then the value MUST be a null-terminated array of 16-bit Unicode characters, followed by zero
|
||||
/// padding to a multiple of 4 bytes. If <see cref="Size"/> is nonzero and the property set's CodePage
|
||||
/// property has any other value, it MUST be a null-terminated array of 8-bit characters from the code
|
||||
/// page identified by the CodePage property, followed by zero padding to a multiple of 4 bytes. The
|
||||
/// string represented by this field MAY contain embedded or additional trailing null characters and
|
||||
/// an OLEPS implementation MUST be able to handle such strings. However, the manner in which
|
||||
/// strings with embedded or additional trailing null characters are presented by the implementation
|
||||
/// to an application is implementation-specific. For maximum interoperability, an OLEPS
|
||||
/// implementation SHOULD NOT write strings with embedded or trailing null characters unless
|
||||
/// specifically requested to do so by an application.
|
||||
/// </summary>
|
||||
public string? Characters { get; set; }
|
||||
}
|
||||
}
|
||||
90
SabreTools.Models/OLE/Constants.cs
Normal file
90
SabreTools.Models/OLE/Constants.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
public static class Constants
|
||||
{
|
||||
#region Format IDs
|
||||
|
||||
public const string SummaryInformationFMTIDString = "F29F85E0-4FF9-1068-AB91-08002B27B3D9";
|
||||
public static readonly GUID SummaryInformationFMTIDGUID = new()
|
||||
{
|
||||
Data1 = 0xF29F85E0,
|
||||
Data2 = 0x4FF9,
|
||||
Data3 = 0x1068,
|
||||
Data4 = [0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9],
|
||||
};
|
||||
|
||||
public const string DocSummaryInformationFMTIDString = "D5CDD502-2E9C-101B-9397-08002B2CF9AE";
|
||||
public static readonly GUID DocSummaryInformationFMTIDGUID = new()
|
||||
{
|
||||
Data1 = 0xD5CDD502,
|
||||
Data2 = 0x2E9C,
|
||||
Data3 = 0x101B,
|
||||
Data4 = [0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE],
|
||||
};
|
||||
|
||||
public const string UserDefinedPropertiesFMTIDString = "D5CDD502-2E9C-101B-9397-08002B2CF9AE";
|
||||
public static readonly GUID UserDefinedPropertiesFMTIDGUID = new()
|
||||
{
|
||||
Data1 = 0xD5CDD502,
|
||||
Data2 = 0x2E9C,
|
||||
Data3 = 0x101B,
|
||||
Data4 = [0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE],
|
||||
};
|
||||
|
||||
public const string GlobalInfoFMTIDString = "56616F00-C154-11CE-8553-00AA00A1F95B";
|
||||
public static readonly GUID GlobalInfoFMTIDGUID = new()
|
||||
{
|
||||
Data1 = 0x56616F00,
|
||||
Data2 = 0xC154,
|
||||
Data3 = 0x11CE,
|
||||
Data4 = [0x85, 0x53, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x5B],
|
||||
};
|
||||
|
||||
public const string ImageContentsFMTIDString = "556616400-C154-11CE-8553-00AA00A1F95B";
|
||||
public static readonly GUID ImageContentsFMTIDGUID = new()
|
||||
{
|
||||
Data1 = 0x56616F00,
|
||||
Data2 = 0xC154,
|
||||
Data3 = 0x11CE,
|
||||
Data4 = [0x85, 0x53, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x5B],
|
||||
};
|
||||
|
||||
public const string ImageInfoFMTIDString = "556616400-C154-11CE-8553-00AA00A1F95B";
|
||||
public static readonly GUID ImageInfoFMTIDGUID = new()
|
||||
{
|
||||
Data1 = 0x56616F00,
|
||||
Data2 = 0xC154,
|
||||
Data3 = 0x11CE,
|
||||
Data4 = [0x85, 0x53, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x5B],
|
||||
};
|
||||
|
||||
public const string PropertyBagFMTIDString = "20001801-5DE6-11D1-8E38-00C04FB9386D";
|
||||
public static readonly GUID PropertyBagFMTIDGUID = new()
|
||||
{
|
||||
Data1 = 0x20001801,
|
||||
Data2 = 0x5DE6,
|
||||
Data3 = 0x11D1,
|
||||
Data4 = [0x8E, 0x38, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D],
|
||||
};
|
||||
|
||||
#endregion
|
||||
|
||||
#region Stream or Storage Names
|
||||
|
||||
public static readonly string SummaryInformationName = (byte)0x05 + "SummaryInformation";
|
||||
|
||||
public static readonly string DocSummaryInformationName = (byte)0x05 + "DocumentSummaryInformation";
|
||||
|
||||
public static readonly string UserDefinedPropertiesName = (byte)0x05 + "DocumentSummaryInformation";
|
||||
|
||||
public static readonly string GlobalInfoName = (byte)0x05 + "GlobalInfo";
|
||||
|
||||
public static readonly string ImageContentsName = (byte)0x05 + "ImageContents";
|
||||
|
||||
public static readonly string ImageInfoName = (byte)0x05 + "ImageInfo";
|
||||
|
||||
public const string ControlStreamName = "{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}";
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
35
SabreTools.Models/OLE/ControlStream.cs
Normal file
35
SabreTools.Models/OLE/ControlStream.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// A file that has one or more property sets associated with it through the alternate
|
||||
/// stream binding MUST have a control stream, which is an alternate stream with the name
|
||||
/// "{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}". This stream MUST contain the following packet.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class ControlStream
|
||||
{
|
||||
/// <summary>
|
||||
/// MUST be set to zero, and nonzero values MUST be rejected.
|
||||
/// </summary>
|
||||
public ushort Reserved1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be set to zero, and MUST be ignored.
|
||||
/// </summary>
|
||||
public ushort Reserved2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An application-provided value that MUST NOT be interpreted by the
|
||||
/// OLEPS implementation. If the application did not provide a value,
|
||||
/// it SHOULD be set to zero.
|
||||
/// </summary>
|
||||
public uint ApplicationState { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An application-provided value that MUST NOT be interpreted by the
|
||||
/// OLEPS implementation. If the application did not provide a value,
|
||||
/// it SHOULD be absent.
|
||||
/// </summary>
|
||||
public GUID? CLSID { get; set; }
|
||||
}
|
||||
}
|
||||
16
SabreTools.Models/OLE/DATE.cs
Normal file
16
SabreTools.Models/OLE/DATE.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The DATE (Packet Version) packet represents a DATE as specified in [MS-OAUT]
|
||||
/// section 2.2.25
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class DATE
|
||||
{
|
||||
/// <summary>
|
||||
/// The value of the DATE is an 8-byte IEEE floating-point number, as specified in
|
||||
/// [MS-OAUT] section 2.2.25.
|
||||
/// </summary>
|
||||
public ulong Value { get; set; }
|
||||
}
|
||||
}
|
||||
35
SabreTools.Models/OLE/DECIMAL.cs
Normal file
35
SabreTools.Models/OLE/DECIMAL.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The DECIMAL (Packet Version) packet represents a DECIMAL as specified in [MS-OAUT] section
|
||||
/// 2.2.26
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class DECIMAL
|
||||
{
|
||||
/// <summary>
|
||||
/// MUST be set to zero and MUST be ignored
|
||||
/// </summary>
|
||||
public ushort Reserved { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the scale field specified in [MS-OAUT] section 2.2.26
|
||||
/// </summary>
|
||||
public byte Scale { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the sign field specified in [MS-OAUT] section 2.2.26
|
||||
/// </summary>
|
||||
public byte Sign { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the Hi32 field specified in [MS-OAUT] section 2.2.26
|
||||
/// </summary>
|
||||
public uint Hi32 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the Lo64 field specified in [MS-OAUT] section 2.2.26
|
||||
/// </summary>
|
||||
public ulong Lo64 { get; set; }
|
||||
}
|
||||
}
|
||||
24
SabreTools.Models/OLE/Dictionary.cs
Normal file
24
SabreTools.Models/OLE/Dictionary.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The Dictionary packet represents all mappings between property identifiers and
|
||||
/// property names in a property set
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class Dictionary
|
||||
{
|
||||
/// <summary>
|
||||
/// n unsigned integer representing the number of entries in the Dictionary
|
||||
/// </summary>
|
||||
public uint NumEntries { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// All Entry fields MUST be a sequence of DictionaryEntry packets. Entries are
|
||||
/// not required to appear in any particular order.
|
||||
/// </summary>
|
||||
public DictionaryEntry[]? Entries { get; set; }
|
||||
|
||||
// Padding (variable): Padding, if necessary, to a total length that is a multiple of 4 bytes.
|
||||
// Padding would be after each dictionary entry
|
||||
}
|
||||
}
|
||||
35
SabreTools.Models/OLE/DictionaryEntry.cs
Normal file
35
SabreTools.Models/OLE/DictionaryEntry.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The DictionaryEntry packet represents a mapping between a property identifier and a
|
||||
/// property name
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class DictionaryEntry
|
||||
{
|
||||
/// <summary>
|
||||
/// An unsigned integer representing a property identifier. MUST be a valid
|
||||
/// PropertyIdentifier value in the range 0x00000002 to 0x7FFFFFFF, inclusive
|
||||
/// (this specifically excludes the property identifiers for any of the special
|
||||
/// properties specified in section 2.18).
|
||||
/// </summary>
|
||||
public PropertyIdentifier PropertyIdentifier { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If the property set's CodePage property has the value CP_WINUNICODE (0x04B0),
|
||||
/// MUST be the length of the Name field in 16-bit Unicode characters, including
|
||||
/// the null terminator but not including padding (if any). Otherwise, MUST be the
|
||||
/// length of the Name field in 8-bit characters, including the null terminator.
|
||||
/// </summary>
|
||||
public uint Length { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If the property set's CodePage property has the value CP_WINUNICODE (0x04B0),
|
||||
/// MUST be a null-terminated array of 16-bit Unicode characters, followed by zero
|
||||
/// padding to a multiple of 4 bytes. Otherwise, MUST be a null-terminated array of
|
||||
/// 8-bit characters from the code page identified by the CodePage property and MUST
|
||||
/// NOT be padded.
|
||||
/// </summary>
|
||||
public string? Name { get; set; }
|
||||
}
|
||||
}
|
||||
503
SabreTools.Models/OLE/Enums.cs
Normal file
503
SabreTools.Models/OLE/Enums.cs
Normal file
@@ -0,0 +1,503 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The PropertyIdentifier data type represents the property identifier of a property in a property set
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The SummaryInformation property set format, identified by FMTID_SummaryInformation
|
||||
/// ({F29F85E0-4FF9-1068-AB91-08002B27B3D9}), represents generic properties of a document. The properties
|
||||
/// specific to the SummaryInformation property set are specified in the following table. Except where
|
||||
/// otherwise stated, a SummaryInformation property set SHOULD have all of these properties, and SHOULD
|
||||
/// NOT have any other properties, except for the special properties specified in section 2.18.
|
||||
/// </remarks>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public enum PropertyIdentifier : uint
|
||||
{
|
||||
/// <summary>
|
||||
/// Property identifier for the Dictionary property
|
||||
/// </summary>
|
||||
DICTIONARY_PROPERTY_IDENTIFIER = 0x00000000,
|
||||
|
||||
/// <summary>
|
||||
/// Property identifier for the CodePage property
|
||||
/// </summary>
|
||||
CODEPAGE_PROPERTY_IDENTIFIER = 0x00000001,
|
||||
|
||||
/// <summary>
|
||||
/// Property identifier for the Locale property
|
||||
/// </summary>
|
||||
LOCALE_PROPERTY_IDENTIFIER = 0x80000000,
|
||||
|
||||
/// <summary>
|
||||
/// Property identifier for the Behavior property
|
||||
/// </summary>
|
||||
BEHAVIOR_PROPERTY_IDENTIFIER = 0x80000003,
|
||||
|
||||
#region SummaryInformation
|
||||
|
||||
/// <summary>
|
||||
/// The title of the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_TITLE = 0x00000002,
|
||||
|
||||
/// <summary>
|
||||
/// The subject of the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_SUBJECT = 0x00000003,
|
||||
|
||||
/// <summary>
|
||||
/// The author of the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_AUTHOR = 0x00000004,
|
||||
|
||||
/// <summary>
|
||||
/// Keywords related to the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_KEYWORDS = 0x00000005,
|
||||
|
||||
/// <summary>
|
||||
/// Comments related the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_COMMENTS = 0x00000006,
|
||||
|
||||
/// <summary>
|
||||
/// The application-specific template from which the document was created.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_TEMPLATE = 0x00000007,
|
||||
|
||||
/// <summary>
|
||||
/// The last author of the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_LASTAUTHOR = 0x00000008,
|
||||
|
||||
/// <summary>
|
||||
/// An application-specific revision number for this version of the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_REVNUMBER = 0x00000009,
|
||||
|
||||
/// <summary>
|
||||
/// A 64-bit unsigned integer indicating the total amount of time that
|
||||
/// has been spent editing the document in 100-nanosecond
|
||||
/// increments. MUST be encoded as a FILETIME by setting the
|
||||
/// dwLowDataTime field to the low 32-bits and the dwHighDateTime
|
||||
/// field to the high 32-bits.
|
||||
/// </summary>
|
||||
/// <remarks>VT_FILETIME</remarks>
|
||||
PIDSI_EDITTIME = 0x0000000A,
|
||||
|
||||
/// <summary>
|
||||
/// The most recent time that the document was printed.
|
||||
/// </summary>
|
||||
/// <remarks>VT_FILETIME</remarks>
|
||||
PIDSI_LASTPRINTED = 0x0000000B,
|
||||
|
||||
/// <summary>
|
||||
/// The time that the document was created.
|
||||
/// </summary>
|
||||
/// <remarks>VT_FILETIME</remarks>
|
||||
PIDSI_CREATE_DTM = 0x0000000C,
|
||||
|
||||
/// <summary>
|
||||
/// The most recent time that the document was saved.
|
||||
/// </summary>
|
||||
/// <remarks>VT_FILETIME</remarks>
|
||||
PIDSI_LASTSAVE_DTM = 0x0000000D,
|
||||
|
||||
/// <summary>
|
||||
/// The total number of pages in the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_I4</remarks>
|
||||
PIDSI_PAGECOUNT = 0x0000000E,
|
||||
|
||||
/// <summary>
|
||||
/// The total number of words in the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_I4</remarks>
|
||||
PIDSI_WORDCOUNT = 0x0000000F,
|
||||
|
||||
/// <summary>
|
||||
/// The total number of characters in the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_I4</remarks>
|
||||
PIDSI_CHARCOUNT = 0x00000010,
|
||||
|
||||
/// <summary>
|
||||
/// Application-specific clipboard data containing a thumbnail
|
||||
/// representing the document's contents. MAY be absent.
|
||||
/// </summary>
|
||||
/// <remarks>VT_CF</remarks>
|
||||
PIDSI_THUMBNAIL = 0x00000011,
|
||||
|
||||
/// <summary>
|
||||
/// The name of the application that was used to create the document.
|
||||
/// </summary>
|
||||
/// <remarks>VT_LPSTR</remarks>
|
||||
PIDSI_APPNAME = 0x00000012,
|
||||
|
||||
/// <summary>
|
||||
/// A 32-bit signed integer representing a set of application-suggested
|
||||
/// access control flags with the following values:
|
||||
/// - 0x00000001: Password protected
|
||||
/// - 0x00000002: Read-only recommended
|
||||
/// - 0x00000004: Read-only enforced
|
||||
/// - 0x00000008: Locked for annotations
|
||||
/// </summary>
|
||||
/// <remarks>VT_I4</remarks>
|
||||
PIDSI_DOC_SECURITY = 0x00000013,
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The PropertyType enumeration represents the type of a property in a property set. The set of types
|
||||
/// supported depends on the version of the property set, which is indicated by the Version field of the
|
||||
/// PropertySetStream packet. In addition, the property types not supported in simple property sets
|
||||
/// are specified as such. PropertyType is an enumeration, which MUST be one of the following values
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public enum PropertyType : ushort
|
||||
{
|
||||
/// <summary>
|
||||
/// Type is undefined, and the minimum property set version is 0
|
||||
/// </summary>
|
||||
VT_EMPTY = 0x0000,
|
||||
|
||||
/// <summary>
|
||||
/// Type is null, and the minimum property set version is 0
|
||||
/// </summary>
|
||||
VT_NULL = 0x0001,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 16-bit signed integer, and the minimum property set version is 0
|
||||
/// </summary>
|
||||
VT_I2 = 0x0002,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 32-bit signed integer, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_I4 = 0x0003,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 4-byte (single-precision) IEEE floating-point number, and the
|
||||
/// minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_R4 = 0x0004,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 8-byte (double-precision) IEEE floating-point number, and the
|
||||
/// minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_R8 = 0x0005,
|
||||
|
||||
/// <summary>
|
||||
/// Type is CURRENCY, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_CY = 0x0006,
|
||||
|
||||
/// <summary>
|
||||
/// Type is DATE, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_DATE = 0x0007,
|
||||
|
||||
/// <summary>
|
||||
/// Type is CodePageString, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_BSTR = 0x0008,
|
||||
|
||||
/// <summary>
|
||||
/// Type is HRESULT, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_ERROR = 0x000A,
|
||||
|
||||
/// <summary>
|
||||
/// Type is VARIANT_BOOL, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_BOOL = 0x000B,
|
||||
|
||||
/// <summary>
|
||||
/// Type is DECIMAL, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_DECIMAL = 0x000E,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 1-byte signed integer, and the minimum property set version
|
||||
/// is 1.
|
||||
/// </summary>
|
||||
VT_I1 = 0x0010,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 1-byte unsigned integer, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_UI1 = 0x0011,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 2-byte unsigned integer, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_UI2 = 0x0012,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 4-byte unsigned integer, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_UI4 = 0x0013,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 8-byte signed integer, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_I8 = 0x0014,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 8-byte unsigned integer, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_UI8 = 0x0015,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 4-byte signed integer, and the minimum property set version
|
||||
/// is 1.
|
||||
/// </summary>
|
||||
VT_INT = 0x0016,
|
||||
|
||||
/// <summary>
|
||||
/// Type is 4-byte unsigned integer, and the minimum property set version
|
||||
/// is 1.
|
||||
/// </summary>
|
||||
VT_UINT = 0x0017,
|
||||
|
||||
/// <summary>
|
||||
/// Type is CodePageString, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_LPSTR = 0x001E,
|
||||
|
||||
/// <summary>
|
||||
/// Type is UnicodeString, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_LPWSTR = 0x001F,
|
||||
|
||||
/// <summary>
|
||||
/// Type is FILETIME, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_FILETIME = 0x0040,
|
||||
|
||||
/// <summary>
|
||||
/// Type is binary large object (BLOB), and the minimum property set
|
||||
/// version is 0.
|
||||
/// </summary>
|
||||
VT_BLOB = 0x0041,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Stream, and the minimum property set version is 0. VT_STREAM
|
||||
/// is not allowed in a simple property set.
|
||||
/// </summary>
|
||||
VT_STREAM = 0x0042,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Storage, and the minimum property set version is 0. VT_STORAGE
|
||||
/// is not allowed in a simple property set.
|
||||
/// </summary>
|
||||
VT_STORAGE = 0x0043,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Stream representing an Object in an application-specific manner,
|
||||
/// and the minimum property set version is 0. VT_STREAMED_Object is not
|
||||
/// allowed in a simple property set.
|
||||
/// </summary>
|
||||
VT_STREAMED_Object = 0x0044,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Storage representing an Object in an application-specific manner,
|
||||
/// and the minimum property set version is 0. VT_STORED_Object is not
|
||||
/// allowed in a simple property set.
|
||||
/// </summary>
|
||||
VT_STORED_Object = 0x0045,
|
||||
|
||||
/// <summary>
|
||||
/// Type is BLOB representing an object in an application-specific manner.
|
||||
/// The minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_BLOB_Object = 0x0046,
|
||||
|
||||
/// <summary>
|
||||
/// Type is PropertyIdentifier, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_CF = 0x0047,
|
||||
|
||||
/// <summary>
|
||||
/// Type is CLSID, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_CLSID = 0x0048,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Stream with application-specific version GUID (VersionedStream).
|
||||
/// The minimum property set version is 0. VT_VERSIONED_STREAM is not allowed
|
||||
/// in a simple property set.
|
||||
/// </summary>
|
||||
VT_VERSIONED_STREAM = 0x0049,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector, and the minimum property set version is 0
|
||||
/// </summary>
|
||||
VT_VECTOR = 0x1000,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of 1-byte unsigned integers, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_UI1 = 0x1011,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of 2-byte unsigned integers, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_UI2 = 0x1012,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of 4-byte unsigned integers, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_UI4 = 0x1013,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of 8-byte signed integers, and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_I8 = 0x1014,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of 8-byte unsigned integers and the minimum property set version
|
||||
/// is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_UI8 = 0x1015,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of CodePageString, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_LPSTR = 0x101E,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of UnicodeString, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_LPWSTR = 0x101F,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of FILETIME, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_FILETIME = 0x1040,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of PropertyIdentifier, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_CF = 0x1047,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Vector of CLSID, and the minimum property set version is 0.
|
||||
/// </summary>
|
||||
VT_VECTOR_CLSID = 0x1048,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 16-bit signed integers, and the minimum property set version
|
||||
/// is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_I2 = 0x2002,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 32-bit signed integers, and the minimum property set version
|
||||
/// is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_I4 = 0x2003,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 4-byte (single-precision) IEEE floating-point numbers, and the
|
||||
/// minimum property set version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_R4 = 0x2004,
|
||||
|
||||
/// <summary>
|
||||
/// Type is IEEE floating-point numbers, and the minimum property set version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_R8 = 0x2005,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of CURRENCY, and the minimum property set version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_CY = 0x2006,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of DATE, and the minimum property set version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_DATE = 0x2007,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of CodePageString, and the minimum property set version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_BSTR = 0x2008,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of HRESULT, and the minimum property set version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_ERROR = 0x200A,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of VARIANT_BOOL, and the minimum property set version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_BOOL = 0x200B,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of variable-typed properties, and the minimum property set
|
||||
/// version is 1
|
||||
/// </summary>
|
||||
VT_ARRAY_VARIANT = 0x200C,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of DECIMAL, and the minimum property set version is 1
|
||||
/// </summary>
|
||||
VT_ARRAY_DECIMAL = 0x200E,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 1-byte signed integers, and the minimum property set
|
||||
/// version is 1
|
||||
/// </summary>
|
||||
VT_ARRAY_I1 = 0x2010,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 1-byte unsigned integers, and the minimum property set
|
||||
/// version is 1
|
||||
/// </summary>
|
||||
VT_ARRAY_UI1 = 0x2011,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 2-byte unsigned integers, and the minimum property set
|
||||
/// version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_UI2 = 0x2012,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 4-byte unsigned integers, and the minimum property set
|
||||
/// version is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_UI4 = 0x2013,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 4-byte signed integers, and the minimum property set version
|
||||
/// is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_INT = 0x2016,
|
||||
|
||||
/// <summary>
|
||||
/// Type is Array of 4-byte unsigned integers, and the minimum property set version
|
||||
/// is 1.
|
||||
/// </summary>
|
||||
VT_ARRAY_UINT = 0x2017,
|
||||
}
|
||||
}
|
||||
19
SabreTools.Models/OLE/FILETIME.cs
Normal file
19
SabreTools.Models/OLE/FILETIME.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The FILETIME (Packet Version) packet represents a FILETIME structure ([MS-DTYP] section 2.3.3
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class FILETIME
|
||||
{
|
||||
/// <summary>
|
||||
/// The value of the dwLowDateTime field specified in [MS-DTYP] section 2.3.3.
|
||||
/// </summary>
|
||||
public uint LowDateTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the dwHighDateTime field specified in [MS-DTYP] section 2.3.3.
|
||||
/// </summary>
|
||||
public uint HighDateTime { get; set; }
|
||||
}
|
||||
}
|
||||
29
SabreTools.Models/OLE/GUID.cs
Normal file
29
SabreTools.Models/OLE/GUID.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The GUID (Packet Version) packet represents a GUID
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class GUID
|
||||
{
|
||||
/// <summary>
|
||||
/// The value of the Data1 field specified in [MS-DTYP] section 2.3.4
|
||||
/// </summary>
|
||||
public uint Data1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the Data2 field specified in [MS-DTYP] section 2.3.4
|
||||
/// </summary>
|
||||
public ushort Data2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the Data3 field specified in [MS-DTYP] section 2.3.4
|
||||
/// </summary>
|
||||
public ushort Data3 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The value of the Data4 field specified in [MS-DTYP] section 2.3.4
|
||||
/// </summary>
|
||||
public byte[]? Data4 { get; set; }
|
||||
}
|
||||
}
|
||||
19
SabreTools.Models/OLE/IndirectPropertyName.cs
Normal file
19
SabreTools.Models/OLE/IndirectPropertyName.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The IndirectPropertyName packet represents the name of a stream or storage as used in the
|
||||
/// representation of the following property types in a non-simple property set: VT_STREAM (0x0042),
|
||||
/// VT_STORAGE (0x0043), VT_STREAMED_OBJECT (0x0044), VT_STORED_OBJECT (0x0044), and
|
||||
/// VT_VERSIONED_STREAM (0x0049). It MUST be represented as a CodePageString, and its value MUST
|
||||
/// be derived from the property identifier of the property represented according to the following
|
||||
/// Augmented Backus–Naur Form (ABNF) [RFC4234] syntax.
|
||||
///
|
||||
/// Indirectproperty = "prop" propertyIdentifier
|
||||
///
|
||||
/// Where PropertyIdentifier is the decimal string representation of the property identifier. This property
|
||||
/// identifier MUST be a valid PropertyIdentifier value and MUST NOT be the property identifier for any of
|
||||
/// the special properties specified in section 2.18.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class IndirectPropertyName : CodePageString { }
|
||||
}
|
||||
23
SabreTools.Models/OLE/PropertyIdentifierAndOffset.cs
Normal file
23
SabreTools.Models/OLE/PropertyIdentifierAndOffset.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The PropertyIdentifierAndOffset packet is used in the PropertySet packet to represent a
|
||||
/// property identifier and the byte offset of the property in the PropertySet packet
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class PropertyIdentifierAndOffset
|
||||
{
|
||||
/// <summary>
|
||||
/// An unsigned integer representing the property identifier of a property
|
||||
/// in the property set. MUST be a valid PropertyIdentifier value.
|
||||
/// </summary>
|
||||
public PropertyIdentifier PropertyIdentifier { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An unsigned integer representing the offset in bytes from the beginning
|
||||
/// of the PropertySet packet to the beginning of the Property field for the
|
||||
/// property represented. MUST be a multiple of 4 bytes.
|
||||
/// </summary>
|
||||
public uint Offset { get; set; }
|
||||
}
|
||||
}
|
||||
36
SabreTools.Models/OLE/PropertySet.cs
Normal file
36
SabreTools.Models/OLE/PropertySet.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The PropertySet packet represents a property set.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class PropertySet
|
||||
{
|
||||
/// <summary>
|
||||
/// MUST be the total size in bytes of the PropertySet packet
|
||||
/// </summary>
|
||||
public uint Size { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An unsigned integer representing the number of properties in the
|
||||
/// property set.
|
||||
/// </summary>
|
||||
public uint NumProperties { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// All PropertyIdentifierAndOffset fields MUST be a sequence of
|
||||
/// PropertyIdentifierAndOffset packets. The sequence MUST be in order of
|
||||
/// increasing value of the Offset field. Packets are not required to be
|
||||
/// in any particular order with regard to the value of the PropertyIdentifier
|
||||
/// field.
|
||||
/// </summary>
|
||||
public PropertyIdentifierAndOffset[]? PropertyIdentifierAndOffsets { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Each Property field is a sequence of property values, each of which MUST
|
||||
/// be represented by a TypedPropertyValue packet or a Dictionary packet in
|
||||
/// the special case of the Dictionary property.
|
||||
/// </summary>
|
||||
public object[]? Properties { get; set; }
|
||||
}
|
||||
}
|
||||
106
SabreTools.Models/OLE/PropertySetStream.cs
Normal file
106
SabreTools.Models/OLE/PropertySetStream.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The PropertySetStream packet specifies the stream format for simple property
|
||||
/// sets and the stream format for the CONTENTS stream in the Non-Simple Property
|
||||
/// Set Storage Format. A simple property set MUST be represented by a stream
|
||||
/// containing a PropertySetStream packet.
|
||||
///
|
||||
/// The PropertySetStream packet usually represents exactly one property set, but
|
||||
/// for historical reasons, the DocumentSummaryInfo and UserDefinedProperties
|
||||
/// property sets are represented in the same stream.In this special case, a
|
||||
/// PropertySetStream might represent two property sets.
|
||||
///
|
||||
/// An implementation SHOULD enforce a limit on the total size of a PropertySetStream
|
||||
/// packet. This limit MUST be at least 262,144 bytes, and for maximum interoperability
|
||||
/// SHOULD be 2,097,152 bytes.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class PropertySetStream
|
||||
{
|
||||
/// <summary>
|
||||
/// MUST be set to 0xFFFE
|
||||
/// </summary>
|
||||
public ushort ByteOrder { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An unsigned integer indicating the version number of the property set (or
|
||||
/// property sets). MUST be 0x0000 or 0x0001. An OLEPS implementation MUST
|
||||
/// accept version 0 property sets and SHOULD<5> also accept version 1 property
|
||||
/// sets. This field MUST be set to 0x0001 if the property set or property sets
|
||||
/// use any of the following features not supported by version 0 property sets:
|
||||
/// - Property types not supported for version 0 property sets, as specified in
|
||||
/// the PropertyType enumeration.
|
||||
/// - The Behavior property.
|
||||
///
|
||||
/// If the property set does not use any of these features, this field SHOULD be
|
||||
/// set to 0x0000 for maximum interoperability.
|
||||
/// </summary>
|
||||
public ushort Version { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An implementation-specific value that SHOULD be ignored, except possibly to
|
||||
/// report this value to applications. It SHOULD NOT be interpreted by the
|
||||
/// OLEPS implementation.
|
||||
/// </summary>
|
||||
public uint SystemIdentifier { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be a GUID (Packet Version) packet representing the associated CLSID of
|
||||
/// the property set (or property sets). If no CLSID is provided by the
|
||||
/// application, it SHOULD be set to GUID_NULL by default.
|
||||
/// </summary>
|
||||
public GUID? CLSID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An unsigned integer indicating the number of property sets represented by
|
||||
/// this PropertySetStream structure. MUST be either 0x00000001 or 0x00000002.
|
||||
///
|
||||
/// - 0x00000001: This structure contains one property set
|
||||
/// - 0x00000002: This structure contains two property sets.
|
||||
/// The optional fields for PropertySet 1 are present.
|
||||
/// </summary>
|
||||
public uint NumPropertySets { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A GUID that MUST be set to the FMTID of the property set represented by the
|
||||
/// field PropertySet 0. If NumPropertySets has the value 0x00000002, then this
|
||||
/// GUID MUST be set to FMTID_DocSummaryInformation
|
||||
/// ({D5CDD502-2E9C-101B-9397-08002B2CF9AE}).
|
||||
/// </summary>
|
||||
public GUID? FMTID0 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// An unsigned integer that MUST be set to the offset in bytes from the beginning
|
||||
/// of this PropertySetStream structure to the beginning of the field PropertySet 0.
|
||||
/// </summary>
|
||||
public uint Offset0 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If NumPropertySets has the value 0x00000002, it MUST be set to FMTID_UserDefinedProperties
|
||||
/// ({D5CDD505-2E9C-101B-9397-08002B2CF9AE}). Otherwise, it MUST be absent.
|
||||
/// </summary>
|
||||
public GUID? FMTID1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If NumPropertySets has the value 0x00000002, it MUST be set to the offset in bytes
|
||||
/// from the beginning of this PropertySetStream structure to the beginning of the
|
||||
/// field PropertySet 1. Otherwise, it MUST be absent.
|
||||
/// </summary>
|
||||
public uint? Offset1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be a PropertySet packet
|
||||
/// </summary>
|
||||
public PropertySet? PropertySet0 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If NumPropertySets has the value 0x00000002, it MUST be a PropertySet packet.
|
||||
/// Otherwise, it MUST be absent.
|
||||
/// </summary>
|
||||
public PropertySet? PropertySet1 { get; set; }
|
||||
|
||||
// Padding (variable): Contains additional padding added by the implementation.
|
||||
// If present, padding MUST be zeroes and MUST be ignored.
|
||||
}
|
||||
}
|
||||
27
SabreTools.Models/OLE/TypedPropertyValue.cs
Normal file
27
SabreTools.Models/OLE/TypedPropertyValue.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The TypedPropertyValue structure represents the typed value of a property in a property set
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class TypedPropertyValue
|
||||
{
|
||||
/// <summary>
|
||||
/// MUST be a value from the PropertyType enumeration, indicating the type of
|
||||
/// property represented.
|
||||
/// </summary>
|
||||
public PropertyType Type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be set to zero, and any nonzero value SHOULD be rejected
|
||||
/// </summary>
|
||||
public ushort Padding { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be the value of the property represented and serialized according to
|
||||
/// the value of Type as follows.
|
||||
/// </summary>
|
||||
/// <remarks>See documentation for required lengths</remarks>
|
||||
public byte[]? Value { get; set; }
|
||||
}
|
||||
}
|
||||
23
SabreTools.Models/OLE/UnicodeString.cs
Normal file
23
SabreTools.Models/OLE/UnicodeString.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The UnicodeString packet represents a Unicode string.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class UnicodeString
|
||||
{
|
||||
/// <summary>
|
||||
/// The length in 16-bit Unicode characters of the <see cref="Characters"/> field, including the null
|
||||
/// terminator, but not including padding (if any).
|
||||
/// </summary>
|
||||
public uint Length { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// If <see cref="Length"/> is zero, this field MUST be zero bytes in length. If <see cref="Length"/> is
|
||||
/// nonzero, this field MUST be a null-terminated array of 16-bit Unicode characters, followed by zero
|
||||
/// padding to a multiple of 4 bytes. The string represented by this field SHOULD NOT contain
|
||||
/// embedded or additional trailing null characters.
|
||||
/// </summary>
|
||||
public string? Characters { get; set; }
|
||||
}
|
||||
}
|
||||
14
SabreTools.Models/OLE/VectorHeader.cs
Normal file
14
SabreTools.Models/OLE/VectorHeader.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The VectorHeader packet represents the number of scalar values in a vector property type.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class VectorHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// An unsigned integer indicating the number of scalar values following the header.
|
||||
/// </summary>
|
||||
public uint Length { get; set; }
|
||||
}
|
||||
}
|
||||
19
SabreTools.Models/OLE/VersionedStream.cs
Normal file
19
SabreTools.Models/OLE/VersionedStream.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
namespace SabreTools.Models.OLE
|
||||
{
|
||||
/// <summary>
|
||||
/// The VersionedStream packet represents a stream with an application-specific version GUID.
|
||||
/// </summary>
|
||||
/// <see href="https://winprotocoldoc.z19.web.core.windows.net/MS-OLEPS/%5bMS-OLEPS%5d.pdf"/>
|
||||
public class VersionedStream
|
||||
{
|
||||
/// <summary>
|
||||
/// MUST be a GUID (Packet Version).
|
||||
/// </summary>
|
||||
public GUID? VersionGuid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// MUST be an IndirectPropertyName.
|
||||
/// </summary>
|
||||
public IndirectPropertyName? StreamName { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user