@@ -25,7 +25,6 @@ import (
25
25
"runtime"
26
26
27
27
"github.com/go-ole/go-ole"
28
- "github.com/go-ole/go-ole/oleutil"
29
28
"github.com/microsoft/wmi/pkg/base/query"
30
29
wmierrors "github.com/microsoft/wmi/pkg/errors"
31
30
cim "github.com/microsoft/wmi/pkg/wmiinstance"
@@ -107,105 +106,6 @@ func QueryInstances(namespace string, query *query.WmiQuery) ([]*cim.WmiInstance
107
106
return instances , err
108
107
}
109
108
110
- // TODO: fix the panic in microsoft/wmi library and remove this workaround
111
- // Refer to https://github.com/microsoft/wmi/issues/167
112
- func executeClassMethodParam (classInst * cim.WmiInstance , method * cim.WmiMethod , inParam , outParam cim.WmiMethodParamCollection ) (result * cim.WmiMethodResult , err error ) {
113
- klog .V (6 ).Infof ("[WMI] - Executing Method [%s]\n " , method .Name )
114
-
115
- iDispatchInstance := classInst .GetIDispatch ()
116
- if iDispatchInstance == nil {
117
- return nil , wmierrors .Wrapf (wmierrors .InvalidInput , "InvalidInstance" )
118
- }
119
- rawResult , err := iDispatchInstance .GetProperty ("Methods_" )
120
- if err != nil {
121
- return nil , err
122
- }
123
- defer rawResult .Clear ()
124
- // Retrieve the method
125
- rawMethod , err := rawResult .ToIDispatch ().CallMethod ("Item" , method .Name )
126
- if err != nil {
127
- return nil , err
128
- }
129
- defer rawMethod .Clear ()
130
-
131
- addInParam := func (inparamVariant * ole.VARIANT , paramName string , paramValue interface {}) error {
132
- rawProperties , err := inparamVariant .ToIDispatch ().GetProperty ("Properties_" )
133
- if err != nil {
134
- return err
135
- }
136
- defer rawProperties .Clear ()
137
- rawProperty , err := rawProperties .ToIDispatch ().CallMethod ("Item" , paramName )
138
- if err != nil {
139
- return err
140
- }
141
- defer rawProperty .Clear ()
142
-
143
- p , err := rawProperty .ToIDispatch ().PutProperty ("Value" , paramValue )
144
- if err != nil {
145
- return err
146
- }
147
- defer p .Clear ()
148
- return nil
149
- }
150
-
151
- params := []interface {}{method .Name }
152
- if len (inParam ) > 0 {
153
- inparamsRaw , err := rawMethod .ToIDispatch ().GetProperty ("InParameters" )
154
- if err != nil {
155
- return nil , err
156
- }
157
- defer inparamsRaw .Clear ()
158
-
159
- inparams , err := oleutil .CallMethod (inparamsRaw .ToIDispatch (), "SpawnInstance_" )
160
- if err != nil {
161
- return nil , err
162
- }
163
- defer inparams .Clear ()
164
-
165
- for _ , inp := range inParam {
166
- addInParam (inparams , inp .Name , inp .Value )
167
- }
168
-
169
- params = append (params , inparams )
170
- }
171
-
172
- result = & cim.WmiMethodResult {
173
- OutMethodParams : map [string ]* cim.WmiMethodParam {},
174
- }
175
- outparams , err := classInst .GetIDispatch ().CallMethod ("ExecMethod_" , params ... )
176
- if err != nil {
177
- return
178
- }
179
- defer outparams .Clear ()
180
- returnRaw , err := outparams .ToIDispatch ().GetProperty ("ReturnValue" )
181
- if err != nil {
182
- return
183
- }
184
- defer returnRaw .Clear ()
185
- if returnRaw .Value () != nil {
186
- result .ReturnValue = returnRaw .Value ().(int32 )
187
- klog .V (6 ).Infof ("[WMI] - Return [%d] " , result .ReturnValue )
188
- }
189
-
190
- for _ , outp := range outParam {
191
- returnRawIn , err1 := outparams .ToIDispatch ().GetProperty (outp .Name )
192
- if err1 != nil {
193
- err = err1
194
- return
195
- }
196
- defer returnRawIn .Clear ()
197
-
198
- value , err1 := cim .GetVariantValue (returnRawIn )
199
- if err1 != nil {
200
- err = err1
201
- return
202
- }
203
-
204
- result .OutMethodParams [outp .Name ] = cim .NewWmiMethodParam (outp .Name , value )
205
- }
206
- return
207
- }
208
-
209
109
// InvokeCimMethod calls a static method on a specific WMI class with given input parameters,
210
110
// returning the method's return value, output parameters, and any error encountered.
211
111
func InvokeCimMethod (namespace , class , methodName string , inputParameters map [string ]interface {}) (int , map [string ]interface {}, error ) {
@@ -241,7 +141,7 @@ func InvokeCimMethod(namespace, class, methodName string, inputParameters map[st
241
141
242
142
var outParam cim.WmiMethodParamCollection
243
143
var result * cim.WmiMethodResult
244
- result , err = executeClassMethodParam ( classInst , method , inParam , outParam )
144
+ result , err = method . Execute ( inParam , outParam )
245
145
if err != nil {
246
146
return - 1 , nil , err
247
147
}
0 commit comments