[WMI, guid("{F883CBB0-CCA4-11d0-A4F8-00A0C9062910}")]
class UnicodeString
{
    [read, Id(1)]
    short Length;

    [read, Id(2), WmiSizeIs("Length")]
    short String[];
};


//
// Standard class for reporting serial port information
//
[WMI, guid("{85F64E01-5A9B-11d0-A838-00AA0060D45C}"),
 locale("ms\\0x409"),
 WmiHelp009("English.hlp"),
 WmiHelp010("French.hlp"),
 WmiBaseHelpId(0x20),
 WmiClassHelpId(0x1f),
 WmiExpense(1)]
class StandardSerialInformation
{

//
// InstanceName and Active are the required properties for WBEM to be able to
// manage WMI data blocks. The must not have Id's associated with them.
    [key, read] 
     UnicodeString embedding InstanceName;  // Instance name returned from WMI

    [read]
     boolean Active;

//
// This is the first data item in the blob and is a 64 bit integer and is readonly
    [read,
     Id(1),
     WmiScale(0),
     WmiCounterType(0x00000000),
     WmiComplexity(1),
     WmiVolatility(1000)]
    uint64 BytesSent;                          // bytes sent on port

//
// This is the second data item in the blob and is also a 64 bit integer and is
// readable or writable.
    [read,
     write,
     Id(2),
     WmiScale(0), 
     WmiCounterType(0x00000000),
     WmiVolatility(1000)]
    uint64 BytesReceived;                      // Bytes received on port

//
// This data item is only present in version 2 or higher of the data block and is the 
// fourth data item in the data block. It is a read only counted unicode string.
    [read,
     WmiVersion(2),
     Id(4),
     WmiScale(0),              
     WmiCounterType(0x00000b00),
     WmiVolatility(60000)] 
    UnicodeString embedding Owner;              // Who owns the port 


//
// This is the third data item in the data block and is part of version 1 and higher
// of the data block. It is a fixed length array of 16 bytes. Note that the order in 
// the MOF class definition is not relevant to the order in the data block
    [read, write,
     Id(3),
     WmiScale(0),
     WmiCounterType(0x00000300)]
    byte Status[/*16*/];                             // Status bit array

    //
    // This the fifth data item in the data block and is only in version 3 and higher
    // of the data block.
    [read,
     Id(5),
     WmiVersion(3),
     WmiScale(0),
     WmiCounterType(0x00000000),
     WmiComplexity(1),
     WmiVolatility(1000)]
    uint32 XmitDescriptorCount;

    //
    // This the sixth data item in the data block and is only in version 3 and higher
    // of the data block. It is a variable length array of XmitDescriptor structures.
    // The number of elements in the array can be found in the XmitDescriptorCount 
    // property.
    [read,
     Id(6),
     WmiSizeIs("XmitDescriptorCount"),
     WmiScale(0),
     WmiCounterType(0x00000000),
     WmiComplexity(1),
     WmiVolatility(1000)]
    XmitDescriptor embedding XmitBufferSize[];

};

[WMI, guid("{F883CBB1-CCA4-11d0-A4F8-00A0C9062910}")]
class XmitDescriptor
{
    [read, Id(1)] int32 DestinationIndex;
    [read, Id(2)] int32 DestinationTarget;
};

[guid("{85F64E02-5A9B-11d0-A838-00AA0060D45C}"),
 locale("ms\\0x409"),
 WmiHelp009("English.hlp"),
 WmiHelp010("French.hlp"),
 WmiBaseHelpId(0x20),
 WmiClassHelpId(0x1f),
 WmiExpense(1),
 WmiEvent]
class SerialSendEvent
{
//
// InstanceName and Active are the required properties for WBEM to be able to
// manage WMI data blocks. The must not have Id's associated with them.
    [key, read] 
     UnicodeString embedding InstanceName;

    [read]
     boolean Active;

//
// This data item is an event that can be enabled by a data consumer. The 
// SendEventTrigger data item can be used to set or read the trigger for event 
// generation while the SendEventRate data item can be set or read to regulate the 
// event generation rate.
    [read,
     Id(1),
     WmiScale(0),               
     WmiCounterType(0x00000000),
     WmiEvent,
     WmiEventTrigger("SendEventTrigger"),
         WmiEventRate("SendEventRate")]
        int32 SendEventValue;

    [read,
     write,
     Id(2)]
    int32 SendEventRate;

    [read,
     write,
     Id(3)]
    int32 SendEventTrigger;
};