github.com/remoteit/go-ole@v1.2.7/ienumvariant_test.go (about) 1 // +build windows 2 3 package ole 4 5 import "testing" 6 7 func TestIEnumVariant_wmi(t *testing.T) { 8 var err error 9 var classID *GUID 10 11 IID_ISWbemLocator := &GUID{0x76a6415b, 0xcb41, 0x11d1, [8]byte{0x8b, 0x02, 0x00, 0x60, 0x08, 0x06, 0xd9, 0xb6}} 12 13 err = CoInitialize(0) 14 if err != nil { 15 t.Errorf("Initialize error: %v", err) 16 } 17 defer CoUninitialize() 18 19 classID, err = ClassIDFrom("WbemScripting.SWbemLocator") 20 if err != nil { 21 t.Errorf("CreateObject WbemScripting.SWbemLocator returned with %v", err) 22 } 23 24 comserver, err := CreateInstance(classID, IID_IUnknown) 25 if err != nil { 26 t.Errorf("CreateInstance WbemScripting.SWbemLocator returned with %v", err) 27 } 28 if comserver == nil { 29 t.Error("CreateObject WbemScripting.SWbemLocator not an object") 30 } 31 defer comserver.Release() 32 33 dispatch, err := comserver.QueryInterface(IID_ISWbemLocator) 34 if err != nil { 35 t.Errorf("context.iunknown.QueryInterface returned with %v", err) 36 } 37 defer dispatch.Release() 38 39 wbemServices, err := dispatch.CallMethod("ConnectServer") 40 if err != nil { 41 t.Errorf("ConnectServer failed with %v", err) 42 } 43 defer wbemServices.Clear() 44 45 objectset, err := wbemServices.ToIDispatch().CallMethod("ExecQuery", "SELECT * FROM WIN32_Process") 46 if err != nil { 47 t.Errorf("ExecQuery failed with %v", err) 48 } 49 defer objectset.Clear() 50 51 enum_property, err := objectset.ToIDispatch().GetProperty("_NewEnum") 52 if err != nil { 53 t.Errorf("Get _NewEnum property failed with %v", err) 54 } 55 defer enum_property.Clear() 56 57 enum, err := enum_property.ToIUnknown().IEnumVARIANT(IID_IEnumVariant) 58 if err != nil { 59 t.Errorf("IEnumVARIANT() returned with %v", err) 60 } 61 if enum == nil { 62 t.Error("Enum is nil") 63 t.FailNow() 64 } 65 defer enum.Release() 66 67 for tmp, length, err := enum.Next(1); length > 0; tmp, length, err = enum.Next(1) { 68 if err != nil { 69 t.Errorf("Next() returned with %v", err) 70 } 71 tmp_dispatch := tmp.ToIDispatch() 72 defer tmp_dispatch.Release() 73 74 props, err := tmp_dispatch.GetProperty("Properties_") 75 if err != nil { 76 t.Errorf("Get Properties_ property failed with %v", err) 77 } 78 defer props.Clear() 79 80 props_enum_property, err := props.ToIDispatch().GetProperty("_NewEnum") 81 if err != nil { 82 t.Errorf("Get _NewEnum property failed with %v", err) 83 } 84 defer props_enum_property.Clear() 85 86 props_enum, err := props_enum_property.ToIUnknown().IEnumVARIANT(IID_IEnumVariant) 87 if err != nil { 88 t.Errorf("IEnumVARIANT failed with %v", err) 89 } 90 defer props_enum.Release() 91 92 class_variant, err := tmp_dispatch.GetProperty("Name") 93 if err != nil { 94 t.Errorf("Get Name property failed with %v", err) 95 } 96 defer class_variant.Clear() 97 98 class_name := class_variant.ToString() 99 t.Logf("Got %v", class_name) 100 } 101 }