zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

mi.h (146572B) - Raw


      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 
      7 #include <winapifamily.h>
      8 
      9 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
     10 
     11 #ifndef _MI_h
     12 #define _MI_h
     13 
     14 #include <stddef.h>
     15 #include <stdio.h>
     16 #include <string.h>
     17 
     18 #pragma pack(push, 8)
     19 
     20 #if defined(MI_CHAR_TYPE)
     21 #if (MI_CHAR_TYPE != 1) && (MI_CHAR_TYPE != 2)
     22 #error "MI_CHAR_TYPE must be 1 or 2"
     23 #endif
     24 #else
     25 #define MI_CHAR_TYPE 2
     26 #endif
     27 
     28 #if (MI_CHAR_TYPE == 2)
     29 #define MI_USE_WCHAR
     30 #endif
     31 
     32 #ifndef MI_CONST
     33 #define MI_CONST const
     34 #endif
     35 
     36 #define MI_MAJOR ((MI_Uint32)1)
     37 #define MI_MINOR ((MI_Uint32)0)
     38 #define MI_REVISON ((MI_Uint32)0)
     39 #define MI_MAKE_VERSION(MAJ, MIN, REV) ((MAJ << 16) | (MIN << 8) | REV)
     40 #define MI_VERSION MI_MAKE_VERSION(MI_MAJOR, MI_MINOR, MI_REVISON)
     41 
     42 #define MI_UNREFERENCED_PARAMETER(P) (P)
     43 
     44 #define MI_EXPORT __declspec(dllexport)
     45 
     46 #define MI_MAIN_CALL __cdecl
     47 
     48 #define MI_CALL __stdcall
     49 
     50 #ifdef _MANAGED_PURE
     51 #define MI_INLINE_CALL
     52 #else
     53 #define MI_INLINE_CALL MI_CALL
     54 #endif
     55 
     56 #define MI_INLINE static __inline
     57 
     58 #define MI_OFFSETOF(STRUCT,FIELD) (((ptrdiff_t)&(((STRUCT*)1)->FIELD))-1)
     59 
     60 #ifdef __cplusplus
     61 #define MI_EXTERN_C extern "C"
     62 #else
     63 #define MI_EXTERN_C extern
     64 #endif
     65 
     66 #define MI_COUNT(X) (sizeof(X)/sizeof(X[0]))
     67 
     68 #if (MI_CHAR_TYPE == 1)
     69 #define MI_T(STR) STR
     70 #else
     71 #define MI_T(STR) L##STR
     72 #endif
     73 
     74 #define MI_LL(X) X##i64
     75 #define MI_ULL(X) X##ui64
     76 
     77 typedef struct _MI_Server MI_Server;
     78 typedef struct _MI_Context MI_Context;
     79 typedef struct _MI_ClassDecl MI_ClassDecl;
     80 typedef struct _MI_Instance MI_Instance;
     81 typedef struct _MI_Filter MI_Filter;
     82 typedef struct _MI_PropertySet MI_PropertySet;
     83 typedef struct _MI_Qualifier MI_Qualifier;
     84 typedef struct _MI_Session MI_Session;
     85 typedef struct _MI_ServerFT MI_ServerFT;
     86 typedef struct _MI_ProviderFT MI_ProviderFT;
     87 typedef struct _MI_PropertySetFT MI_PropertySetFT;
     88 typedef struct _MI_InstanceFT MI_InstanceFT;
     89 typedef struct _MI_ContextFT MI_ContextFT;
     90 typedef struct _MI_FilterFT MI_FilterFT;
     91 typedef struct _MI_Class MI_Class;
     92 typedef struct _MI_InstanceExFT MI_InstanceExFT;
     93 
     94 typedef enum _MI_Result {
     95   MI_RESULT_OK = 0,
     96   MI_RESULT_FAILED = 1,
     97   MI_RESULT_ACCESS_DENIED = 2,
     98   MI_RESULT_INVALID_NAMESPACE = 3,
     99   MI_RESULT_INVALID_PARAMETER = 4,
    100   MI_RESULT_INVALID_CLASS = 5,
    101   MI_RESULT_NOT_FOUND = 6,
    102   MI_RESULT_NOT_SUPPORTED = 7,
    103   MI_RESULT_CLASS_HAS_CHILDREN = 8,
    104   MI_RESULT_CLASS_HAS_INSTANCES = 9,
    105   MI_RESULT_INVALID_SUPERCLASS = 10,
    106   MI_RESULT_ALREADY_EXISTS = 11,
    107   MI_RESULT_NO_SUCH_PROPERTY = 12,
    108   MI_RESULT_TYPE_MISMATCH = 13,
    109   MI_RESULT_QUERY_LANGUAGE_NOT_SUPPORTED = 14,
    110   MI_RESULT_INVALID_QUERY = 15,
    111   MI_RESULT_METHOD_NOT_AVAILABLE = 16,
    112   MI_RESULT_METHOD_NOT_FOUND = 17,
    113   MI_RESULT_NAMESPACE_NOT_EMPTY = 20,
    114   MI_RESULT_INVALID_ENUMERATION_CONTEXT = 21,
    115   MI_RESULT_INVALID_OPERATION_TIMEOUT = 22,
    116   MI_RESULT_PULL_HAS_BEEN_ABANDONED = 23,
    117   MI_RESULT_PULL_CANNOT_BE_ABANDONED = 24,
    118   MI_RESULT_FILTERED_ENUMERATION_NOT_SUPPORTED = 25,
    119   MI_RESULT_CONTINUATION_ON_ERROR_NOT_SUPPORTED = 26,
    120   MI_RESULT_SERVER_LIMITS_EXCEEDED = 27,
    121   MI_RESULT_SERVER_IS_SHUTTING_DOWN = 28
    122 } MI_Result;
    123 
    124 typedef enum _MI_ErrorCategory {
    125   MI_ERRORCATEGORY_NOT_SPECIFIED = 0,
    126   MI_ERRORCATEGORY_OPEN_ERROR = 1,
    127   MI_ERRORCATEGORY_CLOS_EERROR = 2,
    128   MI_ERRORCATEGORY_DEVICE_ERROR = 3,
    129   MI_ERRORCATEGORY_DEADLOCK_DETECTED = 4,
    130   MI_ERRORCATEGORY_INVALID_ARGUMENT = 5,
    131   MI_ERRORCATEGORY_INVALID_DATA = 6,
    132   MI_ERRORCATEGORY_INVALID_OPERATION = 7,
    133   MI_ERRORCATEGORY_INVALID_RESULT = 8,
    134   MI_ERRORCATEGORY_INVALID_TYPE = 9,
    135   MI_ERRORCATEGORY_METADATA_ERROR = 10,
    136   MI_ERRORCATEGORY_NOT_IMPLEMENTED = 11,
    137   MI_ERRORCATEGORY_NOT_INSTALLED = 12,
    138   MI_ERRORCATEGORY_OBJECT_NOT_FOUND = 13,
    139   MI_ERRORCATEGORY_OPERATION_STOPPED = 14,
    140   MI_ERRORCATEGORY_OPERATION_TIMEOUT = 15,
    141   MI_ERRORCATEGORY_SYNTAX_ERROR = 16,
    142   MI_ERRORCATEGORY_PARSER_ERROR = 17,
    143   MI_ERRORCATEGORY_ACCESS_DENIED = 18,
    144   MI_ERRORCATEGORY_RESOURCE_BUSY = 19,
    145   MI_ERRORCATEGORY_RESOURCE_EXISTS = 20,
    146   MI_ERRORCATEGORY_RESOURCE_UNAVAILABLE = 21,
    147   MI_ERRORCATEGORY_READ_ERROR = 22,
    148   MI_ERRORCATEGORY_WRITE_ERROR = 23,
    149   MI_ERRORCATEGORY_FROM_STDERR = 24,
    150   MI_ERRORCATEGORY_SECURITY_ERROR = 25,
    151   MI_ERRORCATEGORY_PROTOCOL_ERROR = 26,
    152   MI_ERRORCATEGORY_CONNECTION_ERROR = 27,
    153   MI_ERRORCATEGORY_AUTHENTICATION_ERROR = 28,
    154   MI_ERRORCATEGORY_LIMITS_EXCEEDED = 29,
    155   MI_ERRORCATEGORY_QUOTA_EXCEEDED = 30,
    156   MI_ERRORCATEGORY_NOT_ENABLED = 31
    157 } MI_ErrorCategory;
    158 
    159 typedef enum _MI_PromptType {
    160   MI_PROMPTTYPE_NORMAL,
    161   MI_PROMPTTYPE_CRITICAL
    162 } MI_PromptType;
    163 
    164 typedef enum _MI_CallbackMode {
    165   MI_CALLBACKMODE_REPORT,
    166   MI_CALLBACKMODE_INQUIRE,
    167   MI_CALLBACKMODE_IGNORE
    168 } MI_CallbackMode;
    169 
    170 typedef enum _MI_ProviderArchitecture {
    171   MI_PROVIDER_ARCHITECTURE_32BIT,
    172   MI_PROVIDER_ARCHITECTURE_64BIT
    173 } MI_ProviderArchitecture;
    174 
    175 #define MI_FLAG_CLASS (1 << 0)
    176 #define MI_FLAG_METHOD (1 << 1)
    177 #define MI_FLAG_PROPERTY (1 << 2)
    178 #define MI_FLAG_PARAMETER (1 << 3)
    179 #define MI_FLAG_ASSOCIATION (1 << 4)
    180 #define MI_FLAG_INDICATION (1 << 5)
    181 #define MI_FLAG_REFERENCE (1 << 6)
    182 #define MI_FLAG_ANY (1|2|4|8|16|32|64)
    183 
    184 #define MI_FLAG_ENABLEOVERRIDE (1 << 7)
    185 #define MI_FLAG_DISABLEOVERRIDE (1 << 8)
    186 #define MI_FLAG_RESTRICTED (1 << 9)
    187 #define MI_FLAG_TOSUBCLASS (1 << 10)
    188 #define MI_FLAG_TRANSLATABLE (1 << 11)
    189 
    190 #define MI_FLAG_KEY (1 << 12)
    191 #define MI_FLAG_IN (1 << 13)
    192 #define MI_FLAG_OUT (1 << 14)
    193 #define MI_FLAG_REQUIRED (1 << 15)
    194 #define MI_FLAG_STATIC (1 << 16)
    195 #define MI_FLAG_ABSTRACT (1 << 17)
    196 #define MI_FLAG_TERMINAL (1 << 18)
    197 #define MI_FLAG_EXPENSIVE (1 << 19)
    198 #define MI_FLAG_STREAM (1 << 20)
    199 #define MI_FLAG_READONLY (1 << 21)
    200 
    201 #define MI_FLAG_EXTENDED (1 << 12)
    202 #define MI_FLAG_NOT_MODIFIED (1 << 25)
    203 #define MI_FLAG_VERSION (1<<26|1<<27|1<<28)
    204 #define MI_FLAG_NULL (1 << 29)
    205 #define MI_FLAG_BORROW (1 << 30)
    206 #define MI_FLAG_ADOPT ((MI_Uint32)(1 << 31))
    207 
    208 typedef enum _MI_Type {
    209   MI_BOOLEAN = 0,
    210   MI_UINT8 = 1,
    211   MI_SINT8 = 2,
    212   MI_UINT16 = 3,
    213   MI_SINT16 = 4,
    214   MI_UINT32 = 5,
    215   MI_SINT32 = 6,
    216   MI_UINT64 = 7,
    217   MI_SINT64 = 8,
    218   MI_REAL32 = 9,
    219   MI_REAL64 = 10,
    220   MI_CHAR16 = 11,
    221   MI_DATETIME = 12,
    222   MI_STRING = 13,
    223   MI_REFERENCE = 14,
    224   MI_INSTANCE = 15,
    225   MI_BOOLEANA = 16,
    226   MI_UINT8A = 17,
    227   MI_SINT8A = 18,
    228   MI_UINT16A = 19,
    229   MI_SINT16A = 20,
    230   MI_UINT32A = 21,
    231   MI_SINT32A = 22,
    232   MI_UINT64A = 23,
    233   MI_SINT64A = 24,
    234   MI_REAL32A = 25,
    235   MI_REAL64A = 26,
    236   MI_CHAR16A = 27,
    237   MI_DATETIMEA = 28,
    238   MI_STRINGA = 29,
    239   MI_REFERENCEA = 30,
    240   MI_INSTANCEA = 31,
    241   MI_ARRAY = 16
    242 } MI_Type;
    243 
    244 typedef unsigned char MI_Boolean;
    245 typedef unsigned char MI_Uint8;
    246 typedef signed char MI_Sint8;
    247 typedef unsigned short MI_Uint16;
    248 typedef signed short MI_Sint16;
    249 typedef unsigned int MI_Uint32;
    250 typedef signed int MI_Sint32;
    251 
    252 typedef unsigned __int64 MI_Uint64;
    253 typedef signed __int64 MI_Sint64;
    254 
    255 typedef float MI_Real32;
    256 typedef double MI_Real64;
    257 typedef unsigned short MI_Char16;
    258 
    259 #if (MI_CHAR_TYPE == 1)
    260 typedef char MI_Char;
    261 #else
    262 typedef wchar_t MI_Char;
    263 #endif
    264 
    265 typedef MI_Char* MI_StringPtr;
    266 typedef const MI_Char* MI_ConstStringPtr;
    267 
    268 #define MI_TRUE ((MI_Boolean)1)
    269 #define MI_FALSE ((MI_Boolean)0)
    270 
    271 typedef struct _MI_Timestamp {
    272   MI_Uint32 year;
    273   MI_Uint32 month;
    274   MI_Uint32 day;
    275   MI_Uint32 hour;
    276   MI_Uint32 minute;
    277   MI_Uint32 second;
    278   MI_Uint32 microseconds;
    279   MI_Sint32 utc;
    280 } MI_Timestamp;
    281 
    282 typedef struct _MI_Interval {
    283   MI_Uint32 days;
    284   MI_Uint32 hours;
    285   MI_Uint32 minutes;
    286   MI_Uint32 seconds;
    287   MI_Uint32 microseconds;
    288   MI_Uint32 __padding1;
    289   MI_Uint32 __padding2;
    290   MI_Uint32 __padding3;
    291 } MI_Interval;
    292 
    293 typedef struct _MI_Datetime {
    294   MI_Uint32 isTimestamp;
    295   union {
    296     MI_Timestamp timestamp;
    297     MI_Interval interval;
    298   } u;
    299 } MI_Datetime;
    300 
    301 typedef struct _MI_BooleanA {
    302   MI_Boolean* data;
    303   MI_Uint32 size;
    304 } MI_BooleanA;
    305 
    306 typedef struct _MI_Uint8A {
    307   MI_Uint8* data;
    308   MI_Uint32 size;
    309 } MI_Uint8A;
    310 
    311 typedef struct _MI_Sint8A {
    312   MI_Sint8* data;
    313   MI_Uint32 size;
    314 } MI_Sint8A;
    315 
    316 typedef struct _MI_Uint16A {
    317   MI_Uint16* data;
    318   MI_Uint32 size;
    319 } MI_Uint16A;
    320 
    321 typedef struct _MI_Sint16A {
    322   MI_Sint16* data;
    323   MI_Uint32 size;
    324 } MI_Sint16A;
    325 
    326 typedef struct _MI_Uint32A {
    327   MI_Uint32* data;
    328   MI_Uint32 size;
    329 } MI_Uint32A;
    330 
    331 typedef struct _MI_Sint32A {
    332   MI_Sint32* data;
    333   MI_Uint32 size;
    334 } MI_Sint32A;
    335 
    336 typedef struct _MI_Uint64A {
    337   MI_Uint64* data;
    338   MI_Uint32 size;
    339 } MI_Uint64A;
    340 
    341 typedef struct _MI_Sint64A {
    342   MI_Sint64* data;
    343   MI_Uint32 size;
    344 } MI_Sint64A;
    345 
    346 typedef struct _MI_Real32A {
    347   MI_Real32* data;
    348   MI_Uint32 size;
    349 } MI_Real32A;
    350 
    351 typedef struct _MI_Real64A {
    352   MI_Real64* data;
    353   MI_Uint32 size;
    354 } MI_Real64A;
    355 
    356 typedef struct _MI_Char16A {
    357   MI_Char16* data;
    358   MI_Uint32 size;
    359 } MI_Char16A;
    360 
    361 typedef struct _MI_DatetimeA {
    362   MI_Datetime* data;
    363   MI_Uint32 size;
    364 } MI_DatetimeA;
    365 
    366 typedef struct _MI_StringA {
    367   MI_Char** data;
    368   MI_Uint32 size;
    369 } MI_StringA;
    370 
    371 typedef struct _MI_ReferenceA {
    372   struct _MI_Instance** data;
    373   MI_Uint32 size;
    374 } MI_ReferenceA;
    375 
    376 typedef struct _MI_InstanceA {
    377   MI_Instance** data;
    378   MI_Uint32 size;
    379 } MI_InstanceA;
    380 
    381 typedef struct _MI_Array {
    382   void* data;
    383   MI_Uint32 size;
    384 } MI_Array;
    385 
    386 typedef struct _MI_ConstBooleanA {
    387   MI_CONST MI_Boolean* data;
    388   MI_Uint32 size;
    389 } MI_ConstBooleanA;
    390 
    391 typedef struct _MI_ConstUint8A {
    392   MI_CONST MI_Uint8* data;
    393   MI_Uint32 size;
    394 } MI_ConstUint8A;
    395 
    396 typedef struct _MI_ConstSint8A {
    397   MI_CONST MI_Sint8* data;
    398   MI_Uint32 size;
    399 } MI_ConstSint8A;
    400 
    401 typedef struct _MI_ConstUint16A {
    402   MI_CONST MI_Uint16* data;
    403   MI_Uint32 size;
    404 } MI_ConstUint16A;
    405 
    406 typedef struct _MI_ConstSint16A {
    407   MI_CONST MI_Sint16* data;
    408   MI_Uint32 size;
    409 } MI_ConstSint16A;
    410 
    411 typedef struct _MI_ConstUint32A {
    412   MI_CONST MI_Uint32* data;
    413   MI_Uint32 size;
    414 } MI_ConstUint32A;
    415 
    416 typedef struct _MI_ConstSint32A {
    417   MI_CONST MI_Sint32* data;
    418   MI_Uint32 size;
    419 } MI_ConstSint32A;
    420 
    421 typedef struct _MI_ConstUint64A {
    422   MI_CONST MI_Uint64* data;
    423   MI_Uint32 size;
    424 } MI_ConstUint64A;
    425 
    426 typedef struct _MI_ConstSint64A {
    427   MI_CONST MI_Sint64* data;
    428   MI_Uint32 size;
    429 } MI_ConstSint64A;
    430 
    431 typedef struct _MI_ConstReal32A {
    432   MI_CONST MI_Real32* data;
    433   MI_Uint32 size;
    434 } MI_ConstReal32A;
    435 
    436 typedef struct _MI_ConstReal64A {
    437   MI_CONST MI_Real64* data;
    438   MI_Uint32 size;
    439 } MI_ConstReal64A;
    440 
    441 typedef struct _MI_ConstChar16A {
    442   MI_CONST MI_Char16* data;
    443   MI_Uint32 size;
    444 } MI_ConstChar16A;
    445 
    446 typedef struct _MI_ConstDatetimeA {
    447   MI_CONST MI_Datetime* data;
    448   MI_Uint32 size;
    449 } MI_ConstDatetimeA;
    450 
    451 typedef struct _MI_ConstStringA {
    452   MI_CONST MI_Char* MI_CONST* data;
    453   MI_Uint32 size;
    454 } MI_ConstStringA;
    455 
    456 typedef struct _MI_ConstReferenceA {
    457   MI_CONST MI_Instance* MI_CONST* data;
    458   MI_Uint32 size;
    459 } MI_ConstReferenceA;
    460 
    461 typedef struct _MI_ConstInstanceA {
    462   MI_CONST MI_Instance* MI_CONST* data;
    463   MI_Uint32 size;
    464 } MI_ConstInstanceA;
    465 
    466 typedef union _MI_Value {
    467   MI_Boolean boolean;
    468   MI_Uint8 uint8;
    469   MI_Sint8 sint8;
    470   MI_Uint16 uint16;
    471   MI_Sint16 sint16;
    472   MI_Uint32 uint32;
    473   MI_Sint32 sint32;
    474   MI_Uint64 uint64;
    475   MI_Sint64 sint64;
    476   MI_Real32 real32;
    477   MI_Real64 real64;
    478   MI_Char16 char16;
    479   MI_Datetime datetime;
    480   MI_Char* string;
    481   MI_Instance* instance;
    482   MI_Instance* reference;
    483   MI_BooleanA booleana;
    484   MI_Uint8A uint8a;
    485   MI_Sint8A sint8a;
    486   MI_Uint16A uint16a;
    487   MI_Sint16A sint16a;
    488   MI_Uint32A uint32a;
    489   MI_Sint32A sint32a;
    490   MI_Uint64A uint64a;
    491   MI_Sint64A sint64a;
    492   MI_Real32A real32a;
    493   MI_Real64A real64a;
    494   MI_Char16A char16a;
    495   MI_DatetimeA datetimea;
    496   MI_StringA stringa;
    497   MI_ReferenceA referencea;
    498   MI_InstanceA instancea;
    499   MI_Array array;
    500 } MI_Value;
    501 
    502 typedef struct _MI_BooleanField {
    503   MI_Boolean value;
    504   MI_Boolean exists;
    505   MI_Uint8 flags;
    506 } MI_BooleanField;
    507 
    508 typedef struct _MI_Sint8Field {
    509   MI_Sint8 value;
    510   MI_Boolean exists;
    511   MI_Uint8 flags;
    512 } MI_Sint8Field;
    513 
    514 typedef struct _MI_Uint8Field {
    515   MI_Uint8 value;
    516   MI_Boolean exists;
    517   MI_Uint8 flags;
    518 } MI_Uint8Field;
    519 
    520 typedef struct _MI_Sint16Field {
    521   MI_Sint16 value;
    522   MI_Boolean exists;
    523   MI_Uint8 flags;
    524 } MI_Sint16Field;
    525 
    526 typedef struct _MI_Uint16Field {
    527   MI_Uint16 value;
    528   MI_Boolean exists;
    529   MI_Uint8 flags;
    530 } MI_Uint16Field;
    531 
    532 typedef struct _MI_Sint32Field {
    533   MI_Sint32 value;
    534   MI_Boolean exists;
    535   MI_Uint8 flags;
    536 } MI_Sint32Field;
    537 
    538 typedef struct _MI_Uint32Field {
    539   MI_Uint32 value;
    540   MI_Boolean exists;
    541   MI_Uint8 flags;
    542 } MI_Uint32Field;
    543 
    544 typedef struct _MI_Sint64Field {
    545   MI_Sint64 value;
    546   MI_Boolean exists;
    547   MI_Uint8 flags;
    548 } MI_Sint64Field;
    549 
    550 typedef struct _MI_Uint64Field {
    551   MI_Uint64 value;
    552   MI_Boolean exists;
    553   MI_Uint8 flags;
    554 } MI_Uint64Field;
    555 
    556 typedef struct _MI_Real32Field {
    557   MI_Real32 value;
    558   MI_Boolean exists;
    559   MI_Uint8 flags;
    560 } MI_Real32Field;
    561 
    562 typedef struct _MI_Real64Field {
    563   MI_Real64 value;
    564   MI_Boolean exists;
    565   MI_Uint8 flags;
    566 } MI_Real64Field;
    567 
    568 typedef struct _MI_Char16Field {
    569   MI_Char16 value;
    570   MI_Boolean exists;
    571   MI_Uint8 flags;
    572 } MI_Char16Field;
    573 
    574 typedef struct _MI_DatetimeField {
    575   MI_Datetime value;
    576   MI_Boolean exists;
    577   MI_Uint8 flags;
    578 } MI_DatetimeField;
    579 
    580 typedef struct _MI_StringField {
    581   MI_Char* value;
    582   MI_Boolean exists;
    583   MI_Uint8 flags;
    584 } MI_StringField;
    585 
    586 typedef struct _MI_ReferenceField {
    587   MI_Instance* value;
    588   MI_Boolean exists;
    589   MI_Uint8 flags;
    590 } MI_ReferenceField;
    591 
    592 typedef struct _MI_InstanceField {
    593   MI_Instance* value;
    594   MI_Boolean exists;
    595   MI_Uint8 flags;
    596 } MI_InstanceField;
    597 
    598 typedef struct _MI_BooleanAField {
    599   MI_BooleanA value;
    600   MI_Boolean exists;
    601   MI_Uint8 flags;
    602 } MI_BooleanAField;
    603 
    604 typedef struct _MI_Uint8AField {
    605   MI_Uint8A value;
    606   MI_Boolean exists;
    607   MI_Uint8 flags;
    608 } MI_Uint8AField;
    609 
    610 typedef struct _MI_Sint8AField {
    611   MI_Sint8A value;
    612   MI_Boolean exists;
    613   MI_Uint8 flags;
    614 } MI_Sint8AField;
    615 
    616 typedef struct _MI_Uint16AField {
    617   MI_Uint16A value;
    618   MI_Boolean exists;
    619   MI_Uint8 flags;
    620 } MI_Uint16AField;
    621 
    622 typedef struct _MI_Sint16AField {
    623   MI_Sint16A value;
    624   MI_Boolean exists;
    625   MI_Uint8 flags;
    626 } MI_Sint16AField;
    627 
    628 typedef struct _MI_Uint32AField {
    629   MI_Uint32A value;
    630   MI_Boolean exists;
    631   MI_Uint8 flags;
    632 } MI_Uint32AField;
    633 
    634 typedef struct _MI_Sint32AField {
    635   MI_Sint32A value;
    636   MI_Boolean exists;
    637   MI_Uint8 flags;
    638 } MI_Sint32AField;
    639 
    640 typedef struct _MI_Uint64AField {
    641   MI_Uint64A value;
    642   MI_Boolean exists;
    643   MI_Uint8 flags;
    644 } MI_Uint64AField;
    645 
    646 typedef struct _MI_Sint64AField {
    647   MI_Sint64A value;
    648   MI_Boolean exists;
    649   MI_Uint8 flags;
    650 } MI_Sint64AField;
    651 
    652 typedef struct _MI_Real32AField {
    653   MI_Real32A value;
    654   MI_Boolean exists;
    655   MI_Uint8 flags;
    656 } MI_Real32AField;
    657 
    658 typedef struct _MI_Real64AField {
    659   MI_Real64A value;
    660   MI_Boolean exists;
    661   MI_Uint8 flags;
    662 } MI_Real64AField;
    663 
    664 typedef struct _MI_Char16AField {
    665   MI_Char16A value;
    666   MI_Boolean exists;
    667   MI_Uint8 flags;
    668 } MI_Char16AField;
    669 
    670 typedef struct _MI_DatetimeAField {
    671   MI_DatetimeA value;
    672   MI_Boolean exists;
    673   MI_Uint8 flags;
    674 } MI_DatetimeAField;
    675 
    676 typedef struct _MI_StringAField {
    677   MI_StringA value;
    678   MI_Boolean exists;
    679   MI_Uint8 flags;
    680 } MI_StringAField;
    681 
    682 typedef struct _MI_ReferenceAField {
    683   MI_ReferenceA value;
    684   MI_Boolean exists;
    685   MI_Uint8 flags;
    686 } MI_ReferenceAField;
    687 
    688 typedef struct _MI_InstanceAField {
    689   MI_InstanceA value;
    690   MI_Boolean exists;
    691   MI_Uint8 flags;
    692 } MI_InstanceAField;
    693 
    694 typedef struct _MI_ArrayField {
    695   MI_Array value;
    696   MI_Boolean exists;
    697   MI_Uint8 flags;
    698 } MI_ArrayField;
    699 
    700 typedef struct _MI_ConstBooleanField {
    701   MI_Boolean value;
    702   MI_Boolean exists;
    703   MI_Uint8 flags;
    704 } MI_ConstBooleanField;
    705 
    706 typedef struct _MI_ConstSint8Field {
    707   MI_Sint8 value;
    708   MI_Boolean exists;
    709   MI_Uint8 flags;
    710 } MI_ConstSint8Field;
    711 
    712 typedef struct _MI_ConstUint8Field {
    713   MI_Uint8 value;
    714   MI_Boolean exists;
    715   MI_Uint8 flags;
    716 } MI_ConstUint8Field;
    717 
    718 typedef struct _MI_ConstSint16Field {
    719   MI_Sint16 value;
    720   MI_Boolean exists;
    721   MI_Uint8 flags;
    722 } MI_ConstSint16Field;
    723 
    724 typedef struct _MI_ConstUint16Field {
    725   MI_Uint16 value;
    726   MI_Boolean exists;
    727   MI_Uint8 flags;
    728 } MI_ConstUint16Field;
    729 
    730 typedef struct _MI_ConstSint32Field {
    731   MI_Sint32 value;
    732   MI_Boolean exists;
    733   MI_Uint8 flags;
    734 } MI_ConstSint32Field;
    735 
    736 typedef struct _MI_ConstUint32Field {
    737   MI_Uint32 value;
    738   MI_Boolean exists;
    739   MI_Uint8 flags;
    740 } MI_ConstUint32Field;
    741 
    742 typedef struct _MI_ConstSint64Field {
    743   MI_Sint64 value;
    744   MI_Boolean exists;
    745   MI_Uint8 flags;
    746 } MI_ConstSint64Field;
    747 
    748 typedef struct _MI_ConstUint64Field {
    749   MI_Uint64 value;
    750   MI_Boolean exists;
    751   MI_Uint8 flags;
    752 } MI_ConstUint64Field;
    753 
    754 typedef struct _MI_ConstReal32Field {
    755   MI_Real32 value;
    756   MI_Boolean exists;
    757   MI_Uint8 flags;
    758 } MI_ConstReal32Field;
    759 
    760 typedef struct _MI_ConstReal64Field {
    761   MI_Real64 value;
    762   MI_Boolean exists;
    763   MI_Uint8 flags;
    764 } MI_ConstReal64Field;
    765 
    766 typedef struct _MI_ConstChar16Field {
    767   MI_Char16 value;
    768   MI_Boolean exists;
    769   MI_Uint8 flags;
    770 } MI_ConstChar16Field;
    771 
    772 typedef struct _MI_ConstDatetimeField {
    773   MI_Datetime value;
    774   MI_Boolean exists;
    775   MI_Uint8 flags;
    776 } MI_ConstDatetimeField;
    777 
    778 typedef struct _MI_ConstStringField {
    779   MI_CONST MI_Char* value;
    780   MI_Boolean exists;
    781   MI_Uint8 flags;
    782 } MI_ConstStringField;
    783 
    784 typedef struct _MI_ConstReferenceField {
    785   MI_CONST MI_Instance* value;
    786   MI_Boolean exists;
    787   MI_Uint8 flags;
    788 } MI_ConstReferenceField;
    789 
    790 typedef struct _MI_ConstInstanceField {
    791   MI_CONST MI_Instance* value;
    792   MI_Boolean exists;
    793   MI_Uint8 flags;
    794 } MI_ConstInstanceField;
    795 
    796 typedef struct _MI_ConstBooleanAField {
    797   MI_ConstBooleanA value;
    798   MI_Boolean exists;
    799   MI_Uint8 flags;
    800 } MI_ConstBooleanAField;
    801 
    802 typedef struct _MI_ConstUint8AField {
    803   MI_ConstUint8A value;
    804   MI_Boolean exists;
    805   MI_Uint8 flags;
    806 } MI_ConstUint8AField;
    807 
    808 typedef struct _MI_ConstSint8AField {
    809   MI_ConstSint8A value;
    810   MI_Boolean exists;
    811   MI_Uint8 flags;
    812 } MI_ConstSint8AField;
    813 
    814 typedef struct _MI_ConstUint16AField {
    815   MI_ConstUint16A value;
    816   MI_Boolean exists;
    817   MI_Uint8 flags;
    818 } MI_ConstUint16AField;
    819 
    820 typedef struct _MI_ConstSint16AField {
    821   MI_ConstSint16A value;
    822   MI_Boolean exists;
    823   MI_Uint8 flags;
    824 } MI_ConstSint16AField;
    825 
    826 typedef struct _MI_ConstUint32AField {
    827   MI_ConstUint32A value;
    828   MI_Boolean exists;
    829   MI_Uint8 flags;
    830 } MI_ConstUint32AField;
    831 
    832 typedef struct _MI_ConstSint32AField {
    833   MI_ConstSint32A value;
    834   MI_Boolean exists;
    835   MI_Uint8 flags;
    836 } MI_ConstSint32AField;
    837 
    838 typedef struct _MI_ConstUint64AField {
    839   MI_ConstUint64A value;
    840   MI_Boolean exists;
    841   MI_Uint8 flags;
    842 } MI_ConstUint64AField;
    843 
    844 typedef struct _MI_ConstSint64AField {
    845   MI_ConstSint64A value;
    846   MI_Boolean exists;
    847   MI_Uint8 flags;
    848 } MI_ConstSint64AField;
    849 
    850 typedef struct _MI_ConstReal32AField {
    851   MI_ConstReal32A value;
    852   MI_Boolean exists;
    853   MI_Uint8 flags;
    854 } MI_ConstReal32AField;
    855 
    856 typedef struct _MI_ConstReal64AField {
    857   MI_ConstReal64A value;
    858   MI_Boolean exists;
    859   MI_Uint8 flags;
    860 } MI_ConstReal64AField;
    861 
    862 typedef struct _MI_ConstChar16AField {
    863   MI_ConstChar16A value;
    864   MI_Boolean exists;
    865   MI_Uint8 flags;
    866 } MI_ConstChar16AField;
    867 
    868 typedef struct _MI_ConstDatetimeAField {
    869   MI_ConstDatetimeA value;
    870   MI_Boolean exists;
    871   MI_Uint8 flags;
    872 } MI_ConstDatetimeAField;
    873 
    874 typedef struct _MI_ConstStringAField {
    875   MI_ConstStringA value;
    876   MI_Boolean exists;
    877   MI_Uint8 flags;
    878 } MI_ConstStringAField;
    879 
    880 typedef struct _MI_ConstReferenceAField {
    881   MI_ConstReferenceA value;
    882   MI_Boolean exists;
    883   MI_Uint8 flags;
    884 } MI_ConstReferenceAField;
    885 
    886 typedef struct _MI_ConstInstanceAField {
    887   MI_ConstInstanceA value;
    888   MI_Boolean exists;
    889   MI_Uint8 flags;
    890 } MI_ConstInstanceAField;
    891 
    892 struct _MI_ServerFT {
    893   MI_Result (MI_CALL *GetVersion)(MI_Uint32* version);
    894   MI_Result (MI_CALL *GetSystemName)(const MI_Char** systemName);
    895 };
    896 
    897 struct _MI_Server {
    898   const MI_ServerFT* serverFT;
    899   const MI_ContextFT* contextFT;
    900   const MI_InstanceFT* instanceFT;
    901   const MI_PropertySetFT* propertySetFT;
    902   const MI_FilterFT* filterFT;
    903 };
    904 
    905 MI_Result MI_CALL MI_Server_GetVersion(MI_Uint32* version);
    906 MI_Result MI_CALL MI_Server_GetSystemName(const MI_Char** systemName);
    907 
    908 struct _MI_FilterFT {
    909   MI_Result (MI_CALL *Evaluate)(const MI_Filter* self, const MI_Instance* instance, MI_Boolean* result);
    910   MI_Result (MI_CALL *GetExpression)(const MI_Filter* self, const MI_Char** queryLang, const MI_Char** queryExpr);
    911 };
    912 
    913 struct _MI_Filter {
    914   const MI_FilterFT* ft;
    915   ptrdiff_t reserved[3];
    916 };
    917 
    918 MI_INLINE MI_Result MI_INLINE_CALL MI_Filter_Evaluate(const MI_Filter* self, const MI_Instance* instance, MI_Boolean* result) {
    919   if (self && self->ft) {
    920     return self->ft->Evaluate(self, instance, result);
    921   } else {
    922     return MI_RESULT_INVALID_PARAMETER;
    923   }
    924 }
    925 
    926 MI_INLINE MI_Result MI_INLINE_CALL MI_Filter_GetExpression(const MI_Filter* self, const MI_Char** queryLang, const MI_Char** queryExpr) {
    927   if (self && self->ft) {
    928     return self->ft->GetExpression(self, queryLang, queryExpr);
    929   } else {
    930     return MI_RESULT_INVALID_PARAMETER;
    931   }
    932 }
    933 
    934 struct _MI_PropertySetFT {
    935   MI_Result (MI_CALL *GetElementCount)(const MI_PropertySet* self, MI_Uint32* count);
    936   MI_Result (MI_CALL *ContainsElement)(const MI_PropertySet* self, const MI_Char* name, MI_Boolean* flag);
    937   MI_Result (MI_CALL *AddElement)(MI_PropertySet* self, const MI_Char* name);
    938   MI_Result (MI_CALL *GetElementAt)(const MI_PropertySet* self, MI_Uint32 index, const MI_Char** name);
    939   MI_Result (MI_CALL *Clear)(MI_PropertySet* self);
    940   MI_Result (MI_CALL *Destruct)(MI_PropertySet* self);
    941   MI_Result (MI_CALL *Delete)(MI_PropertySet* self);
    942   MI_Result (MI_CALL *Clone)(const MI_PropertySet* self, MI_PropertySet** newPropertySet);
    943 };
    944 
    945 struct _MI_PropertySet {
    946   const MI_PropertySetFT* ft;
    947   ptrdiff_t reserved[3];
    948 };
    949 
    950 MI_INLINE MI_Result MI_INLINE_CALL MI_PropertySet_GetElementCount(const MI_PropertySet* self, MI_Uint32* count) {
    951   if (self && self->ft) {
    952     return self->ft->GetElementCount(self, count);
    953   } else {
    954     return MI_RESULT_INVALID_PARAMETER;
    955   }
    956 }
    957 
    958 MI_INLINE MI_Result MI_INLINE_CALL MI_PropertySet_ContainsElement(const MI_PropertySet* self, const MI_Char* name, MI_Boolean* flag) {
    959   if (self && self->ft) {
    960     return self->ft->ContainsElement(self, name, flag);
    961   } else {
    962     return MI_RESULT_INVALID_PARAMETER;
    963   }
    964 }
    965 
    966 MI_INLINE MI_Result MI_INLINE_CALL MI_PropertySet_AddElement(MI_PropertySet* self, const MI_Char* name) {
    967   if (self && self->ft) {
    968     return self->ft->AddElement(self, name);
    969   } else {
    970     return MI_RESULT_INVALID_PARAMETER;
    971   }
    972 }
    973 
    974 MI_INLINE MI_Result MI_INLINE_CALL MI_PropertySet_GetElementAt(const MI_PropertySet* self, MI_Uint32 index, const MI_Char** name) {
    975   if (self && self->ft) {
    976     return self->ft->GetElementAt(self, index, name);
    977   } else {
    978     return MI_RESULT_INVALID_PARAMETER;
    979   }
    980 }
    981 
    982 MI_INLINE MI_Result MI_INLINE_CALL MI_PropertySet_Clear(MI_PropertySet* self) {
    983   if (self && self->ft) {
    984     return self->ft->Clear(self);
    985   } else {
    986     return MI_RESULT_INVALID_PARAMETER;
    987   }
    988 }
    989 
    990 MI_INLINE MI_Result MI_INLINE_CALL MI_PropertySet_Destruct(MI_PropertySet* self) {
    991   if (self && self->ft) {
    992     return self->ft->Destruct(self);
    993   } else {
    994     return MI_RESULT_INVALID_PARAMETER;
    995   }
    996 }
    997 
    998 MI_INLINE MI_Result MI_INLINE_CALL MI_PropertySet_Delete(MI_PropertySet* self) {
    999   if (self && self->ft) {
   1000     return self->ft->Delete(self);
   1001   } else {
   1002     return MI_RESULT_INVALID_PARAMETER;
   1003   }
   1004 }
   1005 
   1006 MI_INLINE MI_Result MI_INLINE_CALL MI_PropertySet_Clone(const MI_PropertySet* self, MI_PropertySet** newPropertySet) {
   1007   if (self && self->ft) {
   1008     return self->ft->Clone(self, newPropertySet);
   1009   } else {
   1010     return MI_RESULT_INVALID_PARAMETER;
   1011   }
   1012 }
   1013 
   1014 typedef struct _MI_ObjectDecl {
   1015   MI_Uint32 flags;
   1016   MI_Uint32 code;
   1017   MI_CONST MI_Char* name;
   1018   MI_Qualifier MI_CONST* MI_CONST* qualifiers;
   1019   MI_Uint32 numQualifiers;
   1020   struct _MI_PropertyDecl MI_CONST* MI_CONST* properties;
   1021   MI_Uint32 numProperties;
   1022   MI_Uint32 size;
   1023 } MI_ObjectDecl;
   1024 
   1025 struct _MI_ClassDecl {
   1026   MI_Uint32 flags;
   1027   MI_Uint32 code;
   1028   MI_CONST MI_Char* name;
   1029   struct _MI_Qualifier MI_CONST* MI_CONST* qualifiers;
   1030   MI_Uint32 numQualifiers;
   1031   struct _MI_PropertyDecl MI_CONST* MI_CONST* properties;
   1032   MI_Uint32 numProperties;
   1033   MI_Uint32 size;
   1034   MI_CONST MI_Char* superClass;
   1035   MI_ClassDecl MI_CONST* superClassDecl;
   1036   struct _MI_MethodDecl MI_CONST* MI_CONST* methods;
   1037   MI_Uint32 numMethods;
   1038   struct _MI_SchemaDecl MI_CONST* schema;
   1039   MI_CONST MI_ProviderFT* providerFT;
   1040   MI_Class *owningClass;
   1041 };
   1042 
   1043 typedef struct _MI_FeatureDecl {
   1044   MI_Uint32 flags;
   1045   MI_Uint32 code;
   1046   MI_CONST MI_Char* name;
   1047   MI_Qualifier MI_CONST* MI_CONST * qualifiers;
   1048   MI_Uint32 numQualifiers;
   1049 } MI_FeatureDecl;
   1050 
   1051 typedef struct _MI_ParameterDecl {
   1052   MI_Uint32 flags;
   1053   MI_Uint32 code;
   1054   MI_CONST MI_Char* name;
   1055   MI_Qualifier MI_CONST* MI_CONST* qualifiers;
   1056   MI_Uint32 numQualifiers;
   1057   MI_Uint32 type;
   1058   MI_CONST MI_Char* className;
   1059   MI_Uint32 subscript;
   1060   MI_Uint32 offset;
   1061 } MI_ParameterDecl;
   1062 
   1063 typedef struct _MI_PropertyDecl {
   1064   MI_Uint32 flags;
   1065   MI_Uint32 code;
   1066   MI_CONST MI_Char* name;
   1067   MI_Qualifier MI_CONST* MI_CONST* qualifiers;
   1068   MI_Uint32 numQualifiers;
   1069   MI_Uint32 type;
   1070   MI_CONST MI_Char* className;
   1071   MI_Uint32 subscript;
   1072   MI_Uint32 offset;
   1073   MI_CONST MI_Char* origin;
   1074   MI_CONST MI_Char* propagator;
   1075   MI_CONST void* value;
   1076 } MI_PropertyDecl;
   1077 
   1078 typedef void (MI_CALL *MI_MethodDecl_Invoke)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Char* methodName, const MI_Instance* instanceName, const MI_Instance* parameters);
   1079 
   1080 typedef struct _MI_MethodDecl {
   1081   MI_Uint32 flags;
   1082   MI_Uint32 code;
   1083   MI_CONST MI_Char* name;
   1084   struct _MI_Qualifier MI_CONST* MI_CONST* qualifiers;
   1085   MI_Uint32 numQualifiers;
   1086   struct _MI_ParameterDecl MI_CONST* MI_CONST* parameters;
   1087   MI_Uint32 numParameters;
   1088   MI_Uint32 size;
   1089   MI_Uint32 returnType;
   1090   MI_CONST MI_Char* origin;
   1091   MI_CONST MI_Char* propagator;
   1092   struct _MI_SchemaDecl MI_CONST* schema;
   1093   MI_MethodDecl_Invoke function;
   1094 } MI_MethodDecl;
   1095 
   1096 typedef struct _MI_QualifierDecl {
   1097   MI_CONST MI_Char* name;
   1098   MI_Uint32 type;
   1099   MI_Uint32 scope;
   1100   MI_Uint32 flavor;
   1101   MI_Uint32 subscript;
   1102   MI_CONST void* value;
   1103 } MI_QualifierDecl;
   1104 
   1105 struct _MI_Qualifier {
   1106   MI_CONST MI_Char* name;
   1107   MI_Uint32 type;
   1108   MI_Uint32 flavor;
   1109   MI_CONST void* value;
   1110 };
   1111 
   1112 typedef struct _MI_SchemaDecl {
   1113   MI_QualifierDecl MI_CONST* MI_CONST* qualifierDecls;
   1114   MI_Uint32 numQualifierDecls;
   1115   MI_ClassDecl MI_CONST* MI_CONST* classDecls;
   1116   MI_Uint32 numClassDecls;
   1117 } MI_SchemaDecl;
   1118 
   1119 typedef struct _MI_Module_Self MI_Module_Self;
   1120 
   1121 typedef void (MI_CALL *MI_ProviderFT_Load)(void** self, MI_Module_Self* selfModule, MI_Context* context);
   1122 typedef void (MI_CALL *MI_ProviderFT_Unload)(void* self, MI_Context* context);
   1123 typedef void (MI_CALL *MI_ProviderFT_GetInstance)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Instance* instanceName, const MI_PropertySet* propertySet);
   1124 typedef void (MI_CALL *MI_ProviderFT_EnumerateInstances)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_PropertySet* propertySet, MI_Boolean keysOnly, const MI_Filter* filter);
   1125 typedef void (MI_CALL *MI_ProviderFT_CreateInstance)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Instance* newInstance);
   1126 typedef void (MI_CALL *MI_ProviderFT_ModifyInstance)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Instance* modifiedInstance, const MI_PropertySet* propertySet);
   1127 typedef void (MI_CALL *MI_ProviderFT_DeleteInstance)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Instance* instanceName);
   1128 typedef void (MI_CALL *MI_ProviderFT_AssociatorInstances)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Instance* instanceName, const MI_Char* resultClass, const MI_Char* role, const MI_Char* resultRole, const MI_PropertySet* propertySet, MI_Boolean keysOnly, const MI_Filter* filter);
   1129 typedef void (MI_CALL *MI_ProviderFT_ReferenceInstances)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Instance* instanceName, const MI_Char* role, const MI_PropertySet* propertySet, MI_Boolean keysOnly, const MI_Filter* filter);
   1130 typedef void (MI_CALL *MI_ProviderFT_EnableIndications)(void* self, MI_Context* indicationsContext, const MI_Char* nameSpace, const MI_Char* className);
   1131 typedef void (MI_CALL *MI_ProviderFT_DisableIndications)(void* self, MI_Context* indicationsContext, const MI_Char* nameSpace, const MI_Char* className);
   1132 typedef void (MI_CALL *MI_ProviderFT_Subscribe)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Filter* filter, const MI_Char* bookmark, MI_Uint64 subscriptionID, void** subscriptionSelf);
   1133 typedef void (MI_CALL *MI_ProviderFT_Unsubscribe)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, MI_Uint64 subscriptionID, void* subscriptionSelf);
   1134 typedef void (MI_CALL *MI_ProviderFT_Invoke)(void* self, MI_Context* context, const MI_Char* nameSpace, const MI_Char* className, const MI_Char* methodName, const MI_Instance* instanceName, const MI_Instance* inputParameters);
   1135 
   1136 struct _MI_ProviderFT {
   1137   MI_ProviderFT_Load Load;
   1138   MI_ProviderFT_Unload Unload;
   1139   MI_ProviderFT_GetInstance GetInstance;
   1140   MI_ProviderFT_EnumerateInstances EnumerateInstances;
   1141   MI_ProviderFT_CreateInstance CreateInstance;
   1142   MI_ProviderFT_ModifyInstance ModifyInstance;
   1143   MI_ProviderFT_DeleteInstance DeleteInstance;
   1144   MI_ProviderFT_AssociatorInstances AssociatorInstances;
   1145   MI_ProviderFT_ReferenceInstances ReferenceInstances;
   1146   MI_ProviderFT_EnableIndications EnableIndications;
   1147   MI_ProviderFT_DisableIndications DisableIndications;
   1148   MI_ProviderFT_Subscribe Subscribe;
   1149   MI_ProviderFT_Unsubscribe Unsubscribe;
   1150   MI_ProviderFT_Invoke Invoke;
   1151 };
   1152 
   1153 #define MI_MODULE_FLAG_STANDARD_QUALIFIERS (1 << 0)
   1154 #define MI_MODULE_FLAG_DESCRIPTIONS (1 << 1)
   1155 #define MI_MODULE_FLAG_VALUES (1 << 2)
   1156 #define MI_MODULE_FLAG_MAPPING_STRINGS (1 << 3)
   1157 #define MI_MODULE_FLAG_BOOLEANS (1 << 4)
   1158 #define MI_MODULE_FLAG_CPLUSPLUS (1 << 5)
   1159 #define MI_MODULE_FLAG_LOCALIZED (1 << 6)
   1160 #define MI_MODULE_FLAG_FILTER_SUPPORT (1 << 7)
   1161 
   1162 typedef void (MI_CALL *MI_Module_Load)(MI_Module_Self** self, MI_Context* context);
   1163 typedef void (MI_CALL *MI_Module_Unload)(MI_Module_Self* self, MI_Context* context);
   1164 
   1165 typedef struct _MI_Module {
   1166   MI_Uint32 version;
   1167   MI_Uint32 generatorVersion;
   1168   MI_Uint32 flags;
   1169   MI_Uint32 charSize;
   1170   MI_SchemaDecl* schemaDecl;
   1171   MI_Module_Load Load;
   1172   MI_Module_Unload Unload;
   1173   const MI_ProviderFT* dynamicProviderFT;
   1174 } MI_Module;
   1175 
   1176 struct _MI_InstanceFT {
   1177   MI_Result (MI_CALL *Clone)(const MI_Instance* self, MI_Instance** newInstance);
   1178   MI_Result (MI_CALL *Destruct)(MI_Instance* self);
   1179   MI_Result (MI_CALL *Delete)(MI_Instance* self);
   1180   MI_Result (MI_CALL *IsA)(const MI_Instance* self, const MI_ClassDecl* classDecl, MI_Boolean* flag);
   1181   MI_Result (MI_CALL *GetClassName)(const MI_Instance* self, const MI_Char** className);
   1182   MI_Result (MI_CALL *SetNameSpace)(MI_Instance* self, const MI_Char* nameSpace);
   1183   MI_Result (MI_CALL *GetNameSpace)(const MI_Instance* self, const MI_Char** nameSpace);
   1184   MI_Result (MI_CALL *GetElementCount)(const MI_Instance* self, MI_Uint32* count);
   1185   MI_Result (MI_CALL *AddElement)(MI_Instance* self, const MI_Char* name, const MI_Value* value, MI_Type type, MI_Uint32 flags);
   1186   MI_Result (MI_CALL *SetElement)(MI_Instance* self, const MI_Char* name, const MI_Value* value, MI_Type type, MI_Uint32 flags);
   1187   MI_Result (MI_CALL *SetElementAt)(MI_Instance* self, MI_Uint32 index, const MI_Value* value, MI_Type type, MI_Uint32 flags);
   1188   MI_Result (MI_CALL *GetElement)(const MI_Instance* self, const MI_Char* name, MI_Value* value, MI_Type* type, MI_Uint32* flags, MI_Uint32* index);
   1189   MI_Result (MI_CALL *GetElementAt)(const MI_Instance* self, MI_Uint32 index, const MI_Char** name, MI_Value* value, MI_Type* type, MI_Uint32* flags);
   1190   MI_Result (MI_CALL *ClearElement)(MI_Instance* self, const MI_Char* name);
   1191   MI_Result (MI_CALL *ClearElementAt)(MI_Instance* self, MI_Uint32 index);
   1192   MI_Result (MI_CALL *GetServerName)(const MI_Instance* self, const MI_Char** name);
   1193   MI_Result (MI_CALL *SetServerName)(MI_Instance* self, const MI_Char* name);
   1194   MI_Result (MI_CALL *GetClass)(const MI_Instance* self, MI_Class** instanceClass);
   1195 };
   1196 
   1197 struct _MI_InstanceExFT {
   1198   MI_InstanceFT parent;
   1199   MI_Result (MI_CALL *Normalize)(MI_Instance** self);
   1200 };
   1201 
   1202 struct _MI_Instance {
   1203   const MI_InstanceFT* ft;
   1204   const MI_ClassDecl* classDecl;
   1205   const MI_Char* serverName;
   1206   const MI_Char* nameSpace;
   1207   ptrdiff_t reserved[4];
   1208 };
   1209 
   1210 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_Clone(const MI_Instance* self, MI_Instance** newInstance) {
   1211   if (self && self->ft) {
   1212     return self->ft->Clone(self, newInstance);
   1213   } else {
   1214     return MI_RESULT_INVALID_PARAMETER;
   1215   }
   1216 }
   1217 
   1218 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_Destruct(MI_Instance* self) {
   1219   if (self && self->ft) {
   1220     return self->ft->Destruct(self);
   1221   } else {
   1222     return MI_RESULT_INVALID_PARAMETER;
   1223   }
   1224 }
   1225 
   1226 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_Delete(MI_Instance* self) {
   1227   if (self && self->ft) {
   1228     return self->ft->Delete(self);
   1229   } else {
   1230     return MI_RESULT_INVALID_PARAMETER;
   1231   }
   1232 }
   1233 
   1234 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_IsA(const MI_Instance* self, const MI_ClassDecl* classDecl, MI_Boolean* flag) {
   1235   if (self && self->ft) {
   1236     return self->ft->IsA(self, classDecl, flag);
   1237   } else {
   1238     return MI_RESULT_INVALID_PARAMETER;
   1239   }
   1240 }
   1241 
   1242 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_GetClassName(const MI_Instance* self, const MI_Char** className) {
   1243   if (self && self->ft) {
   1244     return self->ft->GetClassName(self, className);
   1245   } else {
   1246     return MI_RESULT_INVALID_PARAMETER;
   1247   }
   1248 }
   1249 
   1250 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_SetNameSpace(MI_Instance* self, const MI_Char* nameSpace) {
   1251   if (self && self->ft) {
   1252     return self->ft->SetNameSpace(self, nameSpace);
   1253   } else {
   1254     return MI_RESULT_INVALID_PARAMETER;
   1255   }
   1256 }
   1257 
   1258 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_GetNameSpace(const MI_Instance* self, const MI_Char** nameSpace) {
   1259   if (self && self->ft) {
   1260     return self->ft->GetNameSpace(self, nameSpace);
   1261   } else {
   1262     return MI_RESULT_INVALID_PARAMETER;
   1263   }
   1264 }
   1265 
   1266 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_GetElementCount(const MI_Instance* self, MI_Uint32* count) {
   1267   if (self && self->ft) {
   1268     return self->ft->GetElementCount(self, count);
   1269   } else {
   1270     return MI_RESULT_INVALID_PARAMETER;
   1271   }
   1272 }
   1273 
   1274 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_AddElement(MI_Instance* self, const MI_Char* name, const MI_Value* value, MI_Type type, MI_Uint32 flags) {
   1275   if (self && self->ft) {
   1276     return self->ft->AddElement(self, name, value, type, flags);
   1277   } else {
   1278     return MI_RESULT_INVALID_PARAMETER;
   1279   }
   1280 }
   1281 
   1282 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_SetElementAt(MI_Instance* self, MI_Uint32 index, const MI_Value* value, MI_Type type, MI_Uint32 flags) {
   1283   if (self && self->ft) {
   1284     return self->ft->SetElementAt(self, index, value, type, flags);
   1285   } else {
   1286     return MI_RESULT_INVALID_PARAMETER;
   1287   }
   1288 }
   1289 
   1290 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_SetElement(MI_Instance* self, const MI_Char* name, const MI_Value* value, MI_Type type, MI_Uint32 flags) {
   1291   if (self && self->ft) {
   1292     return self->ft->SetElement(self, name, value, type, flags);
   1293   } else {
   1294     return MI_RESULT_INVALID_PARAMETER;
   1295   }
   1296 }
   1297 
   1298 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_GetElement(const MI_Instance* self, const MI_Char* name, MI_Value* value, MI_Type* type, MI_Uint32* flags, MI_Uint32* index) {
   1299   if (self && self->ft) {
   1300     return self->ft->GetElement(self, name, value, type, flags, index);
   1301   } else {
   1302     return MI_RESULT_INVALID_PARAMETER;
   1303   }
   1304 }
   1305 
   1306 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_GetElementAt(const MI_Instance* self, MI_Uint32 index, const MI_Char** name, MI_Value* value, MI_Type* type, MI_Uint32* flags) {
   1307   if (self && self->ft) {
   1308     return self->ft->GetElementAt(self, index, name, value, type, flags);
   1309   } else {
   1310     return MI_RESULT_INVALID_PARAMETER;
   1311   }
   1312 }
   1313 
   1314 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_ClearElement(MI_Instance* self, const MI_Char* name) {
   1315   if (self && self->ft) {
   1316     return self->ft->ClearElement(self, name);
   1317   } else {
   1318     return MI_RESULT_INVALID_PARAMETER;
   1319   }
   1320 }
   1321 
   1322 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_ClearElementAt(MI_Instance* self, MI_Uint32 index) {
   1323   if (self && self->ft) {
   1324     return self->ft->ClearElementAt(self, index);
   1325   } else {
   1326     return MI_RESULT_INVALID_PARAMETER;
   1327   }
   1328 }
   1329 
   1330 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_GetServerName(const MI_Instance* self, const MI_Char** name) {
   1331   if (self && self->ft) {
   1332     return self->ft->GetServerName(self, name);
   1333   } else {
   1334     return MI_RESULT_INVALID_PARAMETER;
   1335   }
   1336 }
   1337 
   1338 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_SetServerName(MI_Instance* self, const MI_Char* name) {
   1339   if (self && self->ft) {
   1340     return self->ft->SetServerName(self, name);
   1341   } else {
   1342     return MI_RESULT_INVALID_PARAMETER;
   1343   }
   1344 }
   1345 
   1346 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_GetClass(const MI_Instance* self, MI_Class** instanceClass) {
   1347   if (self && self->ft) {
   1348     return self->ft->GetClass(self, instanceClass);
   1349   } else {
   1350     return MI_RESULT_INVALID_PARAMETER;
   1351   }
   1352 }
   1353 
   1354 MI_INLINE MI_Result MI_INLINE_CALL MI_Instance_Normalize(MI_Instance** self) {
   1355   MI_Instance* inst = *self;
   1356   if (inst && inst->ft) {
   1357     if (inst->classDecl->flags & MI_FLAG_EXTENDED) {
   1358       MI_InstanceExFT* ft = (MI_InstanceExFT*)inst->ft;
   1359       return ft->Normalize(self);
   1360     } else {
   1361       return MI_RESULT_OK;
   1362     }
   1363   } else {
   1364     return MI_RESULT_INVALID_PARAMETER;
   1365   }
   1366 }
   1367 
   1368 #define MI_MAX_LOCALE_SIZE 128
   1369 
   1370 typedef enum _MI_LocaleType {
   1371   MI_LOCALE_TYPE_REQUESTED_UI,
   1372   MI_LOCALE_TYPE_REQUESTED_DATA,
   1373   MI_LOCALE_TYPE_CLOSEST_UI,
   1374   MI_LOCALE_TYPE_CLOSEST_DATA
   1375 } MI_LocaleType;
   1376 
   1377 typedef enum _MI_CancellationReason {
   1378   MI_REASON_NONE,
   1379   MI_REASON_TIMEOUT,
   1380   MI_REASON_SHUTDOWN,
   1381   MI_REASON_SERVICESTOP
   1382 } MI_CancellationReason;
   1383 
   1384 typedef void (MI_CALL *MI_CancelCallback)(MI_CancellationReason reason, void* callbackData);
   1385 
   1386 #define MI_WRITEMESSAGE_CHANNEL_WARNING 0
   1387 #define MI_WRITEMESSAGE_CHANNEL_VERBOSE 1
   1388 #define MI_WRITEMESSAGE_CHANNEL_DEBUG 2
   1389 
   1390 #define MI_RESULT_TYPE_MI MI_T("MI")
   1391 #define MI_RESULT_TYPE_HRESULT MI_T("HRESULT")
   1392 #define MI_RESULT_TYPE_WIN32 MI_T("WIN32")
   1393 #define MI_RESULT_TYPE_ERRNO MI_T("ERRNO")
   1394 
   1395 struct _MI_ContextFT {
   1396   MI_Result (MI_CALL *PostResult)(MI_Context* context, MI_Result result);
   1397   MI_Result (MI_CALL *PostInstance)(MI_Context* context, const MI_Instance* instance);
   1398   MI_Result (MI_CALL *PostIndication)(MI_Context* context, const MI_Instance* indication, MI_Uint32 subscriptionIDCount, const MI_Char* bookmark);
   1399   MI_Result (MI_CALL *ConstructInstance)(MI_Context* context, const MI_ClassDecl* classDecl, MI_Instance* instance);
   1400   MI_Result (MI_CALL *ConstructParameters)(MI_Context* context, const MI_MethodDecl* methodDecl, MI_Instance* instance);
   1401   MI_Result (MI_CALL *NewInstance)(MI_Context* context, const MI_ClassDecl* classDecl, MI_Instance** instance);
   1402   MI_Result (MI_CALL *NewDynamicInstance)(MI_Context* context, const MI_Char* className, MI_Uint32 flags, MI_Instance** instance);
   1403   MI_Result (MI_CALL *NewParameters)(MI_Context* context, const MI_MethodDecl* methodDecl, MI_Instance** instance);
   1404   MI_Result (MI_CALL *Canceled)(const MI_Context* context, MI_Boolean* flag);
   1405   MI_Result (MI_CALL *GetLocale)(const MI_Context* context, MI_LocaleType localeType, MI_Char locale[MI_MAX_LOCALE_SIZE]);
   1406   MI_Result (MI_CALL *RegisterCancel)(MI_Context* context, MI_CancelCallback callback, void* callbackData);
   1407   MI_Result (MI_CALL *RequestUnload)(MI_Context* context);
   1408   MI_Result (MI_CALL *RefuseUnload)(MI_Context* context);
   1409   MI_Result (MI_CALL *GetLocalSession)(const MI_Context* context, MI_Session* session);
   1410   MI_Result (MI_CALL *SetStringOption)(MI_Context* context, const MI_Char* name, const MI_Char* value);
   1411   MI_Result (MI_CALL *GetStringOption)(MI_Context* context, const MI_Char* name, const MI_Char** value);
   1412   MI_Result (MI_CALL *GetNumberOption)(MI_Context* context, const MI_Char *name, MI_Uint32* value);
   1413   MI_Result (MI_CALL *GetCustomOption)(MI_Context* context, const MI_Char* name, MI_Type* valueType, MI_Value* value);
   1414   MI_Result (MI_CALL *GetCustomOptionCount)(MI_Context* context, MI_Uint32* count);
   1415   MI_Result (MI_CALL *GetCustomOptionAt)(MI_Context* context, MI_Uint32 index, const MI_Char** name, MI_Type* valueType, MI_Value* value);
   1416   MI_Result (MI_CALL *WriteMessage)(MI_Context* context, MI_Uint32 channel, const MI_Char* message);
   1417   MI_Result (MI_CALL *WriteProgress)(MI_Context* context, const MI_Char* activity, const MI_Char* currentOperation, const MI_Char* statusDescription, MI_Uint32 percentComplete, MI_Uint32 secondsRemaining);
   1418   MI_Result (MI_CALL *WriteStreamParameter)(MI_Context* context, const MI_Char* name, const MI_Value* value, MI_Type type, MI_Uint32 flags);
   1419   MI_Result (MI_CALL *WriteCimError)(MI_Context* context, const MI_Instance *error, MI_Boolean *flag);
   1420   MI_Result (MI_CALL *PromptUser)(MI_Context* context, const MI_Char* message, MI_PromptType promptType, MI_Boolean* result );
   1421   MI_Result (MI_CALL *ShouldProcess)(MI_Context* context, const MI_Char* target, const MI_Char* action, MI_Boolean* result);
   1422   MI_Result (MI_CALL *ShouldContinue)(MI_Context* context, const MI_Char* message, MI_Boolean* result);
   1423   MI_Result (MI_CALL *PostError)(MI_Context* context, MI_Uint32 resultCode, const MI_Char* resultType, const MI_Char* errorMessage);
   1424   MI_Result (MI_CALL *PostCimError)(MI_Context* context, const MI_Instance *error);
   1425   MI_Result (MI_CALL *WriteError)(MI_Context* context, MI_Uint32 resultCode, const MI_Char* resultType, const MI_Char* errorMessage, MI_Boolean *flag);
   1426 };
   1427 
   1428 struct _MI_Context {
   1429   const MI_ContextFT* ft;
   1430   ptrdiff_t reserved[3];
   1431 };
   1432 
   1433 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_PostResult(MI_Context* context, MI_Result result) {
   1434   if (context && context->ft) {
   1435     return context->ft->PostResult(context, result);
   1436   } else {
   1437     return MI_RESULT_INVALID_PARAMETER;
   1438   }
   1439 }
   1440 
   1441 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_PostCimError(MI_Context* context, const MI_Instance *error) {
   1442   if (context && context->ft) {
   1443     return context->ft->PostCimError(context, error);
   1444   } else {
   1445     return MI_RESULT_INVALID_PARAMETER;
   1446   }
   1447 }
   1448 
   1449 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_PostError(MI_Context* context, MI_Uint32 resultCode, const MI_Char* resultType, const MI_Char* errorMessage) {
   1450   if (context && context->ft) {
   1451     return context->ft->PostError(context, resultCode, resultType, errorMessage);
   1452   } else {
   1453     return MI_RESULT_INVALID_PARAMETER;
   1454   }
   1455 }
   1456 
   1457 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_PostInstance(MI_Context* context, const MI_Instance* instance) {
   1458   if (context && context->ft) {
   1459     return context->ft->PostInstance(context, instance);
   1460   } else {
   1461     return MI_RESULT_INVALID_PARAMETER;
   1462   }
   1463 }
   1464 
   1465 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_PostIndication(MI_Context* context, const MI_Instance* indication, MI_Uint32 subscriptionIDCount, const MI_Char* bookmark) {
   1466   if (context && context->ft) {
   1467     return context->ft->PostIndication(context, indication, subscriptionIDCount, bookmark);
   1468   } else {
   1469     return MI_RESULT_INVALID_PARAMETER;
   1470   }
   1471 }
   1472 
   1473 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_ConstructInstance(MI_Context* context, const MI_ClassDecl* classDecl, MI_Instance* instance) {
   1474   if (context && context->ft) {
   1475     return context->ft->ConstructInstance(context, classDecl, instance);
   1476   } else {
   1477     return MI_RESULT_INVALID_PARAMETER;
   1478   }
   1479 }
   1480 
   1481 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_ConstructParameters(MI_Context* context, const MI_MethodDecl* methodDecl, MI_Instance* instance) {
   1482   if (context && context->ft) {
   1483     return context->ft->ConstructParameters(context, methodDecl, instance);
   1484   } else {
   1485     return MI_RESULT_INVALID_PARAMETER;
   1486   }
   1487 }
   1488 
   1489 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_NewInstance(MI_Context* context, const MI_ClassDecl* classDecl, MI_Instance** instance) {
   1490   if (context && context->ft) {
   1491     return context->ft->NewInstance(context, classDecl, instance);
   1492   } else {
   1493     return MI_RESULT_INVALID_PARAMETER;
   1494   }
   1495 }
   1496 
   1497 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_NewDynamicInstance(MI_Context* context, const MI_Char* className, MI_Uint32 flags, MI_Instance** instance) {
   1498   if (context && context->ft) {
   1499     return context->ft->NewDynamicInstance(context, className, flags, instance);
   1500   } else {
   1501     return MI_RESULT_INVALID_PARAMETER;
   1502   }
   1503 }
   1504 
   1505 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_NewParameters(MI_Context* context, const MI_MethodDecl* methodDecl, MI_Instance** instance) {
   1506   if (context && context->ft) {
   1507     return context->ft->NewParameters(context, methodDecl, instance);
   1508   } else {
   1509     return MI_RESULT_INVALID_PARAMETER;
   1510   }
   1511 }
   1512 
   1513 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_Canceled(const MI_Context* context, MI_Boolean* flag) {
   1514   if (context && context->ft) {
   1515     return context->ft->Canceled(context, flag);
   1516   } else {
   1517     return MI_RESULT_INVALID_PARAMETER;
   1518   }
   1519 }
   1520 
   1521 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_GetLocale(const MI_Context* context, MI_LocaleType localeType, MI_Char locale[MI_MAX_LOCALE_SIZE]) {
   1522   if (locale) {
   1523     locale[0] = L'\0';
   1524   }
   1525   if (context && context->ft) {
   1526     return context->ft->GetLocale(context, localeType, locale);
   1527   } else {
   1528     return MI_RESULT_INVALID_PARAMETER;
   1529   }
   1530 }
   1531 
   1532 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_RegisterCancel(MI_Context* context, MI_CancelCallback callback, void* callbackData) {
   1533   if (context && context->ft) {
   1534     return context->ft->RegisterCancel(context, callback, callbackData);
   1535   } else {
   1536     return MI_RESULT_INVALID_PARAMETER;
   1537   }
   1538 }
   1539 
   1540 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_RequestUnload(MI_Context* context) {
   1541   if (context && context->ft) {
   1542     return context->ft->RequestUnload(context);
   1543   } else {
   1544     return MI_RESULT_INVALID_PARAMETER;
   1545   }
   1546 }
   1547 
   1548 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_RefuseUnload(MI_Context* context) {
   1549   if (context && context->ft) {
   1550     return context->ft->RefuseUnload(context);
   1551   } else {
   1552     return MI_RESULT_INVALID_PARAMETER;
   1553   }
   1554 };
   1555 
   1556 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_GetLocalSession(const MI_Context* context, MI_Session* session) {
   1557   if (context && context->ft) {
   1558     return context->ft->GetLocalSession(context, session);
   1559   } else {
   1560     return MI_RESULT_INVALID_PARAMETER;
   1561   }
   1562 }
   1563 
   1564 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_SetStringOption(MI_Context* context, const MI_Char* name, const MI_Char* value) {
   1565   if (context && context->ft) {
   1566     return context->ft->SetStringOption(context, name, value);
   1567   } else {
   1568     return MI_RESULT_INVALID_PARAMETER;
   1569   }
   1570 }
   1571 
   1572 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_GetStringOption(MI_Context* context, const MI_Char* name, const MI_Char** value) {
   1573   if (context && context->ft) {
   1574     return context->ft->GetStringOption(context, name, value);
   1575   } else {
   1576     return MI_RESULT_INVALID_PARAMETER;
   1577   }
   1578 }
   1579 
   1580 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_GetNumberOption(MI_Context* context, const MI_Char* name, MI_Uint32* value) {
   1581   if (context && context->ft) {
   1582     return context->ft->GetNumberOption(context, name, value);
   1583   } else {
   1584     return MI_RESULT_INVALID_PARAMETER;
   1585   }
   1586 }
   1587 
   1588 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_GetCustomOption(MI_Context* context, const MI_Char* name, MI_Type* valueType, MI_Value* value) {
   1589   if (context && context->ft) {
   1590     return context->ft->GetCustomOption(context, name, valueType,value);
   1591   } else {
   1592     return MI_RESULT_INVALID_PARAMETER;
   1593   }
   1594 }
   1595 
   1596 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_GetCustomOptionCount(MI_Context* context, MI_Uint32* count) {
   1597   if (context && context->ft) {
   1598     return context->ft->GetCustomOptionCount(context, count);
   1599   } else {
   1600     return MI_RESULT_INVALID_PARAMETER;
   1601   }
   1602 }
   1603 
   1604 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_GetCustomOptionAt(MI_Context* context, MI_Uint32 index, const MI_Char** name, MI_Type* valueType, MI_Value* value) {
   1605   if (context && context->ft) {
   1606     return context->ft->GetCustomOptionAt(context, index, name, valueType,value);
   1607   } else {
   1608     return MI_RESULT_INVALID_PARAMETER;
   1609   }
   1610 }
   1611 
   1612 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_ShouldProcess(MI_Context* context, const MI_Char *target, const MI_Char* action, MI_Boolean* flag) {
   1613   if (context && context->ft) {
   1614     return context->ft->ShouldProcess(context, target, action , flag);
   1615   } else {
   1616     return MI_RESULT_INVALID_PARAMETER;
   1617   }
   1618 }
   1619 
   1620 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_ShouldContinue(MI_Context* context, const MI_Char* message, MI_Boolean* flag) {
   1621   if (context && context->ft) {
   1622     return context->ft->ShouldContinue(context, message, flag);
   1623   } else {
   1624     return MI_RESULT_INVALID_PARAMETER;
   1625   }
   1626 }
   1627 
   1628 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_PromptUser(MI_Context* context, const MI_Char* message, MI_PromptType promptType, MI_Boolean*flag ) {
   1629   if (context && context->ft) {
   1630     return context->ft->PromptUser(context, message, promptType, flag);
   1631   } else {
   1632     return MI_RESULT_INVALID_PARAMETER;
   1633   }
   1634 }
   1635 
   1636 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_WriteError(MI_Context* context, MI_Uint32 resultCode, const MI_Char* resultType, const MI_Char* errorMessage, MI_Boolean *flag) {
   1637   if (context && context->ft) {
   1638     return context->ft->WriteError(context, resultCode, resultType, errorMessage, flag);
   1639   } else {
   1640     return MI_RESULT_INVALID_PARAMETER;
   1641   }
   1642 }
   1643 
   1644 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_WriteCimError(MI_Context* context, const MI_Instance *error, MI_Boolean *flag) {
   1645   if (context && context->ft) {
   1646     return context->ft->WriteCimError(context, error, flag);
   1647   } else {
   1648     return MI_RESULT_INVALID_PARAMETER;
   1649   }
   1650 }
   1651 
   1652 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_WriteMessage(MI_Context* context, MI_Uint32 channel, const MI_Char* message) {
   1653   if (context && context->ft) {
   1654     return context->ft->WriteMessage(context, channel, message);
   1655   } else {
   1656     return MI_RESULT_INVALID_PARAMETER;
   1657   }
   1658 }
   1659 
   1660 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_WriteProgress(MI_Context* context, const MI_Char* activity, const MI_Char* currentOperation, const MI_Char* statusDescription, MI_Uint32 percentComplete, MI_Uint32 secondsRemaining) {
   1661   if (context && context->ft) {
   1662     return context->ft->WriteProgress(context, activity, currentOperation, statusDescription, percentComplete, secondsRemaining);
   1663   } else {
   1664     return MI_RESULT_INVALID_PARAMETER;
   1665   }
   1666 }
   1667 
   1668 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_WriteStreamParameter(MI_Context* self, const MI_Char* name, const MI_Value* value, MI_Type type, MI_Uint32 flags) {
   1669   if (self && self->ft) {
   1670     return self->ft->WriteStreamParameter(self, name, value, type, flags);
   1671   } else {
   1672     return MI_RESULT_INVALID_PARAMETER;
   1673   }
   1674 }
   1675 
   1676 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_WriteWarning(MI_Context* context, const MI_Char* message) {
   1677   if (context && context->ft) {
   1678     return context->ft->WriteMessage(context, MI_WRITEMESSAGE_CHANNEL_WARNING, message);
   1679   } else {
   1680     return MI_RESULT_INVALID_PARAMETER;
   1681   }
   1682 }
   1683 
   1684 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_WriteVerbose(MI_Context* context, const MI_Char* message) {
   1685   if (context && context->ft) {
   1686     return context->ft->WriteMessage(context, MI_WRITEMESSAGE_CHANNEL_VERBOSE, message);
   1687   } else {
   1688     return MI_RESULT_INVALID_PARAMETER;
   1689   }
   1690 }
   1691 
   1692 MI_INLINE MI_Result MI_INLINE_CALL MI_Context_WriteDebug(MI_Context* context, const MI_Char* message) {
   1693   if (context && context->ft) {
   1694     return context->ft->WriteMessage(context, MI_WRITEMESSAGE_CHANNEL_DEBUG, message);
   1695   } else {
   1696     return MI_RESULT_INVALID_PARAMETER;
   1697   }
   1698 }
   1699 
   1700 #define MI_InstanceOf(inst) (&(inst)->__instance)
   1701 
   1702 # pragma pack(pop)
   1703 
   1704 #endif /* _MI_h */
   1705 
   1706 #ifndef __MI_C_API_H
   1707 #define __MI_C_API_H
   1708 
   1709 #ifndef MI_CALL_VERSION
   1710 #define MI_CALL_VERSION 1
   1711 #endif
   1712 
   1713 #if (MI_CALL_VERSION > 1)
   1714 #error "Unsupported version of MI_CALL_VERSION. This SDK only supports version 1."
   1715 #endif
   1716 
   1717 #ifdef __cplusplus
   1718 extern "C" {
   1719 #endif
   1720 
   1721 typedef MI_Module* (MI_MAIN_CALL *MI_MainFunction)(MI_Server* server);
   1722 
   1723 typedef struct _MI_QualifierSet MI_QualifierSet;
   1724 
   1725 typedef struct _MI_QualifierSetFT {
   1726   MI_Result (MI_CALL *GetQualifierCount)(const MI_QualifierSet *self, MI_Uint32 *count);
   1727   MI_Result (MI_CALL *GetQualifierAt)(const MI_QualifierSet *self, MI_Uint32 index, const MI_Char **name, MI_Type *qualifierType, MI_Uint32 *qualifierFlags, MI_Value *qualifierValue);
   1728   MI_Result (MI_CALL *GetQualifier)(const MI_QualifierSet *self, const MI_Char *name, MI_Type *qualifierType, MI_Uint32 *qualifierFlags, MI_Value *qualifierValue, MI_Uint32 *index);
   1729 } MI_QualifierSetFT;
   1730 
   1731 struct _MI_QualifierSet {
   1732   MI_Uint64 reserved1;
   1733   ptrdiff_t reserved2;
   1734   const MI_QualifierSetFT *ft;
   1735 };
   1736 
   1737 typedef struct _MI_ParameterSet MI_ParameterSet;
   1738 
   1739 typedef struct _MI_ParameterSetFT {
   1740   MI_Result (MI_CALL *GetMethodReturnType)(const MI_ParameterSet *self, MI_Type *returnType, MI_QualifierSet *qualifierSet);
   1741   MI_Result (MI_CALL *GetParameterCount)(const MI_ParameterSet *self, MI_Uint32 *count);
   1742   MI_Result (MI_CALL *GetParameterAt)(const MI_ParameterSet *self, MI_Uint32 index, const MI_Char **name, MI_Type *parameterType, MI_Char **referenceClass, MI_QualifierSet *qualifierSet);
   1743   MI_Result (MI_CALL *GetParameter)(const MI_ParameterSet *self, const MI_Char *name, MI_Type *parameterType, MI_Char **referenceClass, MI_QualifierSet *qualifierSet, MI_Uint32 *index);
   1744 } MI_ParameterSetFT;
   1745 
   1746 struct _MI_ParameterSet {
   1747   MI_Uint64 reserved1;
   1748   ptrdiff_t reserved2;
   1749   const MI_ParameterSetFT * ft;
   1750 };
   1751 
   1752 typedef struct _MI_ClassFT {
   1753   MI_Result (MI_CALL *GetClassName)(const MI_Class* self, const MI_Char** className);
   1754   MI_Result (MI_CALL *GetNameSpace)(const MI_Class* self, const MI_Char** nameSpace);
   1755   MI_Result (MI_CALL *GetServerName)(const MI_Class* self, const MI_Char** serverName);
   1756   MI_Result (MI_CALL *GetElementCount)(const MI_Class* self, MI_Uint32* count);
   1757   MI_Result (MI_CALL *GetElement)(const MI_Class* self, const MI_Char* name, MI_Value* value, MI_Boolean* valueExists, MI_Type* type, MI_Char **referenceClass, MI_QualifierSet *qualifierSet, MI_Uint32* flags, MI_Uint32* index);
   1758   MI_Result (MI_CALL *GetElementAt)(const MI_Class* self, MI_Uint32 index, const MI_Char** name, MI_Value* value, MI_Boolean* valueExists, MI_Type* type, MI_Char **referenceClass, MI_QualifierSet *qualifierSet, MI_Uint32* flags);
   1759   MI_Result (MI_CALL *GetClassQualifierSet)(const MI_Class* self, MI_QualifierSet *qualifierSet);
   1760   MI_Result (MI_CALL *GetMethodCount)(const MI_Class* self, MI_Uint32* count);
   1761   MI_Result (MI_CALL *GetMethodAt)(const MI_Class *self, MI_Uint32 index, const MI_Char **name, MI_QualifierSet *qualifierSet, MI_ParameterSet *parameterSet);
   1762   MI_Result (MI_CALL *GetMethod)(const MI_Class *self, const MI_Char *name, MI_QualifierSet *qualifierSet, MI_ParameterSet *parameterSet, MI_Uint32 *index);
   1763   MI_Result (MI_CALL *GetParentClassName)(const MI_Class *self, const MI_Char **name);
   1764   MI_Result (MI_CALL *GetParentClass)(const MI_Class *self, MI_Class **parentClass);
   1765   MI_Result (MI_CALL *Delete)(MI_Class* self);
   1766   MI_Result (MI_CALL *Clone)(const MI_Class* self, MI_Class** newClass);
   1767 } MI_ClassFT;
   1768 
   1769 struct _MI_Class {
   1770   const MI_ClassFT *ft;
   1771   MI_CONST MI_ClassDecl *classDecl;
   1772   MI_CONST MI_Char *namespaceName;
   1773   MI_CONST MI_Char *serverName;
   1774   ptrdiff_t reserved[4];
   1775 };
   1776 
   1777 typedef struct _MI_Application MI_Application;
   1778 typedef struct _MI_Session MI_Session;
   1779 typedef struct _MI_Operation MI_Operation;
   1780 typedef struct _MI_HostedProvider MI_HostedProvider;
   1781 typedef struct _MI_DestinationOptions MI_DestinationOptions;
   1782 typedef struct _MI_OperationOptions MI_OperationOptions;
   1783 
   1784 typedef enum _MI_OperationCallback_ResponseType {
   1785   MI_OperationCallback_ResponseType_No,
   1786   MI_OperationCallback_ResponseType_Yes,
   1787   MI_OperationCallback_ResponseType_NoToAll,
   1788   MI_OperationCallback_ResponseType_YesToAll
   1789 } MI_OperationCallback_ResponseType;
   1790 
   1791 typedef void (MI_CALL *MI_OperationCallback_PromptUser)(MI_Operation *operation, void *callbackContext, const MI_Char *message, MI_PromptType promptType, MI_Result (MI_CALL * promptUserResult)(MI_Operation *operation, MI_OperationCallback_ResponseType response));
   1792 typedef void (MI_CALL *MI_OperationCallback_WriteError)(MI_Operation *operation, void *callbackContext, MI_Instance*instance, MI_Result (MI_CALL * writeErrorResult)(MI_Operation *operation, MI_OperationCallback_ResponseType response));
   1793 
   1794 #define MI_WRITEMESSAGE_CHANNEL_WARNING 0
   1795 #define MI_WRITEMESSAGE_CHANNEL_VERBOSE 1
   1796 #define MI_WRITEMESSAGE_CHANNEL_DEBUG 2
   1797 
   1798 typedef void (MI_CALL *MI_OperationCallback_WriteMessage)(MI_Operation *operation, void *callbackContext, MI_Uint32 channel, const MI_Char *message);
   1799 typedef void (MI_CALL *MI_OperationCallback_WriteProgress)(MI_Operation *operation, void *callbackContext, const MI_Char *activity, const MI_Char *currentOperation, const MI_Char *statusDescription, MI_Uint32 percentageComplete, MI_Uint32 secondsRemaining);
   1800 typedef void (MI_CALL *MI_OperationCallback_Instance)(MI_Operation *operation, void *callbackContext, const MI_Instance *instance, MI_Boolean moreResults, MI_Result resultCode, const MI_Char *errorString, const MI_Instance *errorDetails, MI_Result (MI_CALL * resultAcknowledgement)(MI_Operation *operation));
   1801 typedef void (MI_CALL *MI_OperationCallback_StreamedParameter)(MI_Operation *operation, void *callbackContext, const MI_Char *parameterName, MI_Type resultType, const MI_Value *result, MI_Result (MI_CALL * resultAcknowledgement)(MI_Operation *operation));
   1802 typedef void (MI_CALL *MI_OperationCallback_Indication)(MI_Operation *operation, void *callbackContext, const MI_Instance *instance, const MI_Char *bookmark, const MI_Char *machineID, MI_Boolean moreResults, MI_Result resultCode, const MI_Char *errorString, const MI_Instance *errorDetails, MI_Result (MI_CALL * resultAcknowledgement)(MI_Operation *operation));
   1803 typedef void (MI_CALL *MI_OperationCallback_Class)(MI_Operation *operation, void *callbackContext, const MI_Class *classResult, MI_Boolean moreResults, MI_Result resultCode, const MI_Char *errorString, const MI_Instance *errorDetails, MI_Result (MI_CALL * resultAcknowledgement)(MI_Operation *operation));
   1804 
   1805 typedef struct _MI_OperationCallbacks {
   1806   void *callbackContext;
   1807   MI_OperationCallback_PromptUser promptUser;
   1808   MI_OperationCallback_WriteError writeError;
   1809   MI_OperationCallback_WriteMessage writeMessage;
   1810   MI_OperationCallback_WriteProgress writeProgress;
   1811   MI_OperationCallback_Instance instanceResult;
   1812   MI_OperationCallback_Indication indicationResult;
   1813   MI_OperationCallback_Class classResult;
   1814   MI_OperationCallback_StreamedParameter streamedParameterResult;
   1815 } MI_OperationCallbacks;
   1816 
   1817 #define MI_OPERATIONCALLBACKS_NULL {NULL}
   1818 
   1819 typedef struct _MI_SessionCallbacks {
   1820   void *callbackContext;
   1821   void (MI_CALL *writeMessage)(MI_Application *application, void *callbackContext, MI_Uint32 channel, const MI_Char * message);
   1822   void (MI_CALL *writeError)(MI_Application *application, void *callbackContext, MI_Instance *instance);
   1823 } MI_SessionCallbacks;
   1824 
   1825 #define MI_SESSIONCALLBACKS_NULL {NULL}
   1826 
   1827 #define MI_OPERATIONFLAGS_AUTOMATIC_ACK_RESULTS 0x0000
   1828 #define MI_OPERATIONFLAGS_MANUAL_ACK_RESULTS 0x0001
   1829 #define MI_OPERATIONFLAGS_NO_RTTI 0x0400
   1830 #define MI_OPERATIONFLAGS_BASIC_RTTI 0x0002
   1831 #define MI_OPERATIONFLAGS_STANDARD_RTTI 0x0800
   1832 #define MI_OPERATIONFLAGS_FULL_RTTI 0x0004
   1833 #define MI_OPERATIONFLAGS_DEFAULT_RTTI 0
   1834 #define MI_OPERATIONFLAGS_NON_LOCALIZED_QUALIFIERS 0x0000
   1835 #define MI_OPERATIONFLAGS_LOCALIZED_QUALIFIERS 0x0008
   1836 #define MI_OPERATIONFLAGS_NON_EXPENSIVE_PROPERTIES_ONLY 0x0040
   1837 #define MI_OPERATIONFLAGS_EXPENSIVE_PROPERTIES 0x0040
   1838 #define MI_OPERATIONFLAGS_POLYMORPHISM_DEEP 0x0000
   1839 #define MI_OPERATIONFLAGS_POLYMORPHISM_SHALLOW 0x0080
   1840 #define MI_OPERATIONFLAGS_POLYMORPHISM_DEEP_BASE_PROPS_ONLY 0x0180
   1841 #define MI_OPERATIONFLAGS_REPORT_OPERATION_STARTED 0x0200
   1842 #define MI_AUTH_TYPE_DEFAULT MI_T("Default")
   1843 #define MI_AUTH_TYPE_NONE MI_T("None")
   1844 #define MI_AUTH_TYPE_DIGEST MI_T("Digest")
   1845 #define MI_AUTH_TYPE_NEGO_WITH_CREDS MI_T("NegoWithCreds")
   1846 #define MI_AUTH_TYPE_NEGO_NO_CREDS MI_T("NegoNoCreds")
   1847 #define MI_AUTH_TYPE_BASIC MI_T("Basic")
   1848 #define MI_AUTH_TYPE_KERBEROS MI_T("Kerberos")
   1849 #define MI_AUTH_TYPE_CLIENT_CERTS MI_T("ClientCerts")
   1850 #define MI_AUTH_TYPE_NTLM MI_T("Ntlmdomain")
   1851 #if (WINVER >= 0x600)
   1852 #define MI_AUTH_TYPE_CREDSSP MI_T("CredSSP")
   1853 #endif
   1854 #define MI_AUTH_TYPE_ISSUER_CERT MI_T("IssuerCert")
   1855 
   1856 typedef struct _MI_UsernamePasswordCreds {
   1857   const MI_Char *domain;
   1858   const MI_Char *username;
   1859   const MI_Char *password;
   1860 } MI_UsernamePasswordCreds;
   1861 
   1862 typedef struct _MI_UserCredentials {
   1863   const MI_Char *authenticationType;
   1864   union {
   1865     MI_UsernamePasswordCreds usernamePassword;
   1866     const MI_Char *certificateThumbprint;
   1867   } credentials;
   1868 } MI_UserCredentials;
   1869 
   1870 typedef enum _MI_SubscriptionDeliveryType {
   1871   MI_SubscriptionDeliveryType_Pull = 1,
   1872   MI_SubscriptionDeliveryType_Push = 2
   1873 } MI_SubscriptionDeliveryType;
   1874 
   1875 typedef struct _MI_SubscriptionDeliveryOptions MI_SubscriptionDeliveryOptions;
   1876 
   1877 typedef struct _MI_SubscriptionDeliveryOptionsFT {
   1878   MI_Result (MI_CALL *SetString)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, const MI_Char *value, MI_Uint32 flags);
   1879   MI_Result (MI_CALL *SetNumber)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, MI_Uint32 value, MI_Uint32 flags);
   1880   MI_Result (MI_CALL *SetDateTime)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, const MI_Datetime *value, MI_Uint32 flags);
   1881   MI_Result (MI_CALL *SetInterval)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, const MI_Interval *value, MI_Uint32 flags);
   1882   MI_Result (MI_CALL *AddCredentials)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, const MI_UserCredentials *credentials, MI_Uint32 flags);
   1883   MI_Result (MI_CALL *Delete)(MI_SubscriptionDeliveryOptions* self);
   1884   MI_Result (MI_CALL *GetString)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, const MI_Char **value, MI_Uint32 *index, MI_Uint32 *flags);
   1885   MI_Result (MI_CALL *GetNumber)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, MI_Uint32 *value, MI_Uint32 *index, MI_Uint32 *flags);
   1886   MI_Result (MI_CALL *GetDateTime)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, MI_Datetime *value, MI_Uint32 *index, MI_Uint32 *flags);
   1887   MI_Result (MI_CALL *GetInterval)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, MI_Interval *value, MI_Uint32 *index, MI_Uint32 *flags);
   1888   MI_Result (MI_CALL *GetOptionCount)(MI_SubscriptionDeliveryOptions *options, MI_Uint32 *count);
   1889   MI_Result (MI_CALL *GetOptionAt)(MI_SubscriptionDeliveryOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_Value *value, MI_Type *type, MI_Uint32 *flags);
   1890   MI_Result (MI_CALL *GetOption)(MI_SubscriptionDeliveryOptions *options, const MI_Char *optionName, MI_Value *value, MI_Type *type, MI_Uint32 *index, MI_Uint32 *flags);
   1891   MI_Result (MI_CALL *GetCredentialsCount)(MI_SubscriptionDeliveryOptions *options, MI_Uint32 *count);
   1892   MI_Result (MI_CALL *GetCredentialsAt)(MI_SubscriptionDeliveryOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_UserCredentials *credentials, MI_Uint32 *flags);
   1893   MI_Result (MI_CALL *GetCredentialsPasswordAt)(MI_SubscriptionDeliveryOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_Char *password, MI_Uint32 bufferLength, MI_Uint32 *passwordLength, MI_Uint32 *flags);
   1894   MI_Result (MI_CALL *Clone)(const MI_SubscriptionDeliveryOptions* self, MI_SubscriptionDeliveryOptions* newSubscriptionDeliveryOptions);
   1895 } MI_SubscriptionDeliveryOptionsFT;
   1896 
   1897 typedef struct _MI_SubscriptionDeliveryOptions {
   1898   MI_Uint64 reserved1;
   1899   ptrdiff_t reserved2;
   1900   const MI_SubscriptionDeliveryOptionsFT * ft;
   1901 } MI_SubscriptionDeliveryOptions;
   1902 
   1903 #define MI_SUBSCRIPTIONDELIVERYOPTIONS_NULL { 0, 0, NULL }
   1904 
   1905 typedef struct _MI_Serializer MI_Serializer;
   1906 typedef struct _MI_SerializerFT MI_SerializerFT;
   1907 typedef struct _MI_Deserializer MI_Deserializer;
   1908 typedef struct _MI_DeserializerFT MI_DeserializerFT;
   1909 
   1910 struct _MI_Serializer {
   1911   MI_Uint64 reserved1;
   1912   ptrdiff_t reserved2;
   1913 };
   1914 
   1915 struct _MI_Deserializer {
   1916   MI_Uint64 reserved1;
   1917   ptrdiff_t reserved2;
   1918 };
   1919 
   1920 struct _MI_SerializerFT {
   1921   MI_Result (MI_CALL *Close)(MI_Serializer *serializer);
   1922   MI_Result (MI_CALL *SerializeClass)(MI_Serializer *serializer, MI_Uint32 flags, const MI_Class *classObject, MI_Uint8 *clientBuffer, MI_Uint32 clientBufferLength, MI_Uint32 *clientBufferNeeded);
   1923   MI_Result (MI_CALL *SerializeInstance)(MI_Serializer *serializer, MI_Uint32 flags, const MI_Instance *instanceObject, MI_Uint8 *clientBuffer, MI_Uint32 clientBufferLength, MI_Uint32 *clientBufferNeeded);
   1924 };
   1925 
   1926 typedef MI_Result (MI_CALL *MI_Deserializer_ClassObjectNeeded)(void *context, const MI_Char *serverName, const MI_Char *namespaceName, const MI_Char *className, MI_Class **requestedClassObject);
   1927 
   1928 struct _MI_DeserializerFT {
   1929   MI_Result (MI_CALL *Close)(MI_Deserializer *deserializer);
   1930   MI_Result (MI_CALL *DeserializeClass)(MI_Deserializer *deserializer, MI_Uint32 flags, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Class *parentClass, const MI_Char *serverName, const MI_Char *namespaceName, MI_Deserializer_ClassObjectNeeded classObjectNeeded, void *classObjectNeededContext, MI_Uint32 *serializedBufferRead, MI_Class **classObject, MI_Instance **cimErrorDetails);
   1931   MI_Result (MI_CALL *Class_GetClassName)(MI_Deserializer *deserializer, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Char *className, MI_Uint32 *classNameLength, MI_Instance **cimErrorDetails);
   1932   MI_Result (MI_CALL *Class_GetParentClassName)(MI_Deserializer *deserializer, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Char *parentClassName, MI_Uint32 *parentClassNameLength, MI_Instance **cimErrorDetails);
   1933   MI_Result (MI_CALL *DeserializeInstance)(MI_Deserializer *deserializer, MI_Uint32 flags, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Class **classObjects, MI_Uint32 numberClassObjects, MI_Deserializer_ClassObjectNeeded classObjectNeeded, void *classObjectNeededContext, MI_Uint32 *serializedBufferRead, MI_Instance **instanceObject, MI_Instance **cimErrorDetails);
   1934   MI_Result (MI_CALL *Instance_GetClassName)(MI_Deserializer *deserializer, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Char *className, MI_Uint32 *classNameLength, MI_Instance **cimErrorDetails);
   1935 };
   1936 
   1937 typedef struct _MI_ApplicationFT {
   1938   MI_Result (MI_CALL *Close)(MI_Application *application);
   1939   MI_Result (MI_CALL *NewSession)(MI_Application *application, const MI_Char *protocol, const MI_Char *destination, MI_DestinationOptions *options, MI_SessionCallbacks *callbacks, MI_Instance **extendedError, MI_Session *session);
   1940   MI_Result (MI_CALL *NewHostedProvider)(MI_Application *application, const MI_Char *namespaceName, const MI_Char *providerName, MI_MainFunction mi_Main, MI_Instance **extendedError, MI_HostedProvider *provider);
   1941   MI_Result (MI_CALL *NewInstance)(MI_Application *application, const MI_Char *className, const MI_ClassDecl *classRTTI, MI_Instance **instance);
   1942   MI_Result (MI_CALL *NewDestinationOptions)(MI_Application *application, MI_DestinationOptions *options);
   1943   MI_Result (MI_CALL *NewOperationOptions)(MI_Application *application, MI_Boolean customOptionsMustUnderstand, MI_OperationOptions *options);
   1944   MI_Result (MI_CALL *NewSubscriptionDeliveryOptions)(MI_Application *application, MI_SubscriptionDeliveryType deliveryType, MI_SubscriptionDeliveryOptions *deliveryOptions);
   1945   MI_Result (MI_CALL *NewSerializer)(MI_Application *application, MI_Uint32 flags, MI_Char *format, MI_Serializer *serializer);
   1946   MI_Result (MI_CALL *NewDeserializer)(MI_Application *application, MI_Uint32 flags, MI_Char *format, MI_Deserializer *deserializer);
   1947   MI_Result (MI_CALL *NewInstanceFromClass)(MI_Application *application, const MI_Char *className, const MI_Class *classObject, MI_Instance **instance);
   1948   MI_Result (MI_CALL *NewClass)(MI_Application *application, const MI_ClassDecl* classDecl, const MI_Char *namespaceName, const MI_Char *serverName, MI_Class** classObject);
   1949 } MI_ApplicationFT;
   1950 
   1951 typedef struct _MI_HostedProviderFT {
   1952   MI_Result (MI_CALL *Close)(MI_HostedProvider *hostedProvider);
   1953   MI_Result (MI_CALL *GetApplication)(MI_HostedProvider *hostedProvider, MI_Application *application);
   1954 } MI_HostedProviderFT;
   1955 
   1956 typedef struct _MI_SessionFT {
   1957   MI_Result (MI_CALL *Close)(MI_Session *session, void *completionContext, void (MI_CALL *completionCallback)(void *completionContext));
   1958   MI_Result (MI_CALL *GetApplication)(MI_Session *session, MI_Application *application);
   1959   void (MI_CALL *GetInstance)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *inboundInstance, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1960   void (MI_CALL *ModifyInstance)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *inboundInstance, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1961   void (MI_CALL *CreateInstance)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *inboundInstance, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1962   void (MI_CALL *DeleteInstance)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *inboundInstance, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1963   void (MI_CALL *Invoke)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *className, const MI_Char *methodName, const MI_Instance *inboundInstance, const MI_Instance *inboundProperties, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1964   void (MI_CALL *EnumerateInstances)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *className, MI_Boolean keysOnly, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1965   void (MI_CALL *QueryInstances)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *queryDialect, const MI_Char *queryExpression, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1966   void (MI_CALL *AssociatorInstances)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *instanceKeys, const MI_Char *assocClass, const MI_Char *resultClass, const MI_Char *role, const MI_Char *resultRole, MI_Boolean keysOnly, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1967   void (MI_CALL *ReferenceInstances)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *instanceKeys, const MI_Char *resultClass, const MI_Char *role, MI_Boolean keysOnly, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1968   void (MI_CALL *Subscribe)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *queryDialect, const MI_Char *queryExpression, const MI_SubscriptionDeliveryOptions *deliverOptions, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1969   void (MI_CALL *GetClass)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *className, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1970   void (MI_CALL *EnumerateClasses)(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *className, MI_Boolean classNamesOnly, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1971   void (MI_CALL *TestConnection)(MI_Session *session, MI_Uint32 flags, MI_OperationCallbacks *callbacks, MI_Operation *operation);
   1972 } MI_SessionFT;
   1973 
   1974 typedef struct _MI_OperationFT {
   1975   MI_Result (MI_CALL *Close)(MI_Operation *operation);
   1976   MI_Result (MI_CALL *Cancel)(MI_Operation *operation, MI_CancellationReason reason);
   1977   MI_Result (MI_CALL *GetSession)(MI_Operation *operation, MI_Session *session);
   1978   MI_Result (MI_CALL *GetInstance)(MI_Operation *operation, const MI_Instance **instance, MI_Boolean *moreResults, MI_Result *result, const MI_Char **errorMessage, const MI_Instance **completionDetails);
   1979   MI_Result (MI_CALL *GetIndication)(MI_Operation *operation, const MI_Instance **instance, const MI_Char **bookmark, const MI_Char **machineID, MI_Boolean *moreResults, MI_Result *result, const MI_Char **errorMessage, const MI_Instance **completionDetails);
   1980   MI_Result (MI_CALL *GetClass)(MI_Operation *operation, const MI_Class **classResult, MI_Boolean *moreResults, MI_Result *result, const MI_Char **errorMessage, const MI_Instance **completionDetails);
   1981 } MI_OperationFT;
   1982 
   1983 typedef struct _MI_DestinationOptionsFT {
   1984   void (MI_CALL *Delete)(MI_DestinationOptions *options);
   1985   MI_Result (MI_CALL *SetString)(MI_DestinationOptions *options, const MI_Char *optionName, const MI_Char *value, MI_Uint32 flags);
   1986   MI_Result (MI_CALL *SetNumber)(MI_DestinationOptions *options, const MI_Char *optionName, MI_Uint32 value, MI_Uint32 flags);
   1987   MI_Result (MI_CALL *AddCredentials)(MI_DestinationOptions *options, const MI_Char *optionName, const MI_UserCredentials *credentials, MI_Uint32 flags);
   1988   MI_Result (MI_CALL *GetString)(MI_DestinationOptions *options, const MI_Char *optionName, const MI_Char **value, MI_Uint32 *index, MI_Uint32 *flags);
   1989   MI_Result (MI_CALL *GetNumber)(MI_DestinationOptions *options, const MI_Char *optionName, MI_Uint32 *value, MI_Uint32 *index, MI_Uint32 *flags);
   1990   MI_Result (MI_CALL *GetOptionCount)(MI_DestinationOptions *options, MI_Uint32 *count);
   1991   MI_Result (MI_CALL *GetOptionAt)(MI_DestinationOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_Value *value, MI_Type *type, MI_Uint32 *flags);
   1992   MI_Result (MI_CALL *GetOption)(MI_DestinationOptions *options, const MI_Char *optionName, MI_Value *value, MI_Type *type, MI_Uint32 *index, MI_Uint32 *flags);
   1993   MI_Result (MI_CALL *GetCredentialsCount)(MI_DestinationOptions *options, MI_Uint32 *count);
   1994   MI_Result (MI_CALL *GetCredentialsAt)(MI_DestinationOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_UserCredentials *credentials, MI_Uint32 *flags);
   1995   MI_Result (MI_CALL *GetCredentialsPasswordAt)(MI_DestinationOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_Char *password, MI_Uint32 bufferLength, MI_Uint32 *passwordLength, MI_Uint32 *flags);
   1996   MI_Result (MI_CALL *Clone)(const MI_DestinationOptions* self, MI_DestinationOptions* newDestinationOptions);
   1997   MI_Result (MI_CALL *SetInterval)(MI_DestinationOptions *options, const MI_Char *optionName, const MI_Interval *value, MI_Uint32 flags);
   1998   MI_Result (MI_CALL *GetInterval)(MI_DestinationOptions *options, const MI_Char *optionName, MI_Interval *value, MI_Uint32 *index, MI_Uint32 *flags);
   1999 } MI_DestinationOptionsFT;
   2000 
   2001 typedef struct _MI_OperationOptionsFT {
   2002   void (MI_CALL *Delete)(MI_OperationOptions *options);
   2003   MI_Result (MI_CALL *SetString)(MI_OperationOptions *options, const MI_Char *optionName, const MI_Char *value, MI_Uint32 flags);
   2004   MI_Result (MI_CALL *SetNumber)(MI_OperationOptions *options, const MI_Char *optionName, MI_Uint32 value, MI_Uint32 flags);
   2005   MI_Result (MI_CALL *SetCustomOption)(MI_OperationOptions *options, const MI_Char *optionName, MI_Type valueType, const MI_Value *value, MI_Boolean mustComply, MI_Uint32 flags);
   2006   MI_Result (MI_CALL *GetString)(MI_OperationOptions *options, const MI_Char *optionName, const MI_Char **value, MI_Uint32 *index, MI_Uint32 *flags);
   2007   MI_Result (MI_CALL *GetNumber)(MI_OperationOptions *options, const MI_Char *optionName, MI_Uint32 *value, MI_Uint32 *index, MI_Uint32 *flags);
   2008   MI_Result (MI_CALL *GetOptionCount)(MI_OperationOptions *options, MI_Uint32 *count);
   2009   MI_Result (MI_CALL *GetOptionAt)(MI_OperationOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_Value *value, MI_Type *type, MI_Uint32 *flags);
   2010   MI_Result (MI_CALL *GetOption)(MI_OperationOptions *options, const MI_Char *optionName, MI_Value *value, MI_Type *type, MI_Uint32 *index, MI_Uint32 *flags);
   2011   MI_Result (MI_CALL *GetEnabledChannels)(MI_OperationOptions *options, const MI_Char *optionName, MI_Uint32 *channels, MI_Uint32 bufferLength, MI_Uint32 *channelCount, MI_Uint32 *flags);
   2012   MI_Result (MI_CALL *Clone)(const MI_OperationOptions* self, MI_OperationOptions* newOperationOptions);
   2013   MI_Result (MI_CALL *SetInterval)(MI_OperationOptions *options, const MI_Char *optionName, const MI_Interval *value, MI_Uint32 flags);
   2014   MI_Result (MI_CALL *GetInterval)(MI_OperationOptions *options, const MI_Char *optionName, MI_Interval *value, MI_Uint32 *index, MI_Uint32 *flags);
   2015 } MI_OperationOptionsFT;
   2016 
   2017 struct _MI_Application {
   2018   MI_Uint64 reserved1;
   2019   ptrdiff_t reserved2;
   2020   const MI_ApplicationFT *ft;
   2021 };
   2022 
   2023 #define MI_APPLICATION_NULL { 0, 0, NULL }
   2024 
   2025 struct _MI_Session {
   2026   MI_Uint64 reserved1;
   2027   ptrdiff_t reserved2;
   2028   const MI_SessionFT *ft;
   2029 };
   2030 
   2031 #define MI_SESSION_NULL { 0, 0, NULL }
   2032 
   2033 struct _MI_Operation {
   2034   MI_Uint64 reserved1;
   2035   ptrdiff_t reserved2;
   2036   const MI_OperationFT *ft;
   2037 };
   2038 
   2039 #define MI_OPERATION_NULL { 0, 0, NULL }
   2040 
   2041 struct _MI_HostedProvider {
   2042   MI_Uint64 reserved1;
   2043   ptrdiff_t reserved2;
   2044   const MI_HostedProviderFT *ft;
   2045 };
   2046 
   2047 #define MI_HOSTEDPROVIDER_NULL { 0, 0, NULL }
   2048 
   2049 struct _MI_DestinationOptions {
   2050   MI_Uint64 reserved1;
   2051   ptrdiff_t reserved2;
   2052   const MI_DestinationOptionsFT *ft;
   2053 };
   2054 
   2055 #define MI_DESTINATIONOPTIONS_NULL { 0, 0, NULL }
   2056 
   2057 struct _MI_OperationOptions {
   2058   MI_Uint64 reserved1;
   2059   ptrdiff_t reserved2;
   2060   const MI_OperationOptionsFT *ft;
   2061 };
   2062 
   2063 #define MI_OPERATIONOPTIONS_NULL { 0, 0, NULL }
   2064 
   2065 typedef struct _MI_UtilitiesFT {
   2066   MI_ErrorCategory (MI_CALL *MapErrorToMiErrorCategory)(MI_Char *errorType, MI_Uint32 error);
   2067   MI_Result (MI_CALL *CimErrorFromErrorCode)(MI_Uint32 error, const MI_Char *errorType, const MI_Char* errorMessage, MI_Instance **cimError);
   2068 } MI_UtilitiesFT;
   2069 
   2070 typedef struct _MI_ClientFT_V1 {
   2071   const MI_ApplicationFT *applicationFT;
   2072   const MI_SessionFT *sessionFT;
   2073   const MI_OperationFT *operationFT;
   2074   const MI_HostedProviderFT *hostedProviderFT;
   2075   const MI_SerializerFT *serializerFT;
   2076   const MI_DeserializerFT *deserializerFT;
   2077   const MI_SubscriptionDeliveryOptionsFT *subscribeDeliveryOptionsFT;
   2078   const MI_DestinationOptionsFT *destinationOptionsFT;
   2079   const MI_OperationOptionsFT *operationOptionsFT;
   2080   const MI_UtilitiesFT *utilitiesFT;
   2081 } MI_ClientFT_V1;
   2082 
   2083 #ifndef _MANAGED_PURE
   2084 __declspec(dllimport) const MI_ClientFT_V1 *mi_clientFT_V1;
   2085 #endif
   2086 
   2087 #if (MI_CALL_VERSION == 1)
   2088 #define mi_clientFT mi_clientFT_V1
   2089 #endif
   2090 
   2091 MI_Result MI_MAIN_CALL MI_Application_InitializeV1(MI_Uint32 flags, const MI_Char *applicationID, MI_Instance **extendedError, MI_Application *application);
   2092 
   2093 #if MI_CALL_VERSION == 1
   2094 #define MI_Application_Initialize MI_Application_InitializeV1
   2095 #endif
   2096 
   2097 MI_INLINE MI_Result MI_Application_Close(MI_Application *application) {
   2098   if (application && application->ft) {
   2099     return application->ft->Close(application);
   2100   } else {
   2101     return MI_RESULT_INVALID_PARAMETER;
   2102   }
   2103 }
   2104 
   2105 MI_INLINE MI_Result MI_Application_NewInstance(MI_Application *application, const MI_Char *className, const MI_ClassDecl *classRTTI, MI_Instance **instance) {
   2106   if (application && application->ft) {
   2107     return application->ft->NewInstance(application, className, classRTTI, instance);
   2108   } else {
   2109     if (instance) {
   2110       *instance = NULL;
   2111     }
   2112     return MI_RESULT_INVALID_PARAMETER;
   2113   }
   2114 }
   2115 
   2116 MI_INLINE MI_Result MI_Application_NewInstanceFromClass(MI_Application *application, const MI_Char *className, const MI_Class *classObject, MI_Instance **instance) {
   2117   if (application && application->ft) {
   2118     return application->ft->NewInstanceFromClass(application, className, classObject, instance);
   2119   } else {
   2120     if (instance) {
   2121       *instance = NULL;
   2122     }
   2123     return MI_RESULT_INVALID_PARAMETER;
   2124   }
   2125 }
   2126 
   2127 MI_INLINE MI_Result MI_Application_NewClass(MI_Application *application, const MI_ClassDecl* classDecl, const MI_Char *namespaceName, const MI_Char *serverName, MI_Class** classObject) {
   2128   if (application && application->ft) {
   2129     return application->ft->NewClass(application, classDecl, namespaceName, serverName, classObject);
   2130   } else {
   2131     if (classObject) {
   2132       *classObject = NULL;
   2133     }
   2134     return MI_RESULT_INVALID_PARAMETER;
   2135   }
   2136 }
   2137 
   2138 MI_INLINE MI_Result MI_Application_NewParameterSet(MI_Application *application, const MI_ClassDecl *classRTTI, MI_Instance **instance) {
   2139   if (application && application->ft) {
   2140     return application->ft->NewInstance(application, MI_T("Parameters"), classRTTI, instance);
   2141   } else {
   2142     if (instance) {
   2143       *instance = NULL;
   2144     }
   2145     return MI_RESULT_INVALID_PARAMETER;
   2146   }
   2147 }
   2148 
   2149 MI_INLINE MI_Result MI_Application_NewDestinationOptions(MI_Application *application, MI_DestinationOptions *options) {
   2150   if (application && application->ft) {
   2151     return application->ft->NewDestinationOptions(application, options);
   2152   } else {
   2153     if (options) {
   2154       memset(options, 0, sizeof(MI_DestinationOptions));
   2155     }
   2156     return MI_RESULT_INVALID_PARAMETER;
   2157   }
   2158 }
   2159 
   2160 MI_INLINE MI_Result MI_Application_NewOperationOptions(MI_Application *application, MI_Boolean mustUnderstand, MI_OperationOptions *options) {
   2161   if (application && application->ft) {
   2162     return application->ft->NewOperationOptions(application, mustUnderstand, options);
   2163   } else {
   2164     if (options) {
   2165       memset(options, 0, sizeof(MI_OperationOptions));
   2166     }
   2167     return MI_RESULT_INVALID_PARAMETER;
   2168   }
   2169 }
   2170 
   2171 MI_INLINE MI_Result MI_Application_NewSubscriptionDeliveryOptions(MI_Application *application, MI_SubscriptionDeliveryType deliveryType, MI_SubscriptionDeliveryOptions *deliveryOptions) {
   2172   if (application && application->ft) {
   2173     return application->ft->NewSubscriptionDeliveryOptions(application, deliveryType, deliveryOptions);
   2174   } else {
   2175     if (deliveryOptions) {
   2176       memset(deliveryOptions, 0, sizeof(MI_SubscriptionDeliveryOptions));
   2177     }
   2178     return MI_RESULT_INVALID_PARAMETER;
   2179   }
   2180 }
   2181 
   2182 MI_INLINE MI_Result MI_Application_NewSession(MI_Application *application, const MI_Char *protocol, const MI_Char *destination, MI_DestinationOptions *options, MI_SessionCallbacks *callbacks, MI_Instance **extendedError, MI_Session *session) {
   2183   if (application && application->ft) {
   2184     return application->ft->NewSession(application, protocol, destination, options, callbacks, extendedError, session);
   2185   } else {
   2186     if (session) {
   2187       memset(session, 0, sizeof(MI_Session));
   2188     }
   2189     return MI_RESULT_INVALID_PARAMETER;
   2190   }
   2191 }
   2192 
   2193 MI_INLINE MI_Result MI_Application_NewHostedProvider(MI_Application *application, const MI_Char *namespaceName, const MI_Char *providerName, MI_MainFunction mi_Main, MI_Instance **extendedError, MI_HostedProvider *hostedProvider) {
   2194   if (application && application->ft) {
   2195     return application->ft->NewHostedProvider(application, namespaceName, providerName, mi_Main, extendedError, hostedProvider);
   2196   } else {
   2197     if (hostedProvider) {
   2198       memset(hostedProvider, 0, sizeof(MI_HostedProvider));
   2199     }
   2200     return MI_RESULT_INVALID_PARAMETER;
   2201   }
   2202 }
   2203 
   2204 MI_INLINE MI_Result MI_Application_NewSerializer(MI_Application *application, MI_Uint32 flags, MI_Char *format, MI_Serializer *serializer) {
   2205   if (application && application->ft) {
   2206     return application->ft->NewSerializer(application, flags, format, serializer);
   2207   } else {
   2208     if (serializer) {
   2209       memset(serializer, 0, sizeof(MI_Serializer));
   2210     }
   2211     return MI_RESULT_INVALID_PARAMETER;
   2212   }
   2213 }
   2214 
   2215 MI_INLINE MI_Result MI_Application_NewDeserializer(MI_Application *application, MI_Uint32 flags, MI_Char *format, MI_Deserializer *deserializer) {
   2216   if (application && application->ft) {
   2217     return application->ft->NewDeserializer(application, flags, format, deserializer);
   2218   } else {
   2219     if (deserializer) {
   2220       memset(deserializer, 0, sizeof(MI_Deserializer));
   2221     }
   2222     return MI_RESULT_INVALID_PARAMETER;
   2223   }
   2224 }
   2225 
   2226 MI_INLINE MI_Result MI_HostedProvider_Close(MI_HostedProvider *hostedProvider) {
   2227   if (hostedProvider && hostedProvider->ft) {
   2228     return hostedProvider->ft->Close(hostedProvider);
   2229   } else {
   2230     return MI_RESULT_INVALID_PARAMETER;
   2231   }
   2232 }
   2233 
   2234 MI_INLINE MI_Result MI_HostedProvider_GetApplication(MI_HostedProvider *hostedProvider, MI_Application *application) {
   2235   if (hostedProvider && hostedProvider->ft) {
   2236     return hostedProvider->ft->GetApplication(hostedProvider, application);
   2237   } else if (application) {
   2238     memset(application, 0, sizeof(MI_Application));
   2239   }
   2240   return MI_RESULT_INVALID_PARAMETER;
   2241 }
   2242 
   2243 MI_INLINE MI_Result MI_Session_Close(MI_Session *session, void *completionContext, void (MI_CALL *completionCallback)(void *completionContext)) {
   2244   if (session && session->ft) {
   2245     return session->ft->Close(session, completionContext, completionCallback);
   2246   } else if (completionCallback) {
   2247     completionCallback(completionContext);
   2248     return MI_RESULT_OK;
   2249   } else {
   2250     return MI_RESULT_INVALID_PARAMETER;
   2251   }
   2252 }
   2253 
   2254 MI_INLINE MI_Result MI_Session_GetApplication(MI_Session *session, MI_Application *application) {
   2255   if (session && session->ft) {
   2256     return session->ft->GetApplication(session, application);
   2257   }
   2258   if (application) {
   2259     memset(application, 0, sizeof(MI_Application));
   2260   }
   2261   return MI_RESULT_INVALID_PARAMETER;
   2262 }
   2263 
   2264 MI_INLINE void MI_Session_GetInstance(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *inboundInstance, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2265   if (session && session->ft) {
   2266     session->ft->GetInstance(session, flags, options, namespaceName, inboundInstance, callbacks, operation);
   2267   } else {
   2268     if (operation) {
   2269       memset(operation, 0, sizeof(*operation));
   2270     }
   2271     if (callbacks && callbacks->instanceResult) {
   2272       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2273     }
   2274   }
   2275 }
   2276 
   2277 MI_INLINE void MI_Session_ModifyInstance(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *inboundInstance, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2278   if (session && session->ft) {
   2279     session->ft->ModifyInstance(session, flags, options, namespaceName, inboundInstance, callbacks, operation);
   2280   } else {
   2281     if (operation) {
   2282       memset(operation, 0, sizeof(*operation));
   2283     }
   2284     if (callbacks && callbacks->instanceResult) {
   2285       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2286     }
   2287   }
   2288 }
   2289 
   2290 MI_INLINE void MI_Session_CreateInstance(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *inboundInstance, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2291   if (session && session->ft) {
   2292     session->ft->CreateInstance(session, flags, options, namespaceName, inboundInstance, callbacks, operation);
   2293   } else {
   2294     if (operation) {
   2295       memset(operation, 0, sizeof(*operation));
   2296     }
   2297     if (callbacks && callbacks->instanceResult) {
   2298       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2299     }
   2300   }
   2301 }
   2302 
   2303 MI_INLINE void MI_Session_DeleteInstance(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *inboundInstance, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2304   if (session && session->ft) {
   2305     session->ft->DeleteInstance(session, flags, options, namespaceName, inboundInstance, callbacks, operation);
   2306   } else {
   2307     if (operation) {
   2308       memset(operation, 0, sizeof(*operation));
   2309     }
   2310     if (callbacks && callbacks->instanceResult) {
   2311       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2312     }
   2313   }
   2314 }
   2315 
   2316 MI_INLINE void MI_Session_Invoke(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *className, const MI_Char *methodName, const MI_Instance *inboundInstance, const MI_Instance *inboundProperties, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2317   if (session && session->ft) {
   2318     session->ft->Invoke(session, flags, options, namespaceName, className, methodName, inboundInstance, inboundProperties, callbacks, operation);
   2319   } else {
   2320     if (operation) {
   2321       memset(operation, 0, sizeof(*operation));
   2322     }
   2323     if (callbacks && callbacks->instanceResult) {
   2324       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2325     }
   2326   }
   2327 }
   2328 
   2329 MI_INLINE void MI_Session_EnumerateInstances(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *className, MI_Boolean keysOnly, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2330   if (session && session->ft) {
   2331     session->ft->EnumerateInstances(session, flags, options, namespaceName, className, keysOnly, callbacks, operation);
   2332   } else {
   2333     if (operation) {
   2334       memset(operation, 0, sizeof(*operation));
   2335     }
   2336     if (callbacks && callbacks->instanceResult) {
   2337       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2338     }
   2339   }
   2340 }
   2341 
   2342 MI_INLINE void MI_Session_QueryInstances(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *queryDialect, const MI_Char *queryExpression, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2343   if (session && session->ft) {
   2344     session->ft->QueryInstances(session, flags, options, namespaceName, queryDialect, queryExpression, callbacks, operation);
   2345   } else {
   2346     if (operation) {
   2347       memset(operation, 0, sizeof(*operation));
   2348     }
   2349     if (callbacks && callbacks->instanceResult) {
   2350       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2351     }
   2352   }
   2353 }
   2354 
   2355 MI_INLINE void MI_Session_AssociatorInstances(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *instanceKey, const MI_Char *assocClass, const MI_Char *resultClass, const MI_Char *role, const MI_Char *resultRole, MI_Boolean keysOnly, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2356   if (session && session->ft) {
   2357     session->ft->AssociatorInstances(session, flags, options, namespaceName, instanceKey, assocClass, resultClass, role, resultRole, keysOnly, callbacks, operation);
   2358   } else {
   2359     if (operation) {
   2360       memset(operation, 0, sizeof(*operation));
   2361     }
   2362     if (callbacks && callbacks->instanceResult) {
   2363       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2364     }
   2365   }
   2366 }
   2367 
   2368 MI_INLINE void MI_Session_ReferenceInstances(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Instance *instanceKey, const MI_Char *resultClass, const MI_Char *role, MI_Boolean keysOnly, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2369   if (session && session->ft) {
   2370     session->ft->ReferenceInstances(session, flags, options, namespaceName, instanceKey, resultClass, role, keysOnly, callbacks, operation);
   2371   } else {
   2372     if (operation) {
   2373       memset(operation, 0, sizeof(*operation));
   2374     }
   2375     if (callbacks && callbacks->instanceResult) {
   2376       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2377     }
   2378   }
   2379 }
   2380 
   2381 MI_INLINE void MI_Session_Subscribe(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *queryDialect, const MI_Char *queryExpression, const MI_SubscriptionDeliveryOptions *deliverOptions, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2382   if (session && session->ft) {
   2383     session->ft->Subscribe(session, flags, options, namespaceName, queryDialect, queryExpression, deliverOptions, callbacks, operation);
   2384   } else {
   2385     if (operation) {
   2386       memset(operation, 0, sizeof(*operation));
   2387     }
   2388     if (callbacks && callbacks->indicationResult) {
   2389       callbacks->indicationResult(NULL, callbacks->callbackContext, NULL, NULL, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2390     }
   2391   }
   2392 }
   2393 
   2394 MI_INLINE void MI_Session_GetClass(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *className, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2395   if (session && session->ft) {
   2396     session->ft->GetClass(session, flags, options, namespaceName, className, callbacks, operation);
   2397   } else {
   2398     if (operation) {
   2399       memset(operation, 0, sizeof(*operation));
   2400     }
   2401     if (callbacks && callbacks->classResult) {
   2402       callbacks->classResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2403     }
   2404   }
   2405 }
   2406 
   2407 MI_INLINE void MI_Session_EnumerateClasses(MI_Session *session, MI_Uint32 flags, MI_OperationOptions *options, const MI_Char *namespaceName, const MI_Char *className, MI_Boolean classNamesOnly, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2408   if (session && session->ft) {
   2409     session->ft->EnumerateClasses(session, flags, options, namespaceName, className, classNamesOnly, callbacks, operation);
   2410   } else {
   2411     if (operation) {
   2412       memset(operation, 0, sizeof(*operation));
   2413     }
   2414     if (callbacks && callbacks->classResult) {
   2415       callbacks->classResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2416     }
   2417   }
   2418 }
   2419 
   2420 MI_INLINE void MI_Session_TestConnection(MI_Session *session, MI_Uint32 flags, MI_OperationCallbacks *callbacks, MI_Operation *operation) {
   2421   if (session && session->ft) {
   2422     session->ft->TestConnection(session, flags, callbacks, operation);
   2423   } else {
   2424     if (operation) {
   2425       memset(operation, 0, sizeof(*operation));
   2426     }
   2427     if (callbacks && callbacks->instanceResult) {
   2428       callbacks->instanceResult(NULL, callbacks->callbackContext, NULL, MI_FALSE, MI_RESULT_INVALID_PARAMETER, NULL, NULL, NULL);
   2429     }
   2430   }
   2431 }
   2432 
   2433 MI_INLINE MI_Result MI_Operation_GetInstance(MI_Operation *operation, const MI_Instance **instance, MI_Boolean *moreResults, MI_Result *result, const MI_Char **errorMessage, const MI_Instance **completionDetails) {
   2434   if (operation && operation->ft) {
   2435     return operation->ft->GetInstance(operation, instance, moreResults, result, errorMessage, completionDetails);
   2436   }
   2437   if (result)
   2438     *result = MI_RESULT_INVALID_PARAMETER;
   2439   if (moreResults)
   2440     *moreResults = MI_FALSE;
   2441   return MI_RESULT_INVALID_PARAMETER;
   2442 }
   2443 
   2444 MI_INLINE MI_Result MI_Operation_GetIndication(MI_Operation *operation, const MI_Instance **instance, const MI_Char **bookmark, const MI_Char **machineID, MI_Boolean *moreResults, MI_Result *result, const MI_Char **errorMessage, const MI_Instance **completionDetails) {
   2445   if (operation && operation->ft) {
   2446     return operation->ft->GetIndication(operation, instance, bookmark, machineID, moreResults, result, errorMessage, completionDetails);
   2447   }
   2448   if (result)
   2449     *result = MI_RESULT_INVALID_PARAMETER;
   2450   if (moreResults)
   2451     *moreResults = MI_FALSE;
   2452   return  MI_RESULT_INVALID_PARAMETER;
   2453 }
   2454 
   2455 MI_INLINE MI_Result MI_Operation_GetClass(MI_Operation *operation, const MI_Class **classResult, MI_Boolean *moreResults, MI_Result *result, const MI_Char **errorMessage, const MI_Instance **completionDetails) {
   2456   if (operation && operation->ft) {
   2457     return operation->ft->GetClass(operation, classResult, moreResults, result, errorMessage, completionDetails);
   2458   }
   2459   if (result)
   2460     *result = MI_RESULT_INVALID_PARAMETER;
   2461   if (moreResults)
   2462     *moreResults = MI_FALSE;
   2463   return MI_RESULT_INVALID_PARAMETER;
   2464 }
   2465 
   2466 MI_INLINE MI_Result MI_Operation_Close(MI_Operation *operation) {
   2467   if (operation && operation->ft) {
   2468     return operation->ft->Close(operation);
   2469   }
   2470   return MI_RESULT_INVALID_PARAMETER;
   2471 }
   2472 
   2473 MI_INLINE MI_Result MI_Operation_Cancel(MI_Operation *operation, MI_CancellationReason reason) {
   2474   if (operation && operation->ft) {
   2475     return operation->ft->Cancel(operation, reason);
   2476   }
   2477   return MI_RESULT_INVALID_PARAMETER;
   2478 }
   2479 
   2480 MI_INLINE MI_Result MI_Operation_GetSession(MI_Operation *operation, MI_Session *session) {
   2481   if (session) {
   2482     memset(session, 0, sizeof(MI_Session));
   2483   }
   2484   if (operation && operation->ft) {
   2485     return operation->ft->GetSession(operation, session);
   2486   }
   2487   return MI_RESULT_INVALID_PARAMETER;
   2488 }
   2489 
   2490 MI_INLINE void MI_DestinationOptions_Delete(MI_DestinationOptions *options) {
   2491   if (options && options->ft) {
   2492     options->ft->Delete(options);
   2493   }
   2494 }
   2495 
   2496 MI_INLINE MI_Result MI_DestinationOptions_SetTimeout(MI_DestinationOptions *options, const MI_Interval *timeout) {
   2497   if (options && options->ft) {
   2498     return options->ft->SetInterval(options, MI_T("__MI_DESTINATIONOPTIONS_TIMEOUT"), timeout, 0);
   2499   } else {
   2500     return MI_RESULT_INVALID_PARAMETER;
   2501   }
   2502 }
   2503 
   2504 MI_INLINE MI_Result MI_DestinationOptions_GetTimeout(MI_DestinationOptions *options, MI_Interval *timeout) {
   2505   if (options && options->ft) {
   2506     return options->ft->GetInterval(options, MI_T("__MI_DESTINATIONOPTIONS_TIMEOUT"), timeout, 0, 0);
   2507   } else {
   2508     return MI_RESULT_INVALID_PARAMETER;
   2509   }
   2510 }
   2511 
   2512 MI_INLINE MI_Result MI_DestinationOptions_SetCertCACheck(MI_DestinationOptions *options, MI_Boolean check) {
   2513   if (options && options->ft) {
   2514     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_CERT_CA_CHECK"), check, 0);
   2515   } else {
   2516     return MI_RESULT_INVALID_PARAMETER;
   2517   }
   2518 }
   2519 
   2520 MI_INLINE MI_Result MI_DestinationOptions_GetCertCACheck(MI_DestinationOptions *options, MI_Boolean *check) {
   2521   if (options && options->ft) {
   2522     MI_Uint32 value;
   2523     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_CERT_CA_CHECK"), &value, 0, 0);
   2524     if (result == MI_RESULT_OK)
   2525       *check = (MI_Boolean) value;
   2526     return result;
   2527   } else {
   2528     return MI_RESULT_INVALID_PARAMETER;
   2529   }
   2530 }
   2531 
   2532 MI_INLINE MI_Result MI_DestinationOptions_SetCertCNCheck(MI_DestinationOptions *options, MI_Boolean check) {
   2533   if (options && options->ft) {
   2534     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_CERT_CN_CHECK"), check, 0);
   2535   } else {
   2536     return MI_RESULT_INVALID_PARAMETER;
   2537   }
   2538 }
   2539 
   2540 MI_INLINE MI_Result MI_DestinationOptions_GetCertCNCheck(MI_DestinationOptions *options, MI_Boolean *check) {
   2541   if (options && options->ft) {
   2542     MI_Uint32 value;
   2543     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_CERT_CN_CHECK"), &value, 0, 0);
   2544     if (result == MI_RESULT_OK)
   2545       *check = (MI_Boolean) value;
   2546     return result;
   2547   } else {
   2548     return MI_RESULT_INVALID_PARAMETER;
   2549   }
   2550 }
   2551 
   2552 MI_INLINE MI_Result MI_DestinationOptions_SetCertRevocationCheck(MI_DestinationOptions *options, MI_Boolean check) {
   2553   if (options && options->ft) {
   2554     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_CERT_REVOCATION_CHECK"), check, 0);
   2555   } else {
   2556     return MI_RESULT_INVALID_PARAMETER;
   2557   }
   2558 }
   2559 
   2560 MI_INLINE MI_Result MI_DestinationOptions_GetCertRevocationCheck(MI_DestinationOptions *options, MI_Boolean *check) {
   2561   if (options && options->ft) {
   2562     MI_Uint32 value;
   2563     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_CERT_REVOCATION_CHECK"), &value, 0, 0);
   2564     if (result == MI_RESULT_OK)
   2565       *check = (MI_Boolean) value;
   2566     return result;
   2567   } else {
   2568     return MI_RESULT_INVALID_PARAMETER;
   2569   }
   2570 }
   2571 
   2572 MI_INLINE MI_Result MI_DestinationOptions_SetPacketPrivacy(MI_DestinationOptions *options, MI_Boolean privacy) {
   2573   if (options && options->ft) {
   2574     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_PACKET_PRIVACY"), privacy, 0);
   2575   } else {
   2576     return MI_RESULT_INVALID_PARAMETER;
   2577   }
   2578 }
   2579 
   2580 MI_INLINE MI_Result MI_DestinationOptions_GetPacketPrivacy(MI_DestinationOptions *options, MI_Boolean *privacy) {
   2581   if (options && options->ft) {
   2582     MI_Uint32 value;
   2583     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_PACKET_PRIVACY"), &value, 0, 0);
   2584     if (result == MI_RESULT_OK)
   2585       *privacy = (MI_Boolean) value;
   2586     return result;
   2587   } else {
   2588     return MI_RESULT_INVALID_PARAMETER;
   2589   }
   2590 }
   2591 
   2592 MI_INLINE MI_Result MI_DestinationOptions_SetPacketIntegrity(MI_DestinationOptions *options, MI_Boolean integrity) {
   2593   if (options && options->ft) {
   2594     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_PACKET_INTEGRITY"), integrity, 0);
   2595   } else {
   2596     return MI_RESULT_INVALID_PARAMETER;
   2597   }
   2598 }
   2599 
   2600 MI_INLINE MI_Result MI_DestinationOptions_GetPacketIntegrity(MI_DestinationOptions *options, MI_Boolean *integrity) {
   2601   if (options && options->ft) {
   2602     MI_Uint32 value;
   2603     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_PACKET_INTEGRITY"), &value, 0, 0);
   2604     if (result == MI_RESULT_OK)
   2605       *integrity = (MI_Boolean) value;
   2606     return result;
   2607   } else {
   2608     return MI_RESULT_INVALID_PARAMETER;
   2609   }
   2610 }
   2611 
   2612 #define MI_DESTINATIONOPTIONS_PACKET_ENCODING_DEFAULT MI_T("default")
   2613 #define MI_DESTINATIONOPTIONS_PACKET_ENCODING_UTF8 MI_T("UTF8")
   2614 #define MI_DESTINATIONOPTIONS_PACKET_ENCODING_UTF16 MI_T("UTF16")
   2615 
   2616 MI_INLINE MI_Result MI_DestinationOptions_SetPacketEncoding(MI_DestinationOptions *options, const MI_Char *encoding) {
   2617   if (options && options->ft) {
   2618     return options->ft->SetString(options, MI_T("__MI_DESTINATIONOPTIONS_PACKET_ENCODING"), encoding, 0);
   2619   } else {
   2620     return MI_RESULT_INVALID_PARAMETER;
   2621   }
   2622 }
   2623 
   2624 MI_INLINE MI_Result MI_DestinationOptions_GetPacketEncoding(MI_DestinationOptions *options, const MI_Char **encoding) {
   2625   if (options && options->ft) {
   2626     return options->ft->GetString(options, MI_T("__MI_DESTINATIONOPTIONS_PACKET_ENCODING"), encoding, 0, 0);
   2627   } else {
   2628     return MI_RESULT_INVALID_PARAMETER;
   2629   }
   2630 }
   2631 
   2632 MI_INLINE MI_Result MI_DestinationOptions_SetDataLocale(MI_DestinationOptions *options, const MI_Char *locale) {
   2633   if (options && options->ft) {
   2634     return options->ft->SetString(options, MI_T("__MI_DESTINATIONOPTIONS_DATA_LOCALE"), locale, 0);
   2635   } else {
   2636     return MI_RESULT_INVALID_PARAMETER;
   2637   }
   2638 }
   2639 
   2640 MI_INLINE MI_Result MI_DestinationOptions_GetDataLocale(MI_DestinationOptions *options, const MI_Char **locale) {
   2641   if (options && options->ft) {
   2642     return options->ft->GetString(options, MI_T("__MI_DESTINATIONOPTIONS_DATA_LOCALE"), locale, 0, 0);
   2643   } else {
   2644     return MI_RESULT_INVALID_PARAMETER;
   2645   }
   2646 }
   2647 
   2648 MI_INLINE MI_Result MI_DestinationOptions_SetUILocale(MI_DestinationOptions *options, const MI_Char *locale) {
   2649   if (options && options->ft) {
   2650     return options->ft->SetString(options, MI_T("__MI_DESTINATIONOPTIONS_UI_LOCALE"), locale, 0);
   2651   } else {
   2652     return MI_RESULT_INVALID_PARAMETER;
   2653   }
   2654 }
   2655 
   2656 MI_INLINE MI_Result MI_DestinationOptions_GetUILocale(MI_DestinationOptions *options, const MI_Char **locale) {
   2657   if (options && options->ft) {
   2658     return options->ft->GetString(options, MI_T("__MI_DESTINATIONOPTIONS_UI_LOCALE"), locale, 0, 0);
   2659   } else {
   2660     return MI_RESULT_INVALID_PARAMETER;
   2661   }
   2662 }
   2663 
   2664 MI_INLINE MI_Result MI_DestinationOptions_SetMaxEnvelopeSize(MI_DestinationOptions *options, MI_Uint32 sizeInKB) {
   2665   if (options && options->ft) {
   2666     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_MAX_ENVELOPE_SIZE"), sizeInKB, 0);
   2667   } else {
   2668     return MI_RESULT_INVALID_PARAMETER;
   2669   }
   2670 }
   2671 
   2672 MI_INLINE MI_Result MI_DestinationOptions_GetMaxEnvelopeSize(MI_DestinationOptions *options, MI_Uint32 *sizeInKB) {
   2673   if (options && options->ft) {
   2674     return options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_MAX_ENVELOPE_SIZE"), sizeInKB, 0, 0);
   2675   } else {
   2676     return MI_RESULT_INVALID_PARAMETER;
   2677   }
   2678 }
   2679 
   2680 MI_INLINE MI_Result MI_DestinationOptions_SetEncodePortInSPN(MI_DestinationOptions *options, MI_Boolean encodePort) {
   2681   if (options && options->ft) {
   2682     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_ENCODE_PORT_IN_SPN"), encodePort, 0);
   2683   } else {
   2684     return MI_RESULT_INVALID_PARAMETER;
   2685   }
   2686 }
   2687 
   2688 MI_INLINE MI_Result MI_DestinationOptions_GetEncodePortInSPN(MI_DestinationOptions *options, MI_Boolean *encodePort) {
   2689   if (options && options->ft) {
   2690     MI_Uint32 value;
   2691     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_ENCODE_PORT_IN_SPN"), &value, 0, 0);
   2692     if (result == MI_RESULT_OK)
   2693       *encodePort = (MI_Boolean) value;
   2694     return result;
   2695   } else {
   2696     return MI_RESULT_INVALID_PARAMETER;
   2697   }
   2698 }
   2699 
   2700 MI_INLINE MI_Result MI_DestinationOptions_SetHttpUrlPrefix(MI_DestinationOptions *options, const MI_Char *prefix) {
   2701   if (options && options->ft) {
   2702     return options->ft->SetString(options, MI_T("__MI_DESTINATIONOPTIONS_HTTP_URL_PREFIX"), prefix, 0);
   2703   } else {
   2704     return MI_RESULT_INVALID_PARAMETER;
   2705   }
   2706 }
   2707 
   2708 MI_INLINE MI_Result MI_DestinationOptions_GetHttpUrlPrefix(MI_DestinationOptions *options, const MI_Char **prefix) {
   2709   if (options && options->ft) {
   2710     return options->ft->GetString(options, MI_T("__MI_DESTINATIONOPTIONS_HTTP_URL_PREFIX"), prefix, 0, 0);
   2711   } else {
   2712     return MI_RESULT_INVALID_PARAMETER;
   2713   }
   2714 }
   2715 
   2716 MI_INLINE MI_Result MI_DestinationOptions_SetDestinationPort(MI_DestinationOptions *options, MI_Uint32 port) {
   2717   if (options && options->ft) {
   2718     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_DESTINATION_PORT"), port, 0);
   2719   } else {
   2720     return MI_RESULT_INVALID_PARAMETER;
   2721   }
   2722 }
   2723 
   2724 MI_INLINE MI_Result MI_DestinationOptions_GetDestinationPort(MI_DestinationOptions *options, MI_Uint32 *port) {
   2725   if (options && options->ft) {
   2726     return options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_DESTINATION_PORT"), port, 0, 0);
   2727   } else {
   2728     return MI_RESULT_INVALID_PARAMETER;
   2729   }
   2730 }
   2731 
   2732 #define MI_DESTINATIONOPTIONS_TRANSPORT_HTTP MI_T("HTTP")
   2733 #define MI_DESTINATIONOPTIONS_TRANPSORT_HTTPS MI_T("HTTPS")
   2734 
   2735 MI_INLINE MI_Result MI_DestinationOptions_SetTransport(MI_DestinationOptions *options, const MI_Char *transport) {
   2736   if (options && options->ft) {
   2737     return options->ft->SetString(options, MI_T("__MI_DESTINATIONOPTIONS_TRANSPORT"), transport, 0);
   2738   } else {
   2739     return MI_RESULT_INVALID_PARAMETER;
   2740   }
   2741 }
   2742 
   2743 MI_INLINE MI_Result MI_DestinationOptions_GetTransport(MI_DestinationOptions *options, const MI_Char **transport) {
   2744   if (options && options->ft) {
   2745     return options->ft->GetString(options, MI_T("__MI_DESTINATIONOPTIONS_TRANSPORT"), transport, 0, 0);
   2746   } else {
   2747     return MI_RESULT_INVALID_PARAMETER;
   2748   }
   2749 }
   2750 
   2751 #define MI_DESTINATIONOPTIONS_PROXY_TYPE_IE MI_T("IE")
   2752 #define MI_DESTINATIONOPTIONS_PROXY_TYPE_WINHTTP MI_T("WinHTTP")
   2753 #define MI_DESTINATIONOPTIONS_PROXY_TYPE_AUTO MI_T("Auto")
   2754 #define MI_DESTINATIONOPTIONS_PROXY_TYPE_NONE MI_T("None")
   2755 
   2756 MI_INLINE MI_Result MI_DestinationOptions_SetProxyType(MI_DestinationOptions *options, const MI_Char *proxyType) {
   2757   if (options && options->ft) {
   2758     return options->ft->SetString(options, MI_T("__MI_DESTINATIONOPTIONS_PROXY_TYPE"), proxyType, 0);
   2759   } else {
   2760     return MI_RESULT_INVALID_PARAMETER;
   2761   }
   2762 }
   2763 
   2764 MI_INLINE MI_Result MI_DestinationOptions_GetProxyType(MI_DestinationOptions *options, const MI_Char **proxyType) {
   2765   if (options && options->ft) {
   2766     return options->ft->GetString(options, MI_T("__MI_DESTINATIONOPTIONS_PROXY_TYPE"), proxyType, 0, 0);
   2767   } else {
   2768     return MI_RESULT_INVALID_PARAMETER;
   2769   }
   2770 }
   2771 
   2772 MI_INLINE MI_Result MI_DestinationOptions_AddProxyCredentials(MI_DestinationOptions *options, const MI_UserCredentials *credentials) {
   2773   if (options && options->ft) {
   2774     return options->ft->AddCredentials(options, MI_T("__MI_DESTINATIONOPTIONS_PROXY_CREDENTIALS"), credentials, 0);
   2775   } else {
   2776     return MI_RESULT_INVALID_PARAMETER;
   2777   }
   2778 }
   2779 
   2780 MI_INLINE MI_Result MI_DestinationOptions_AddDestinationCredentials(MI_DestinationOptions *options, const MI_UserCredentials *credentials) {
   2781   if (options && options->ft) {
   2782     return options->ft->AddCredentials(options, MI_T("__MI_DESTINATIONOPTIONS_DESTINATION_CREDENTIALS"), credentials, 0);
   2783   } else {
   2784     return MI_RESULT_INVALID_PARAMETER;
   2785   }
   2786 }
   2787 
   2788 typedef enum _MI_DestinationOptions_ImpersonationType {
   2789   MI_DestinationOptions_ImpersonationType_Default = 0,
   2790   MI_DestinationOptions_ImpersonationType_None = 1,
   2791   MI_DestinationOptions_ImpersonationType_Identify = 2,
   2792   MI_DestinationOptions_ImpersonationType_Impersonate = 3,
   2793   MI_DestinationOptions_ImpersonationType_Delegate = 4
   2794 } MI_DestinationOptions_ImpersonationType;
   2795 
   2796 MI_INLINE MI_Result MI_DestinationOptions_SetImpersonationType(MI_DestinationOptions *options, MI_DestinationOptions_ImpersonationType impersonationType) {
   2797   if (options && options->ft) {
   2798     return options->ft->SetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_IMPERSONATION_TYPE"), impersonationType, 0);
   2799   } else {
   2800     return MI_RESULT_INVALID_PARAMETER;
   2801   }
   2802 }
   2803 
   2804 MI_INLINE MI_Result MI_DestinationOptions_GetImpersonationType(MI_DestinationOptions *options, MI_DestinationOptions_ImpersonationType * impersonationType) {
   2805   if (options && options->ft) {
   2806     MI_Uint32 value;
   2807     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_DESTINATIONOPTIONS_IMPERSONATION_TYPE"), &value, 0, 0);
   2808     if (result == MI_RESULT_OK)
   2809       *impersonationType = (MI_DestinationOptions_ImpersonationType) value;
   2810     return result;
   2811   } else {
   2812     return MI_RESULT_INVALID_PARAMETER;
   2813   }
   2814 }
   2815 
   2816 MI_INLINE MI_Result MI_DestinationOptions_SetString(MI_DestinationOptions *options, const MI_Char *optionName, const MI_Char *optionValue) {
   2817   if (options && options->ft) {
   2818     return options->ft->SetString(options, optionName, optionValue, 0);
   2819   } else {
   2820     return MI_RESULT_INVALID_PARAMETER;
   2821   }
   2822 }
   2823 
   2824 MI_INLINE MI_Result MI_DestinationOptions_GetString(MI_DestinationOptions *options, const MI_Char *optionName, const MI_Char **optionValue, MI_Uint32 *index) {
   2825   if (options && options->ft) {
   2826     return options->ft->GetString(options, optionName, optionValue, index, 0);
   2827   } else {
   2828     return MI_RESULT_INVALID_PARAMETER;
   2829   }
   2830 }
   2831 
   2832 MI_INLINE MI_Result MI_DestinationOptions_SetNumber(MI_DestinationOptions *options, const MI_Char *optionName, MI_Uint32 optionValue) {
   2833   if (options && options->ft) {
   2834     return options->ft->SetNumber(options, optionName, optionValue, 0);
   2835   } else {
   2836     return MI_RESULT_INVALID_PARAMETER;
   2837   }
   2838 }
   2839 
   2840 MI_INLINE MI_Result MI_DestinationOptions_GetNumber(MI_DestinationOptions *options, const MI_Char *optionName, MI_Uint32 *optionValue, MI_Uint32 *index) {
   2841   if (options && options->ft) {
   2842     return options->ft->GetNumber(options, optionName, optionValue, index, 0);
   2843   } else {
   2844     return MI_RESULT_INVALID_PARAMETER;
   2845   }
   2846 }
   2847 
   2848 MI_INLINE MI_Result MI_DestinationOptions_GetOptionCount(MI_DestinationOptions *options, MI_Uint32 *count) {
   2849   if (options && options->ft) {
   2850     return options->ft->GetOptionCount(options, count);
   2851   } else {
   2852     return MI_RESULT_INVALID_PARAMETER;
   2853   }
   2854 }
   2855 
   2856 MI_INLINE MI_Result MI_DestinationOptions_GetOptionAt(MI_DestinationOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_Value *value, MI_Type *type, MI_Uint32 *flags) {
   2857   if (options && options->ft) {
   2858     return options->ft->GetOptionAt(options, index, optionName, value, type, flags);
   2859   } else {
   2860     return MI_RESULT_INVALID_PARAMETER;
   2861   }
   2862 }
   2863 
   2864 MI_INLINE MI_Result MI_DestinationOptions_GetOption(MI_DestinationOptions *options, const MI_Char *optionName, MI_Value *value, MI_Type *type, MI_Uint32 *index, MI_Uint32 *flags) {
   2865   if (options && options->ft) {
   2866     return options->ft->GetOption(options, optionName, value, type, index, flags);
   2867   } else {
   2868     return MI_RESULT_INVALID_PARAMETER;
   2869   }
   2870 }
   2871 
   2872 MI_INLINE MI_Result MI_DestinationOptions_GetCredentialsCount(MI_DestinationOptions *options, MI_Uint32 *count) {
   2873   if (options && options->ft) {
   2874     return options->ft->GetCredentialsCount(options, count);
   2875   } else {
   2876     return MI_RESULT_INVALID_PARAMETER;
   2877   }
   2878 }
   2879 
   2880 MI_INLINE MI_Result MI_DestinationOptions_GetCredentialsAt(MI_DestinationOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_UserCredentials *credentials, MI_Uint32 *flags) {
   2881   if (options && options->ft) {
   2882     return options->ft->GetCredentialsAt(options, index, optionName, credentials, flags);
   2883   } else {
   2884     return MI_RESULT_INVALID_PARAMETER;
   2885   }
   2886 }
   2887 
   2888 MI_INLINE MI_Result MI_DestinationOptions_GetCredentialsPasswordAt(MI_DestinationOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_Char *password, MI_Uint32 bufferLength, MI_Uint32 *passwordLength, MI_Uint32 *flags) {
   2889   if (options && options->ft) {
   2890     return options->ft->GetCredentialsPasswordAt(options, index, optionName, password, bufferLength, passwordLength, flags);
   2891   } else {
   2892     return MI_RESULT_INVALID_PARAMETER;
   2893   }
   2894 }
   2895 
   2896 MI_INLINE MI_Result MI_INLINE_CALL MI_DestinationOptions_Clone(const MI_DestinationOptions* self, MI_DestinationOptions* newDestinationOptions) {
   2897   if (self && self->ft) {
   2898     return self->ft->Clone(self, newDestinationOptions);
   2899   } else {
   2900     return MI_RESULT_INVALID_PARAMETER;
   2901   }
   2902 }
   2903 
   2904 MI_INLINE void MI_OperationOptions_Delete(MI_OperationOptions *options) {
   2905   if (options && options->ft) {
   2906     options->ft->Delete(options);
   2907   }
   2908 }
   2909 
   2910 MI_INLINE MI_Result MI_OperationOptions_SetWriteErrorMode(MI_OperationOptions *options, MI_CallbackMode mode) {
   2911   if (options && options->ft) {
   2912     return options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_WRITEERRORMODE"), mode, 0);
   2913   } else {
   2914     return MI_RESULT_INVALID_PARAMETER;
   2915   }
   2916 }
   2917 
   2918 MI_INLINE MI_Result MI_OperationOptions_GetWriteErrorMode(MI_OperationOptions *options, MI_CallbackMode *mode) {
   2919   if (options && options->ft) {
   2920     MI_Uint32 value;
   2921     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_OPERATIONOPTIONS_WRITEERRORMODE"), &value, 0, 0);
   2922     if (result == MI_RESULT_OK)
   2923       *mode = (MI_CallbackMode) value;
   2924     return result;
   2925   } else {
   2926     return MI_RESULT_INVALID_PARAMETER;
   2927   }
   2928 }
   2929 
   2930 MI_INLINE MI_Result MI_OperationOptions_SetPromptUserMode(MI_OperationOptions *options, MI_CallbackMode mode) {
   2931   if (options && options->ft) {
   2932     return options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_PROMPTUSERMODE"), mode, 0);
   2933   } else {
   2934     return MI_RESULT_INVALID_PARAMETER;
   2935   }
   2936 }
   2937 
   2938 MI_INLINE MI_Result MI_OperationOptions_GetPromptUserMode(MI_OperationOptions *options, MI_CallbackMode *mode) {
   2939   if (options && options->ft) {
   2940     MI_Uint32 value;
   2941     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_OPERATIONOPTIONS_PROMPTUSERMODE"), &value, 0, 0);
   2942     if (result == MI_RESULT_OK)
   2943       *mode = (MI_CallbackMode) value;
   2944     return result;
   2945   } else {
   2946     return MI_RESULT_INVALID_PARAMETER;
   2947   }
   2948 }
   2949 
   2950 MI_INLINE MI_Result MI_OperationOptions_SetPromptUserRegularMode(MI_OperationOptions *options, MI_CallbackMode mode, MI_Boolean ackValue) {
   2951   if (options && options->ft) {
   2952     MI_Result result = options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_PROMPTUSERMODE"), mode, 0);
   2953     if( result == MI_RESULT_OK)
   2954       return options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_PROMPTUSERMODEREGULAR_ACKVALUE"), ackValue, 0);
   2955     else
   2956       return result;
   2957   } else {
   2958     return MI_RESULT_INVALID_PARAMETER;
   2959   }
   2960 }
   2961 
   2962 MI_INLINE MI_Result MI_OperationOptions_GetPromptUserRegularMode(MI_OperationOptions *options, MI_CallbackMode *mode, MI_Boolean *ackValue) {
   2963   if (options && options->ft) {
   2964     MI_Uint32 _mode;
   2965     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_OPERATIONOPTIONS_PROMPTUSERMODE"), &_mode, 0, 0);
   2966     if( result == MI_RESULT_OK) {
   2967       MI_Uint32 _ackValue;
   2968       result = options->ft->GetNumber(options, MI_T("__MI_OPERATIONOPTIONS_PROMPTUSERMODEREGULAR_ACKVALUE"), &_ackValue, 0, 0);
   2969       if( result == MI_RESULT_OK) {
   2970         *mode = (MI_CallbackMode)_mode;
   2971         *ackValue = (MI_Boolean) _ackValue;
   2972       }
   2973     }
   2974     return result;
   2975   } else {
   2976     return MI_RESULT_INVALID_PARAMETER;
   2977   }
   2978 }
   2979 
   2980 MI_INLINE MI_Result MI_OperationOptions_SetProviderArchitecture(MI_OperationOptions *options, MI_ProviderArchitecture architecture, MI_Boolean mustComply) {
   2981   if (options && options->ft) {
   2982     MI_Result result = options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_PROVIDER_ARCHITECTURE"), architecture, 0);
   2983     if(result == MI_RESULT_OK)
   2984       return options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_REQUIRED_ARCHITECTURE"), mustComply, 0);
   2985     else
   2986       return result;
   2987   } else {
   2988     return MI_RESULT_INVALID_PARAMETER;
   2989   }
   2990 }
   2991 
   2992 MI_INLINE MI_Result MI_OperationOptions_GetProviderArchitecture(MI_OperationOptions *options, MI_ProviderArchitecture *architecture, MI_Boolean *mustComply) {
   2993   if (options && options->ft) {
   2994     MI_Uint32 _architecture;
   2995     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_OPERATIONOPTIONS_PROVIDER_ARCHITECTURE"), &_architecture, 0, 0);
   2996     if(result == MI_RESULT_OK) {
   2997       MI_Uint32 _mustComply;
   2998       result = options->ft->GetNumber(options, MI_T("__MI_OPERATIONOPTIONS_REQUIRED_ARCHITECTURE"), &_mustComply, 0, 0);
   2999       if(result == MI_RESULT_OK) {
   3000         *architecture = (MI_ProviderArchitecture)_architecture;
   3001         *mustComply = (MI_Boolean)_mustComply;
   3002       }
   3003     }
   3004     return result;
   3005   } else {
   3006     return MI_RESULT_INVALID_PARAMETER;
   3007   }
   3008 }
   3009 
   3010 MI_INLINE MI_Result MI_OperationOptions_EnableChannel(MI_OperationOptions *options, MI_Uint32 channel) {
   3011   if (options && options->ft) {
   3012     return options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_CHANNEL"), channel, 0);
   3013   } else {
   3014     return MI_RESULT_INVALID_PARAMETER;
   3015   }
   3016 }
   3017 
   3018 MI_INLINE MI_Result MI_OperationOptions_DisableChannel(MI_OperationOptions *options, MI_Uint32 channel) {
   3019   if (options && options->ft) {
   3020     return options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_CHANNEL"), channel, 1);
   3021   } else {
   3022     return MI_RESULT_INVALID_PARAMETER;
   3023   }
   3024 }
   3025 
   3026 MI_INLINE MI_Result MI_OperationOptions_GetEnabledChannels(MI_OperationOptions *options, MI_Uint32 *channels, MI_Uint32 bufferLength, MI_Uint32 *channelCount, MI_Uint32 *flags) {
   3027   if (options && options->ft) {
   3028     return options->ft->GetEnabledChannels(options, MI_T("__MI_OPERATIONOPTIONS_CHANNEL"), channels, bufferLength, channelCount, flags);
   3029   } else {
   3030     return MI_RESULT_INVALID_PARAMETER;
   3031   }
   3032 }
   3033 
   3034 MI_INLINE MI_Result MI_OperationOptions_SetTimeout(MI_OperationOptions *options, const MI_Interval *timeout) {
   3035   if (options && options->ft) {
   3036     return options->ft->SetInterval(options, MI_T("__MI_OPERATIONOPTIONS_TIMEOUT"), timeout, 0);
   3037   } else {
   3038     return MI_RESULT_INVALID_PARAMETER;
   3039   }
   3040 }
   3041 
   3042 MI_INLINE MI_Result MI_OperationOptions_GetTimeout(MI_OperationOptions *options, MI_Interval *timeout) {
   3043   if (options && options->ft) {
   3044     return options->ft->GetInterval(options, MI_T("__MI_OPERATIONOPTIONS_TIMEOUT"), timeout, 0, 0);
   3045   } else {
   3046     return MI_RESULT_INVALID_PARAMETER;
   3047   }
   3048 }
   3049 
   3050 MI_INLINE MI_Result MI_OperationOptions_SetResourceUriPrefix(MI_OperationOptions *options, const MI_Char *ruriPrefix) {
   3051   if (options && options->ft) {
   3052     return options->ft->SetString(options, MI_T("__MI_OPERATIONOPTIONS_RESOURCE_URI_PREFIX"), ruriPrefix, 0);
   3053   } else {
   3054     return MI_RESULT_INVALID_PARAMETER;
   3055   }
   3056 }
   3057 
   3058 MI_INLINE MI_Result MI_OperationOptions_GetResourceUriPrefix(MI_OperationOptions *options, const MI_Char **ruriPrefix) {
   3059   if (options && options->ft) {
   3060     return options->ft->GetString(options, MI_T("__MI_OPERATIONOPTIONS_RESOURCE_URI_PREFIX"), ruriPrefix, 0, 0);
   3061   } else {
   3062     return MI_RESULT_INVALID_PARAMETER;
   3063   }
   3064 }
   3065 
   3066 MI_INLINE MI_Result MI_OperationOptions_SetResourceUri(MI_OperationOptions *options, const MI_Char *rUri) {
   3067   if (options && options->ft) {
   3068     return options->ft->SetString(options, MI_T("__MI_OPERATIONOPTIONS_RESOURCE_URI"), rUri, 0);
   3069   } else {
   3070     return MI_RESULT_INVALID_PARAMETER;
   3071   }
   3072 }
   3073 
   3074 MI_INLINE MI_Result MI_OperationOptions_GetResourceUri(MI_OperationOptions *options, const MI_Char **rUri) {
   3075   if (options && options->ft) {
   3076     return options->ft->GetString(options, MI_T("__MI_OPERATIONOPTIONS_RESOURCE_URI"), rUri, 0, 0);
   3077   } else {
   3078     return MI_RESULT_INVALID_PARAMETER;
   3079   }
   3080 }
   3081 
   3082 MI_INLINE MI_Result MI_OperationOptions_SetUseMachineID(MI_OperationOptions *options, MI_Boolean machineID) {
   3083   if (options && options->ft) {
   3084     return options->ft->SetNumber(options, MI_T("__MI_OPERATIONOPTIONS_USE_MACHINE_ID"), machineID, 0);
   3085   } else {
   3086     return MI_RESULT_INVALID_PARAMETER;
   3087   }
   3088 }
   3089 
   3090 MI_INLINE MI_Result MI_OperationOptions_GetUseMachineID(MI_OperationOptions *options, MI_Boolean *machineID) {
   3091   if (options && options->ft) {
   3092     MI_Uint32 value;
   3093     MI_Result result = options->ft->GetNumber(options, MI_T("__MI_OPERATIONOPTIONS_USE_MACHINE_ID"), &value, 0, 0);
   3094     if (result == MI_RESULT_OK)
   3095       *machineID = (MI_Boolean) value;
   3096     return result;
   3097   } else {
   3098     return MI_RESULT_INVALID_PARAMETER;
   3099   }
   3100 }
   3101 
   3102 MI_INLINE MI_Result MI_OperationOptions_SetCustomOption(MI_OperationOptions *options, const MI_Char *optionName, MI_Type optionValueType, const MI_Value *optionValue, MI_Boolean mustComply) {
   3103   if (options && options->ft) {
   3104     return options->ft->SetCustomOption(options, optionName, optionValueType, optionValue, mustComply, 0);
   3105   } else {
   3106     return MI_RESULT_INVALID_PARAMETER;
   3107   }
   3108 }
   3109 
   3110 MI_INLINE MI_Result MI_OperationOptions_GetOptionCount(MI_OperationOptions *options, MI_Uint32 *count) {
   3111   if (options && options->ft) {
   3112     return options->ft->GetOptionCount(options, count);
   3113   } else {
   3114     return MI_RESULT_INVALID_PARAMETER;
   3115   }
   3116 }
   3117 
   3118 MI_INLINE MI_Result MI_OperationOptions_GetOptionAt(MI_OperationOptions *options, MI_Uint32 index, const MI_Char **optionName, MI_Value *value, MI_Type *type, MI_Uint32 *flags) {
   3119   if (options && options->ft) {
   3120     return options->ft->GetOptionAt(options, index, optionName, value, type, flags);
   3121   } else {
   3122     return MI_RESULT_INVALID_PARAMETER;
   3123   }
   3124 }
   3125 
   3126 MI_INLINE MI_Result MI_OperationOptions_SetString(MI_OperationOptions *options, const MI_Char *optionName, const MI_Char *value, MI_Uint32 flags) {
   3127   if (options && options->ft) {
   3128     return options->ft->SetString(options, optionName, value, flags);
   3129   } else {
   3130     return MI_RESULT_INVALID_PARAMETER;
   3131   }
   3132 }
   3133 
   3134 MI_INLINE MI_Result MI_OperationOptions_GetString(MI_OperationOptions *options, const MI_Char *optionName, const MI_Char **value, MI_Uint32 *index, MI_Uint32 *flags) {
   3135   if (options && options->ft) {
   3136     return options->ft->GetString(options, optionName, value, index, flags);
   3137   } else {
   3138     return MI_RESULT_INVALID_PARAMETER;
   3139   }
   3140 }
   3141 
   3142 MI_INLINE MI_Result MI_OperationOptions_SetNumber(MI_OperationOptions *options, const MI_Char *optionName, MI_Uint32 value, MI_Uint32 flags) {
   3143   if (options && options->ft) {
   3144     return options->ft->SetNumber(options, optionName, value, flags);
   3145   } else {
   3146     return MI_RESULT_INVALID_PARAMETER;
   3147   }
   3148 }
   3149 
   3150 MI_INLINE MI_Result MI_OperationOptions_GetNumber(MI_OperationOptions *options, const MI_Char *optionName, MI_Uint32 *value, MI_Uint32 *index, MI_Uint32 *flags) {
   3151   if (options && options->ft) {
   3152     return options->ft->GetNumber(options, optionName, value, index, flags);
   3153   } else {
   3154     return MI_RESULT_INVALID_PARAMETER;
   3155   }
   3156 }
   3157 
   3158 MI_INLINE MI_Result MI_OperationOptions_GetOption(MI_OperationOptions *options, const MI_Char *optionName, MI_Value *value, MI_Type *type, MI_Uint32 *index, MI_Uint32 *flags) {
   3159   if (options && options->ft) {
   3160     return options->ft->GetOption(options, optionName, value, type, index, flags);
   3161   } else {
   3162     return MI_RESULT_INVALID_PARAMETER;
   3163   }
   3164 }
   3165 
   3166 MI_INLINE MI_Result MI_INLINE_CALL MI_OperationOptions_Clone(const MI_OperationOptions* self, MI_OperationOptions* newOperationOptions) {
   3167   if (self && self->ft) {
   3168     return self->ft->Clone(self, newOperationOptions);
   3169   } else {
   3170     return MI_RESULT_INVALID_PARAMETER;
   3171   }
   3172 }
   3173 
   3174 MI_INLINE MI_Result MI_Class_GetClassName(const MI_Class* self, const MI_Char** className) {
   3175   if (self && self->ft) {
   3176     return self->ft->GetClassName(self, className);
   3177   } else {
   3178     return MI_RESULT_INVALID_PARAMETER;
   3179   }
   3180 }
   3181 
   3182 MI_INLINE MI_Result MI_Class_GetNameSpace(const MI_Class* self, const MI_Char** nameSpace) {
   3183   if (self && self->ft) {
   3184     return self->ft->GetNameSpace(self, nameSpace);
   3185   } else {
   3186     return MI_RESULT_INVALID_PARAMETER;
   3187   }
   3188 }
   3189 
   3190 MI_INLINE MI_Result MI_Class_GetServerName(const MI_Class* self, const MI_Char** serverName) {
   3191   if (self && self->ft) {
   3192     return self->ft->GetServerName(self, serverName);
   3193   } else {
   3194     return MI_RESULT_INVALID_PARAMETER;
   3195   }
   3196 }
   3197 
   3198 MI_INLINE MI_Result MI_Class_GetElementCount(const MI_Class* self, MI_Uint32* count) {
   3199   if (self && self->ft) {
   3200     return self->ft->GetElementCount(self, count);
   3201   } else {
   3202     return MI_RESULT_INVALID_PARAMETER;
   3203   }
   3204 }
   3205 
   3206 MI_INLINE MI_Result MI_Class_GetElement(const MI_Class* self, const MI_Char* name, MI_Value* value, MI_Boolean* valueExists, MI_Type* type, MI_Char **referenceClass, MI_QualifierSet *qualifierSet, MI_Uint32* flags, MI_Uint32* index) {
   3207   if (self && self->ft) {
   3208     return self->ft->GetElement(self, name, value, valueExists, type, referenceClass, qualifierSet, flags, index);
   3209   } else {
   3210     return MI_RESULT_INVALID_PARAMETER;
   3211   }
   3212 }
   3213 
   3214 MI_INLINE MI_Result MI_Class_GetElementAt(const MI_Class* self, MI_Uint32 index, const MI_Char** name, MI_Value* value, MI_Boolean* valueExists, MI_Type* type, MI_Char **referenceClass, MI_QualifierSet *qualifierSet, MI_Uint32* flags) {
   3215   if (self && self->ft) {
   3216     return self->ft->GetElementAt(self, index, name, value, valueExists, type, referenceClass, qualifierSet, flags);
   3217   } else {
   3218     return MI_RESULT_INVALID_PARAMETER;
   3219   }
   3220 }
   3221 
   3222 MI_INLINE MI_Result MI_Class_GetClassQualifierSet(const MI_Class* self, MI_QualifierSet *qualifierSet) {
   3223   if (self && self->ft) {
   3224     return self->ft->GetClassQualifierSet(self, qualifierSet);
   3225   } else {
   3226     return MI_RESULT_INVALID_PARAMETER;
   3227   }
   3228 }
   3229 
   3230 MI_INLINE MI_Result MI_Class_GetMethodCount(const MI_Class* self, MI_Uint32* count) {
   3231   if (self && self->ft) {
   3232     return self->ft->GetMethodCount(self, count);
   3233   } else {
   3234     return MI_RESULT_INVALID_PARAMETER;
   3235   }
   3236 }
   3237 
   3238 MI_INLINE MI_Result MI_Class_GetMethodAt(const MI_Class *self, MI_Uint32 index, const MI_Char **name, MI_QualifierSet *qualifierSet, MI_ParameterSet *parameterSet) {
   3239   if (self && self->ft) {
   3240     return self->ft->GetMethodAt(self, index, name, qualifierSet, parameterSet);
   3241   } else {
   3242     return MI_RESULT_INVALID_PARAMETER;
   3243   }
   3244 }
   3245 
   3246 MI_INLINE MI_Result MI_Class_GetMethod(const MI_Class *self, const MI_Char *name, MI_QualifierSet *qualifierSet, MI_ParameterSet *parameterSet, MI_Uint32 *index) {
   3247   if (self && self->ft) {
   3248     return self->ft->GetMethod(self, name, qualifierSet, parameterSet, index);
   3249   } else {
   3250     return MI_RESULT_INVALID_PARAMETER;
   3251   }
   3252 }
   3253 
   3254 MI_INLINE MI_Result MI_Class_GetParentClassName(const MI_Class *self, const MI_Char **name) {
   3255   if (self && self->ft) {
   3256     return self->ft->GetParentClassName(self, name);
   3257   } else {
   3258     return MI_RESULT_INVALID_PARAMETER;
   3259   }
   3260 }
   3261 
   3262 MI_INLINE MI_Result MI_Class_GetParentClass(const MI_Class *self, MI_Class **parentClass) {
   3263   if (self && self->ft) {
   3264     return self->ft->GetParentClass(self, parentClass);
   3265   } else {
   3266     return MI_RESULT_INVALID_PARAMETER;
   3267   }
   3268 }
   3269 
   3270 MI_INLINE MI_Result MI_Class_Delete(MI_Class* self) {
   3271   if (self && self->ft) {
   3272     return self->ft->Delete(self);
   3273   } else {
   3274     return MI_RESULT_INVALID_PARAMETER;
   3275   }
   3276 }
   3277 
   3278 MI_INLINE MI_Result MI_INLINE_CALL MI_Class_Clone(const MI_Class* self, MI_Class** newClass) {
   3279   if (self && self->ft) {
   3280     return self->ft->Clone(self, newClass);
   3281   } else {
   3282     return MI_RESULT_INVALID_PARAMETER;
   3283   }
   3284 }
   3285 
   3286 MI_INLINE MI_Result MI_ParameterSet_GetMethodReturnType(const MI_ParameterSet *self, MI_Type *returnType, MI_QualifierSet *qualifierSet) {
   3287   if (self && self->ft) {
   3288     return self->ft->GetMethodReturnType(self, returnType, qualifierSet);
   3289   } else {
   3290     return MI_RESULT_INVALID_PARAMETER;
   3291   }
   3292 }
   3293 
   3294 MI_INLINE MI_Result MI_ParameterSet_GetParameterCount(const MI_ParameterSet *self, MI_Uint32 *count) {
   3295   if (self && self->ft) {
   3296     return self->ft->GetParameterCount(self, count);
   3297   } else {
   3298     return MI_RESULT_INVALID_PARAMETER;
   3299   }
   3300 }
   3301 
   3302 MI_INLINE MI_Result MI_ParameterSet_GetParameterAt(const MI_ParameterSet *self, MI_Uint32 index, const MI_Char **name, MI_Type *parameterType, MI_Char **referenceClass, MI_QualifierSet *qualifierSet) {
   3303   if (self && self->ft) {
   3304     return self->ft->GetParameterAt(self, index, name, parameterType, referenceClass, qualifierSet);
   3305   } else {
   3306     return MI_RESULT_INVALID_PARAMETER;
   3307   }
   3308 }
   3309 
   3310 MI_INLINE MI_Result MI_ParameterSet_GetParameter(const MI_ParameterSet *self, const MI_Char *name, MI_Type *parameterType, MI_Char **referenceClass, MI_QualifierSet *qualifierSet, MI_Uint32 *index) {
   3311   if (self && self->ft) {
   3312     return self->ft->GetParameter(self, name, parameterType, referenceClass, qualifierSet, index);
   3313   } else {
   3314     return MI_RESULT_INVALID_PARAMETER;
   3315   }
   3316 }
   3317 
   3318 MI_INLINE MI_Result MI_QualifierSet_GetQualifierCount(const MI_QualifierSet *self, MI_Uint32 *count) {
   3319   if (self && self->ft) {
   3320     return self->ft->GetQualifierCount(self, count);
   3321   } else {
   3322     return MI_RESULT_INVALID_PARAMETER;
   3323   }
   3324 }
   3325 
   3326 MI_INLINE MI_Result MI_QualifierSet_GetQualifierAt(const MI_QualifierSet *self, MI_Uint32 index, const MI_Char **name, MI_Type *qualifierType, MI_Uint32 *qualifierFlags, MI_Value *qualifierValue) {
   3327   if (self && self->ft) {
   3328     return self->ft->GetQualifierAt(self, index, name, qualifierType, qualifierFlags, qualifierValue);
   3329   } else {
   3330     return MI_RESULT_INVALID_PARAMETER;
   3331   }
   3332 }
   3333 
   3334 MI_INLINE MI_Result MI_QualifierSet_GetQualifier(const MI_QualifierSet *self, const MI_Char *name, MI_Type *qualifierType, MI_Uint32 *qualifierFlags, MI_Value *qualifierValue, MI_Uint32 *index) {
   3335   if (self && self->ft) {
   3336     return self->ft->GetQualifier(self, name, qualifierType, qualifierFlags, qualifierValue, index);
   3337   } else {
   3338     return MI_RESULT_INVALID_PARAMETER;
   3339   }
   3340 }
   3341 
   3342 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetMaximumLatency(MI_SubscriptionDeliveryOptions *self, MI_Interval *value) {
   3343   if (self && self->ft) {
   3344     return self->ft->SetInterval(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_MAXIMUM_LATENCY"), value, 0);
   3345   } else {
   3346     return MI_RESULT_INVALID_PARAMETER;
   3347   }
   3348 }
   3349 
   3350 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetMaximumLatency(MI_SubscriptionDeliveryOptions *self, MI_Interval *value) {
   3351   if (self && self->ft) {
   3352     return self->ft->GetInterval(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_MAXIMUM_LATENCY"), value, 0, 0);
   3353   } else {
   3354     return MI_RESULT_INVALID_PARAMETER;
   3355   }
   3356 }
   3357 
   3358 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetHeartbeatInterval(MI_SubscriptionDeliveryOptions *self, MI_Interval *value) {
   3359   if (self && self->ft) {
   3360     return self->ft->SetInterval(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_HEARTBEAT_INTERVAL"), value, 0);
   3361   } else {
   3362     return MI_RESULT_INVALID_PARAMETER;
   3363   }
   3364 }
   3365 
   3366 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetHeartbeatInterval(MI_SubscriptionDeliveryOptions *self, MI_Interval *value) {
   3367   if (self && self->ft) {
   3368     return self->ft->GetInterval(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_HEARTBEAT_INTERVAL"), value, 0, 0);
   3369   } else {
   3370     return MI_RESULT_INVALID_PARAMETER;
   3371   }
   3372 }
   3373 
   3374 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetExpirationTime(MI_SubscriptionDeliveryOptions *self, MI_Datetime *value) {
   3375   if (self && self->ft) {
   3376     return self->ft->SetDateTime(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_EXPIRATION_TIME"), value, 0);
   3377   } else {
   3378     return MI_RESULT_INVALID_PARAMETER;
   3379   }
   3380 }
   3381 
   3382 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetExpirationTime(MI_SubscriptionDeliveryOptions *self, MI_Datetime *value) {
   3383   if (self && self->ft) {
   3384     return self->ft->GetDateTime(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_EXPIRATION_TIME"), value, 0, 0);
   3385   } else {
   3386     return MI_RESULT_INVALID_PARAMETER;
   3387   }
   3388 }
   3389 
   3390 #define MI_SUBSCRIBE_BOOKMARK_OLDEST L"MI_SUBSCRIBE_BOOKMARK_OLDEST"
   3391 #define MI_SUBSCRIBE_BOOKMARK_NEWEST L"MI_SUBSCRIBE_BOOKMARK_NEWEST"
   3392 
   3393 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetBookmark(MI_SubscriptionDeliveryOptions *self, const MI_Char *value) {
   3394   if (self && self->ft) {
   3395     return self->ft->SetString(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_BOOKMARK"), value, 0);
   3396   } else {
   3397     return MI_RESULT_INVALID_PARAMETER;
   3398   }
   3399 }
   3400 
   3401 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetBookmark(MI_SubscriptionDeliveryOptions *self, const MI_Char **value) {
   3402   if (self && self->ft) {
   3403     return self->ft->GetString(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_BOOKMARK"), value, 0, 0);
   3404   } else {
   3405     return MI_RESULT_INVALID_PARAMETER;
   3406   }
   3407 }
   3408 
   3409 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetDeliveryDestination(MI_SubscriptionDeliveryOptions *self, const MI_Char *value) {
   3410   if (self && self->ft) {
   3411     return self->ft->SetString(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_DELIVERY_DESTINATION"), value, 0);
   3412   } else {
   3413     return MI_RESULT_INVALID_PARAMETER;
   3414   }
   3415 }
   3416 
   3417 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetDeliveryDestination(MI_SubscriptionDeliveryOptions *self, const MI_Char **value) {
   3418   if (self && self->ft) {
   3419     return self->ft->GetString(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_DELIVERY_DESTINATION"), value, 0, 0);
   3420   } else {
   3421     return MI_RESULT_INVALID_PARAMETER;
   3422   }
   3423 }
   3424 
   3425 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetDeliveryPortNumber(MI_SubscriptionDeliveryOptions *self, MI_Uint32 value) {
   3426   if (self && self->ft) {
   3427     return self->ft->SetNumber(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_DELIVERY_PORT_NUMBER"), value, 0);
   3428   } else {
   3429     return MI_RESULT_INVALID_PARAMETER;
   3430   }
   3431 }
   3432 
   3433 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetDeliveryPortNumber(MI_SubscriptionDeliveryOptions *self, MI_Uint32 *value) {
   3434   if (self && self->ft) {
   3435     return self->ft->GetNumber(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_DELIVERY_PORT_NUMBER"), value, 0, 0);
   3436   } else {
   3437     return MI_RESULT_INVALID_PARAMETER;
   3438   }
   3439 }
   3440 
   3441 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_AddDeliveryCredentials(MI_SubscriptionDeliveryOptions *self, const MI_UserCredentials *value) {
   3442   if (self && self->ft) {
   3443     return self->ft->AddCredentials(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_ADD_DELIVERY_CREDENTIALS"), value, 0);
   3444   } else {
   3445     return MI_RESULT_INVALID_PARAMETER;
   3446   }
   3447 }
   3448 
   3449 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetDeliveryRetryInterval(MI_SubscriptionDeliveryOptions *self, const MI_Interval *value) {
   3450   if (self && self->ft) {
   3451     return self->ft->SetInterval(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_DELIVERY_RETRY_INTERVAL"), value, 0);
   3452   } else {
   3453     return MI_RESULT_INVALID_PARAMETER;
   3454   }
   3455 }
   3456 
   3457 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetDeliveryRetryInterval(MI_SubscriptionDeliveryOptions *self, MI_Interval *value) {
   3458   if (self && self->ft) {
   3459     return self->ft->GetInterval(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_DELIVERY_RETRY_INTERVAL"), value, 0, 0);
   3460   } else {
   3461     return MI_RESULT_INVALID_PARAMETER;
   3462   }
   3463 }
   3464 
   3465 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetDeliveryRetryAttempts(MI_SubscriptionDeliveryOptions *self, MI_Uint32 value) {
   3466   if (self && self->ft) {
   3467     return self->ft->SetNumber(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_DELIVERY_RETRY_ATTEMPTS"), value, 0);
   3468   } else {
   3469     return MI_RESULT_INVALID_PARAMETER;
   3470   }
   3471 }
   3472 
   3473 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetDeliveryRetryAttempts(MI_SubscriptionDeliveryOptions *self, MI_Uint32 *value) {
   3474   if (self && self->ft) {
   3475     return self->ft->GetNumber(self, MI_T("__MI_SUBSCRIPTIONDELIVERYOPTIONS_SET_DELIVERY_RETRY_ATTEMPTS"), value, 0, 0);
   3476   } else {
   3477     return MI_RESULT_INVALID_PARAMETER;
   3478   }
   3479 }
   3480 
   3481 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_Delete(MI_SubscriptionDeliveryOptions* self) {
   3482   if (self && self->ft) {
   3483     return self->ft->Delete(self);
   3484   } else {
   3485     return MI_RESULT_INVALID_PARAMETER;
   3486   }
   3487 }
   3488 
   3489 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetString(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, const MI_Char *value, MI_Uint32 flags) {
   3490   if (self && self->ft) {
   3491     return self->ft->SetString(self, optionName, value, flags);
   3492   } else {
   3493     return MI_RESULT_INVALID_PARAMETER;
   3494   }
   3495 }
   3496 
   3497 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetNumber(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, MI_Uint32 value, MI_Uint32 flags) {
   3498   if (self && self->ft) {
   3499     return self->ft->SetNumber(self, optionName, value, flags);
   3500   } else {
   3501     return MI_RESULT_INVALID_PARAMETER;
   3502   }
   3503 }
   3504 
   3505 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetDateTime(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, const MI_Datetime *value, MI_Uint32 flags) {
   3506   if (self && self->ft) {
   3507     return self->ft->SetDateTime(self, optionName, value, flags);
   3508   } else {
   3509     return MI_RESULT_INVALID_PARAMETER;
   3510   }
   3511 }
   3512 
   3513 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_SetInterval(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, const MI_Interval *value, MI_Uint32 flags) {
   3514   if (self && self->ft) {
   3515     return self->ft->SetInterval(self, optionName, value, flags);
   3516   } else {
   3517     return MI_RESULT_INVALID_PARAMETER;
   3518   }
   3519 }
   3520 
   3521 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetString(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, const MI_Char **value, MI_Uint32 *index, MI_Uint32 *flags) {
   3522   if (self && self->ft) {
   3523     return self->ft->GetString(self, optionName, value, index, flags);
   3524   } else {
   3525     return MI_RESULT_INVALID_PARAMETER;
   3526   }
   3527 }
   3528 
   3529 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetNumber(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, MI_Uint32 *value, MI_Uint32 *index, MI_Uint32 *flags) {
   3530   if (self && self->ft) {
   3531     return self->ft->GetNumber(self, optionName, value, index, flags);
   3532   } else {
   3533     return MI_RESULT_INVALID_PARAMETER;
   3534   }
   3535 }
   3536 
   3537 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetDateTime(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, MI_Datetime *value, MI_Uint32 *index, MI_Uint32 *flags) {
   3538   if (self && self->ft) {
   3539     return self->ft->GetDateTime(self, optionName, value, index, flags);
   3540   } else {
   3541     return MI_RESULT_INVALID_PARAMETER;
   3542   }
   3543 }
   3544 
   3545 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetInterval(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, MI_Interval *value, MI_Uint32 *index, MI_Uint32 *flags) {
   3546   if (self && self->ft) {
   3547     return self->ft->GetInterval(self, optionName, value, index, flags);
   3548   } else {
   3549     return MI_RESULT_INVALID_PARAMETER;
   3550   }
   3551 }
   3552 
   3553 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetOptionCount( MI_SubscriptionDeliveryOptions *self, MI_Uint32 *count) {
   3554   if (self && self->ft) {
   3555     return self->ft->GetOptionCount(self, count);
   3556   } else {
   3557     return MI_RESULT_INVALID_PARAMETER;
   3558   }
   3559 }
   3560 
   3561 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetOptionAt(MI_SubscriptionDeliveryOptions *self, MI_Uint32 index, const MI_Char **optionName, MI_Value *value, MI_Type *type, MI_Uint32 *flags) {
   3562   if (self && self->ft) {
   3563     return self->ft->GetOptionAt(self, index, optionName, value, type, flags);
   3564   } else {
   3565     return MI_RESULT_INVALID_PARAMETER;
   3566   }
   3567 }
   3568 
   3569 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetOption(MI_SubscriptionDeliveryOptions *self, const MI_Char *optionName, MI_Value *value, MI_Type *type, MI_Uint32 *index, MI_Uint32 *flags) {
   3570   if (self && self->ft) {
   3571     return self->ft->GetOption(self, optionName, value, type, index, flags);
   3572   } else {
   3573     return MI_RESULT_INVALID_PARAMETER;
   3574   }
   3575 }
   3576 
   3577 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetCredentialsCount(MI_SubscriptionDeliveryOptions *self, MI_Uint32 *count) {
   3578   if (self && self->ft) {
   3579     return self->ft->GetCredentialsCount(self, count);
   3580   } else {
   3581     return MI_RESULT_INVALID_PARAMETER;
   3582   }
   3583 }
   3584 
   3585 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetCredentialsAt(MI_SubscriptionDeliveryOptions *self, MI_Uint32 index, const MI_Char **optionName, MI_UserCredentials *credentials, MI_Uint32 *flags) {
   3586   if (self && self->ft) {
   3587     return self->ft->GetCredentialsAt(self, index, optionName, credentials, flags);
   3588   } else {
   3589     return MI_RESULT_INVALID_PARAMETER;
   3590   }
   3591 }
   3592 
   3593 MI_INLINE MI_Result MI_SubscriptionDeliveryOptions_GetCredentialsPasswordAt(MI_SubscriptionDeliveryOptions *self, MI_Uint32 index, const MI_Char **optionName, MI_Char *password, MI_Uint32 bufferLength, MI_Uint32 *passwordLength, MI_Uint32 *flags) {
   3594   if (self && self->ft) {
   3595     return self->ft->GetCredentialsPasswordAt(self, index, optionName, password, bufferLength, passwordLength, flags);
   3596   } else {
   3597     return MI_RESULT_INVALID_PARAMETER;
   3598   }
   3599 }
   3600 
   3601 MI_INLINE MI_Result MI_INLINE_CALL MI_SubscriptionDeliveryOptions_Clone(const MI_SubscriptionDeliveryOptions* self, MI_SubscriptionDeliveryOptions* newSubscriptionDeliveryOptions) {
   3602   if (self && self->ft) {
   3603     return self->ft->Clone(self, newSubscriptionDeliveryOptions);
   3604   } else {
   3605     return MI_RESULT_INVALID_PARAMETER;
   3606   }
   3607 }
   3608 
   3609 #define MI_SERIALIZER_FLAGS_CLASS_DEEP 1
   3610 #define MI_SERIALIZER_FLAGS_INSTANCE_WITH_CLASS 1
   3611 
   3612 MI_INLINE MI_Result MI_Serializer_Close(MI_Serializer *serializer) {
   3613   return mi_clientFT->serializerFT->Close(serializer);
   3614 }
   3615 
   3616 MI_INLINE MI_Result MI_Serializer_SerializeClass(MI_Serializer *serializer, MI_Uint32 flags, const MI_Class *classObject,  MI_Uint8 *clientBuffer, MI_Uint32 clientBufferLength,  MI_Uint32 *clientBufferNeeded) {
   3617   return mi_clientFT->serializerFT->SerializeClass(serializer, flags, classObject, clientBuffer, clientBufferLength, clientBufferNeeded);
   3618 }
   3619 
   3620 MI_INLINE MI_Result MI_Serializer_SerializeInstance(MI_Serializer *serializer, MI_Uint32 flags, const MI_Instance *instanceObject, MI_Uint8 *clientBuffer, MI_Uint32 clientBufferLength, MI_Uint32 *clientBufferNeeded) {
   3621   return mi_clientFT->serializerFT->SerializeInstance(serializer, flags, instanceObject, clientBuffer, clientBufferLength, clientBufferNeeded);
   3622 }
   3623 
   3624 MI_INLINE MI_Result MI_Deserializer_Close(MI_Deserializer *deserializer) {
   3625   const MI_ClientFT_V1 *clientFT = mi_clientFT;
   3626   const MI_DeserializerFT *deserializerFT = clientFT->deserializerFT;
   3627   return deserializerFT->Close(deserializer);
   3628 }
   3629 
   3630 MI_INLINE MI_Result MI_Deserializer_DeserializeClass(MI_Deserializer *deserializer, MI_Uint32 flags, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Class *parentClass, const MI_Char *serverName, const MI_Char *namespaceName, MI_Deserializer_ClassObjectNeeded classObjectNeeded, void *classObjectNeededContext, MI_Uint32 *serializedBufferRead, MI_Class **classObject, MI_Instance **cimErrorDetails) {
   3631   return mi_clientFT->deserializerFT->DeserializeClass(deserializer, flags, serializedBuffer, serializedBufferLength, parentClass, serverName, namespaceName, classObjectNeeded, classObjectNeededContext, serializedBufferRead, classObject, cimErrorDetails);
   3632 }
   3633 
   3634 MI_INLINE MI_Result MI_Deserializer_Class_GetClassName(MI_Deserializer *deserializer, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Char *className, MI_Uint32 *classNameLength, MI_Instance **cimErrorDetails) {
   3635   return mi_clientFT->deserializerFT->Class_GetClassName(deserializer, serializedBuffer, serializedBufferLength, className, classNameLength, cimErrorDetails);
   3636 }
   3637 
   3638 MI_INLINE MI_Result MI_Deserializer_Class_GetParentClassName(MI_Deserializer *deserializer, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Char *parentClassName, MI_Uint32 *parentClassNameLength, MI_Instance **cimErrorDetails) {
   3639   return mi_clientFT->deserializerFT->Class_GetParentClassName(deserializer, serializedBuffer, serializedBufferLength, parentClassName, parentClassNameLength, cimErrorDetails);
   3640 }
   3641 
   3642 MI_INLINE MI_Result MI_Deserializer_DeserializeInstance(MI_Deserializer *deserializer, MI_Uint32 flags, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Class **classObjects, MI_Uint32 numberClassObjects, MI_Deserializer_ClassObjectNeeded classObjectNeeded, void *classObjectNeededContext, MI_Uint32 *serializedBufferRead, MI_Instance **instanceObject, MI_Instance **cimErrorDetails) {
   3643   return mi_clientFT->deserializerFT->DeserializeInstance(deserializer, flags, serializedBuffer, serializedBufferLength, classObjects, numberClassObjects, classObjectNeeded, classObjectNeededContext, serializedBufferRead, instanceObject, cimErrorDetails);
   3644 }
   3645 
   3646 MI_INLINE MI_Result MI_Deserializer_Instance_GetClassName(MI_Deserializer *deserializer, MI_Uint8 *serializedBuffer, MI_Uint32 serializedBufferLength, MI_Char *className, MI_Uint32 *classNameLength, MI_Instance **cimErrorDetails) {
   3647   return mi_clientFT->deserializerFT->Instance_GetClassName(deserializer, serializedBuffer, serializedBufferLength, className, classNameLength, cimErrorDetails);
   3648 }
   3649 
   3650 MI_INLINE MI_ErrorCategory MI_Utilities_MapErrorToMiErrorCategory(MI_Char *errorType, MI_Uint32 error) {
   3651   return mi_clientFT->utilitiesFT->MapErrorToMiErrorCategory(errorType, error);
   3652 }
   3653 
   3654 MI_INLINE MI_Result MI_Utilities_CimErrorFromErrorCode(MI_Uint32 error, const MI_Char *errorType, const MI_Char* errorMessage, MI_Instance **cimError) {
   3655   return mi_clientFT->utilitiesFT->CimErrorFromErrorCode(error, errorType, errorMessage, cimError);
   3656 }
   3657 
   3658 #define MI_CancelationReason MI_CancellationReason
   3659 #define _MI_CancelationReason _MI_CancellationReason
   3660 #define MI_PostResult MI_Context_PostResult
   3661 #define MI_PostCimError MI_Context_PostCimError
   3662 #define MI_PostError MI_Context_PostError
   3663 #define MI_PostInstance MI_Context_PostInstance
   3664 #define MI_PostIndication MI_Context_PostIndication
   3665 #define MI_ConstructInstance MI_Context_ConstructInstance
   3666 #define MI_ConstructParameters MI_Context_ConstructParameters
   3667 #define MI_NewInstance MI_Context_NewInstance
   3668 #define MI_NewDynamicInstance MI_Context_NewDynamicInstance
   3669 #define MI_NewParameters MI_Context_NewParameters
   3670 #define MI_Canceled MI_Context_Canceled
   3671 #define MI_GetLocale MI_Context_GetLocale
   3672 #define MI_RegisterCancel MI_Context_RegisterCancel
   3673 #define MI_RequestUnload MI_Context_RequestUnload
   3674 #define MI_RefuseUnload MI_Context_RefuseUnload
   3675 #define MI_GetLocalSession MI_Context_GetLocalSession
   3676 #define MI_SetStringOption MI_Context_SetStringOption
   3677 #define MI_GetStringOption MI_Context_GetStringOption
   3678 #define MI_GetNumberOption MI_Context_GetNumberOption
   3679 #define MI_GetCustomOption MI_Context_GetCustomOption
   3680 #define MI_GetCustomOptionCount MI_Context_GetCustomOptionCount
   3681 #define MI_GetCustomOptionAt MI_Context_GetCustomOptionAt
   3682 #define MI_ShouldProcess MI_Context_ShouldProcess
   3683 #define MI_ShouldContinue MI_Context_ShouldContinue
   3684 #define MI_PromptUser MI_Context_PromptUser
   3685 #define MI_WriteError MI_Context_WriteError
   3686 #define MI_WriteCimError MI_Context_WriteCimError
   3687 #define MI_WriteMessage MI_Context_WriteMessage
   3688 #define MI_WriteProgress MI_Context_WriteProgress
   3689 #define MI_WriteStreamParameter MI_Context_WriteStreamParameter
   3690 #define MI_WriteWarning MI_Context_WriteWarning
   3691 #define MI_WriteVerbose MI_Context_WriteVerbose
   3692 #define MI_WriteDebug MI_Context_WriteDebug
   3693 #define MI_SubscriptionDeliveryOptions__SetExpirationTime MI_SubscriptionDeliveryOptions_SetExpirationTime
   3694 #define MI_SubscriptionDeliveryOptions__GetExpirationTime MI_SubscriptionDeliveryOptions_GetExpirationTime
   3695 
   3696 #ifdef __cplusplus
   3697 }
   3698 #endif
   3699 
   3700 #endif /* __MI_C_API_H */
   3701 
   3702 #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */