On Friday, 29 May 2020 at 09:04:30 UTC, WebFreak001 wrote:
[...]
I realized it may be useful to have a much more complete example, so replace the while (true) loop in my first code with this to get much more information dumped:
while (true) { enumerator.Next(WBEM_INFINITE, 1, &clsobj, &ureturn); if (!ureturn) break; scope (exit) clsobj.Release(); BSTR name; VARIANT vtProp; printf("\nEntry:\n"); clsobj.BeginEnumeration(0); while (true) { enum WBEM_S_NO_MORE_DATA = 0x40005; if (clsobj.Next(0, &name, &vtProp, null, null) == WBEM_S_NO_MORE_DATA) break; printf("\t%ls: ", name); SysFreeString(name); switch (vtProp.vt) { case VARENUM.VT_EMPTY: printf("<empty>\n"); break; case VARENUM.VT_NULL: printf("null\n"); break; case VARENUM.VT_VOID: printf("void\n"); break; case VARENUM.VT_I1: printf("byte: %d\n", cast(int) vtProp.bVal); break; case VARENUM.VT_UI1: printf("ubyte: %d\n", cast(int) vtProp.bVal); break; case VARENUM.VT_UI2: printf("ushort: %d\n", cast(int) vtProp.iVal); break; case VARENUM.VT_UI4: case VARENUM.VT_UINT: printf("uint: %u\n", cast(uint) vtProp.intVal); break; case VARENUM.VT_I8: printf("long: %ld\n", cast(long) vtProp.llVal); break; case VARENUM.VT_UI8: printf("ulong: %lu\n", cast(ulong) vtProp.llVal); break; case VARENUM.VT_I2: printf("short: %d\n", cast(int) vtProp.iVal); break; case VARENUM.VT_I4: case VARENUM.VT_INT: printf("int: %d\n", vtProp.intVal); break; case VARENUM.VT_R4: printf("float: %f\n", vtProp.fltVal); break; case VARENUM.VT_R8: printf("double: %f\n", vtProp.dblVal); break; case VARENUM.VT_CY: printf("currency: %ld\n", vtProp.cyVal.int64); break; case VARENUM.VT_DATE: printf("date: %lf\n", vtProp.date); break; case VARENUM.VT_BSTR: printf("bstr: %ls\n", vtProp.bstrVal); break; case VARENUM.VT_BOOL: if (vtProp.boolVal) printf("true\n"); else printf("false\n"); break; default: printf("<type %d>\n", vtProp.vt); break; } VariantClear(&vtProp); } clsobj.Get("Name", 0, &vtProp, null, null); if (vtProp.vt == VARENUM.VT_BSTR) printf("\tName: %ls\n", vtProp.bstrVal); }