5 Appendix A: Full IDL

For ease of implementation, this specification provides the full IDL, where "ms-dtyp.idl" is the IDL found in [MS-DTYP] Appendix A.

 import "ms-dtyp.idl";
  
 [                       
 uuid(14a8831c-bc82-11d2-8a64-0008c7457e5d),
 version(1.0),
 pointer_default(unique)
 ]
 interface ExtendedError
 {
  
 typedef struct tagEEAString
 {
 short nLength;
 [size_is(nLength)] byte *pString;
 } EEAString;
  
 typedef struct tagEEUString
 {
 short nLength;
 [size_is(nLength)] unsigned short *pString;
 } EEUString;
  
 typedef struct tagBinaryEEInfo
 {
 short nSize;
 [size_is(nSize)] unsigned char *pBlob;
 } BinaryEEInfo;
  
 typedef enum tagExtendedErrorParamTypesInternal
 {
    eeptiAnsiString = 1,
    eeptiUnicodeString = 2,
    eeptiLongVal = 3,
    eeptiShortValue = 4,
    eeptiPointerValue = 5,
    eeptiNone = 6,
    eeptiBinary = 7
 } ExtendedErrorParamTypesInternal;
  
  
 typedef struct tagParam
 {
 ExtendedErrorParamTypesInternal Type;
 [switch_type(short),switch_is(Type)] union {
 [case(1)] EEAString AnsiString;
 [case(2)] EEUString UnicodeString;
 [case(3)] long LVal;
 [case(4)] short IVal;
 [case(5)] __int64 PVal;
 [case(6)] ;
 [case(7)] BinaryEEInfo Blob;
 };
 } ExtendedErrorParam;
  
  
 typedef enum tagEEComputerNamePresent
 {
 eecnpPresent = 1,
 eecnpNotPresent
 } EEComputerNamePresent;
  
 typedef struct tagEEComputerName
 {
 EEComputerNamePresent Type;
 [switch_type(short),switch_is(Type)] union {
 [case(1)] EEUString Name;
 [case(2)] ;
 };
 } EEComputerName;
  
 typedef struct tagExtendedErrorInfo
 {
 struct tagExtendedErrorInfo * Next;
 EEComputerName ComputerName;
 unsigned long ProcessID;
 __int64 TimeStamp;
 unsigned long GeneratingComponent;
 unsigned long Status;
 unsigned short DetectionLocation;
 unsigned short Flags;
 short    nLen;
 [size_is(nLen)] ExtendedErrorParam Params[];
 } ExtendedErrorInfo;
  
 typedef ExtendedErrorInfo *ExtendedErrorInfoPtr;
 }
  
Show: