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);
        }


Reply via email to