[ 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, eeptiLongVal, eeptiShortVal, eeptiPointerVal, eeptiNone, eeptiBinary } 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; } // End of interface ExtendedError