1###########################################################################
2#
3# This program is part of Zenoss Core, an open source monitoring platform.
4# Copyright (C) 2008-2010, Zenoss Inc.
5#
6# This program is free software; you can redistribute it and/or modify it
7# under the terms of the GNU General Public License version 2, or (at your
8# option) any later version, as published by the Free Software Foundation.
9#
10# For complete information please visit: http://www.zenoss.com/oss/
11#
12###########################################################################
13
14from pysamba.library import *
15from pysamba.composite_context import composite_context
16
17class com_context(Structure): pass
18
19CIMSTRING = c_char_p
20CIM_EMPTY=0
21CIM_SINT8=16
22CIM_UINT8=17
23CIM_SINT16=2
24CIM_UINT16=18
25CIM_SINT32=3
26CIM_UINT32=19
27CIM_SINT64=20
28CIM_UINT64=21
29CIM_REAL32=4
30CIM_REAL64=5
31CIM_BOOLEAN=11
32CIM_STRING=8
33CIM_DATETIME=101
34CIM_REFERENCE=102
35CIM_CHAR16=103
36CIM_OBJECT=13
37CIM_FLAG_ARRAY=0x2000
38CIM_ARR_SINT8=CIM_FLAG_ARRAY|CIM_SINT8
39CIM_ARR_UINT8=CIM_FLAG_ARRAY|CIM_UINT8
40CIM_ARR_SINT16=CIM_FLAG_ARRAY|CIM_SINT16
41CIM_ARR_UINT16=CIM_FLAG_ARRAY|CIM_UINT16
42CIM_ARR_SINT32=CIM_FLAG_ARRAY|CIM_SINT32
43CIM_ARR_UINT32=CIM_FLAG_ARRAY|CIM_UINT32
44CIM_ARR_SINT64=CIM_FLAG_ARRAY|CIM_SINT64
45CIM_ARR_UINT64=CIM_FLAG_ARRAY|CIM_UINT64
46CIM_ARR_REAL32=CIM_FLAG_ARRAY|CIM_REAL32
47CIM_ARR_REAL64=CIM_FLAG_ARRAY|CIM_REAL64
48CIM_ARR_BOOLEAN=CIM_FLAG_ARRAY|CIM_BOOLEAN
49CIM_ARR_STRING=CIM_FLAG_ARRAY|CIM_STRING
50CIM_ARR_DATETIME=CIM_FLAG_ARRAY|CIM_DATETIME
51CIM_ARR_REFERENCE=CIM_FLAG_ARRAY|CIM_REFERENCE
52CIM_ARR_CHAR16=CIM_FLAG_ARRAY|CIM_CHAR16
53CIM_ARR_OBJECT=CIM_FLAG_ARRAY|CIM_OBJECT
54CIM_ILLEGAL=0xfff
55CIM_TYPEMASK=0x2FFF
56
57class CIMSTRINGS(Structure):
58    _fields_ = [
59        ('count', uint32_t),
60        ('item', POINTER(CIMSTRING))
61        ]
62
63class WbemClassObject(Structure): pass
64
65class arr_int8(Structure):
66    _fields_= [
67        ('count', uint32_t),
68        ('item', POINTER(int8_t))
69        ]
70class arr_uint8(Structure):
71    _fields_= [
72        ('count', uint32_t),
73        ('item', POINTER(uint8_t))
74        ]
75class arr_int16(Structure):
76    _fields_= [
77        ('count', uint32_t),
78        ('item', POINTER(int16_t))
79        ]
80class uarr_uint16(Structure):
81    _fields_= [
82        ('count', uint32_t),
83        ('item', POINTER(uint16_t))
84        ]
85class arr_int32(Structure):
86    _fields_= [
87        ('count', uint32_t),
88        ('item', POINTER(int32_t))
89        ]
90class arr_uint32(Structure):
91    _fields_= [
92        ('count', uint32_t),
93        ('item', POINTER(uint32_t))
94        ]
95dlong_t = int64_t
96class arr_dlong(Structure):
97    _fields_= [
98        ('count', uint32_t),
99        ('item', POINTER(dlong_t))
100        ]
101class arr_uint32(Structure):
102    _fields_= [
103        ('count', uint32_t),
104        ('item', POINTER(uint32_t))
105        ]
106udlong_t = uint64_t
107class arr_udlong(Structure):
108    _fields_= [
109        ('count', uint32_t),
110        ('item', POINTER(udlong_t))
111        ]
112class arr_uint16(Structure):
113    _fields_= [
114        ('count', uint32_t),
115        ('item', POINTER(uint16_t))
116        ]
117class arr_CIMSTRING(Structure):
118    _fields_= [
119        ('count', uint32_t),
120        ('item', POINTER(CIMSTRING))
121        ]
122class arr_WbemClassObject(Structure):
123    _fields_= [
124        ('count', uint32_t),
125        ('item', POINTER(WbemClassObject))
126        ]
127
128class CIMVAR(Union):
129    _fields_ = [
130        ('v_sint8', int8_t),            # case (CIM_SINT8)
131        ('v_uint8', uint8_t),           # case (CIM_UINT8)
132        ('v_sint16', int16_t),          # case (CIM_SINT16)
133        ('v_uint16', uint16_t),         # case (CIM_UINT16)
134        ('v_sint32', int32_t),          # case (CIM_SINT32)
135        ('v_uint32', uint32_t),         # case (CIM_UINT32)
136        ('v_sint64', int64_t),          # case (CIM_SINT64)
137        ('v_uint64', uint64_t),         # case (CIM_UINT64)
138        ('v_real32', uint32_t),         # case (CIM_REAL32)
139        ('v_real64', uint64_t),         # case (CIM_REAL64)
140        ('v_boolean', uint16_t),        # case (CIM_BOOLEAN)
141        ('v_string', CIMSTRING), # relative,string,charset(UTF16),case(CIM_STRING)]
142        ('v_datetime', CIMSTRING), # relative,string,charset(UTF16),case(CIM_DATETIME)]
143        ('v_reference', CIMSTRING), # relative,string,charset(UTF16),case(CIM_REFERENCE)]
144        ('v_object', POINTER(WbemClassObject)), # [relative,subcontext(4),case(CIM_OBJECT)]
145        ('a_sint8', POINTER(arr_int8)), # [relative,case(CIM_ARR_SINT8)]
146        ('a_uint8', POINTER(arr_uint8)), # [relative,case(CIM_ARR_UINT8)]
147        ('a_sint16', POINTER(arr_int16)), # [relative,case(CIM_ARR_SINT16)]
148        ('a_uint16', POINTER(arr_uint16)), # [relative,case(CIM_ARR_UINT16)]
149        ('a_sint32', POINTER(arr_int32)), # [relative,case(CIM_ARR_SINT32)]
150        ('a_uint32', POINTER(arr_uint32)), # [relative,case(CIM_ARR_UINT32)]
151        ('a_sint64', POINTER(arr_dlong)), # [relative,case(CIM_ARR_SINT64)]
152        ('a_uint64', POINTER(arr_udlong)), # [relative,case(CIM_ARR_UINT64)]
153        ('a_real32', POINTER(arr_uint32)), # [relative,case(CIM_ARR_REAL32)]
154        ('a_real64', POINTER(arr_udlong)), # [relative,case(CIM_ARR_REAL64)]
155        ('a_boolean', POINTER(arr_uint16)), # [relative,case(CIM_ARR_BOOLEAN)]
156        ('a_string', POINTER(arr_CIMSTRING)), # [relative,case(CIM_ARR_STRING)]
157        ('a_datetime', POINTER(arr_CIMSTRING)), # [relative,case(CIM_ARR_DATETIME)]
158        ('a_reference', POINTER(arr_CIMSTRING)), # [relative,case(CIM_ARR_REFERENCE)]
159        ('a_object', POINTER(arr_WbemClassObject)), # [relative,case(CIM_ARR_OBJECT)]
160        ]
161
162
163class WbemQualifier(Structure): pass
164
165class WbemQualifiers(Structure):
166    _fields_ = [
167        ('count', uint32_t),
168        ('item',  POINTER(POINTER(WbemQualifier))),
169        ]
170
171class WbemPropertyDesc(Structure):
172    _fields_ = [
173        ('cimtype', uint32_t),
174        ('nr', uint16_t),
175        ('offset', uint32_t),
176        ('depth', uint32_t),
177        ('qualifiers', WbemQualifiers),
178        ]
179
180class WbemProperty(Structure):
181    _fields_ = [
182        ('name', CIMSTRING), # [relative,string,charset(UTF16)]
183        ('desc', POINTER(WbemPropertyDesc)), # [relative]
184        ]
185
186class WbemMethods(Structure): pass
187
188class WbemClass(Structure):
189    _fields_ = [
190        ('u_0', uint8_t),
191        ('__CLASS', CIMSTRING),
192        ('data_size', uint32_t),
193        ('__DERIVATION', CIMSTRINGS),
194        ('qualifiers', WbemQualifiers),
195        ('__PROPERTY_COUNT', uint32_t),
196        ('properties', POINTER(WbemProperty)),
197        ('default_flags', POINTER(uint8_t)),
198        ('default_values', POINTER(CIMVAR)),
199        ]
200
201class WbemInstance(Structure):
202    _fields_ = [
203        ('u1_0', uint8_t),
204        ('__CLASS', CIMSTRING),
205        ('default_flags', POINTER(uint8_t)),
206        ('data', POINTER(CIMVAR)),
207        ('u2_4', uint32_t),
208        ('u3_1', uint8_t),
209        ]
210
211WbemClassObject._fields_ = [
212        ('flags', uint8_t),
213        ('__SERVER', CIMSTRING),
214        ('__NAMESPACE', CIMSTRING),
215        ('sup_class', POINTER(WbemClass)),
216        ('sup_methods', POINTER(WbemMethods)),
217        ('obj_class', POINTER(WbemClass)),
218        ('obj_methods', POINTER(WbemMethods)),
219        ('instance', POINTER(WbemInstance)),
220        ]
221
222class IWbemServices(Structure): pass
223class IEnumWbemClassObject(Structure): pass
224class IWbemClassObject(Structure): pass
225class IWbemContext(Structure): pass
226class IUnknown(Structure): pass
227
228# hack definition of BSTR, needs more complete structure definition
229BSTR = c_char_p
230
231WBEM_FLAG_RETURN_IMMEDIATELY = 0x10
232WBEM_FLAG_ENSURE_LOCATABLE = 0x100
233WBEM_FLAG_FORWARD_ONLY = 0x20
234
235WBEM_S_TIMEDOUT=0x40004
236
237#WERROR IWbemServices_ExecQuery_recv(struct composite_context *c, struct IEnumWbemClassObject **ppEnum);
238library.IWbemServices_ExecQuery_recv.restype = WERROR
239library.IWbemServices_ExecQuery_recv.argtypes = [POINTER(composite_context), POINTER(POINTER(IEnumWbemClassObject))]
240library.IWbemServices_ExecQuery_recv = logFuncCall(library.IWbemServices_ExecQuery_recv)
241
242#WERROR IEnumWbemClassObject_Reset_recv(struct composite_context *c);
243library.IEnumWbemClassObject_Reset_recv.restype = WERROR
244library.IEnumWbemClassObject_Reset_recv.argtypes = [POINTER(composite_context)]
245library.IEnumWbemClassObject_Reset_recv = logFuncCall(library.IEnumWbemClassObject_Reset_recv)
246
247#uint32_t IUnknown_Release_recv(struct composite_context *c);
248library.IUnknown_Release_recv.restype = WERROR
249library.IUnknown_Release_recv.argtypes = [POINTER(composite_context)]
250library.IUnknown_Release_recv = logFuncCall(library.IUnknown_Release_recv)
251
252library.WBEM_ConnectServer.restype = WERROR
253library.WBEM_ConnectServer.argtypes = [POINTER(com_context), c_char_p, c_char_p, c_char_p, c_char_p, c_char_p, c_uint32, c_char_p, POINTER(IWbemContext), c_void_p]
254library.WBEM_ConnectServer = logFuncCall(library.WBEM_ConnectServer)
255library.WBEM_ConnectServer_recv.restype = WERROR
256library.WBEM_ConnectServer_recv.argtypes = [POINTER(composite_context), c_void_p, c_void_p]
257library.WBEM_ConnectServer_recv = logFuncCall(library.WBEM_ConnectServer_recv)
258
259#extern struct composite_context *WBEM_ConnectServer_send(struct com_context *ctx,
260#        TALLOC_CTX *parent_ctx, const char *server, const char *nspace,
261#        const char *user, const char *password, const char *locale,
262#        uint32_t flags, const char *authority, struct IWbemContext* wbem_ctx);
263library.WBEM_ConnectServer_send.restype = POINTER(composite_context)
264library.WBEM_ConnectServer_send.argtypes = [POINTER(com_context), c_void_p, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p, c_uint32, c_char_p, POINTER(IWbemContext)]
265library.WBEM_ConnectServer_send = logFuncCall(library.WBEM_ConnectServer_send)
266
267library.IEnumWbemClassObject_SmartNext_send.restype = POINTER(composite_context)
268library.IEnumWbemClassObject_SmartNext_send.argtypes = [POINTER(IEnumWbemClassObject), c_void_p, c_int32, c_uint32]
269library.IEnumWbemClassObject_SmartNext_send = logFuncCall(library.IEnumWbemClassObject_SmartNext_send)
270library.IEnumWbemClassObject_SmartNext_recv.restype = WERROR
271library.IEnumWbemClassObject_SmartNext_recv.argtypes = [POINTER(composite_context), c_void_p, c_void_p, c_void_p]
272library.IEnumWbemClassObject_SmartNext_recv = logFuncCall(library.IEnumWbemClassObject_SmartNext_recv)
273library.IEnumWbemClassObject_SmartNext.restype = WERROR
274library.IEnumWbemClassObject_SmartNext.argtypes = [POINTER(IEnumWbemClassObject), c_void_p, c_int32, c_uint32, c_void_p, c_void_p]
275library.IEnumWbemClassObject_SmartNext = logFuncCall(library.IEnumWbemClassObject_SmartNext)
276library.wmi_errstr.restype = c_char_p
277library.wmi_errstr.argtypes = [WERROR]
278library.wmi_errstr = logFuncCall(library.wmi_errstr)
279library.IWbemClassObject_GetMethod.restype = WERROR
280library.IWbemClassObject_GetMethod.argtypes = [POINTER(IWbemClassObject), c_void_p, c_char_p, c_uint32, c_void_p, c_void_p]
281library.IWbemClassObject_GetMethod = logFuncCall(library.IWbemClassObject_GetMethod)
282library.IWbemClassObject_SpawnInstance.restype = WERROR
283library.IWbemClassObject_SpawnInstance.argtypes = [POINTER(IWbemClassObject), c_void_p, c_uint32, c_void_p]
284library.IWbemClassObject_SpawnInstance = logFuncCall(library.IWbemClassObject_SpawnInstance)
285library.IWbemClassObject_Put.restype = WERROR
286library.IWbemClassObject_Put.argtypes = [POINTER(IWbemClassObject), c_void_p, c_char_p, c_uint32, POINTER(CIMVAR), enum]
287library.IWbemClassObject_Put = logFuncCall(library.IWbemClassObject_Put)
288library.WbemClassObject_Get.restype = WERROR
289library.WbemClassObject_Get.argtypes = [POINTER(WbemClassObject), c_void_p, c_char_p, c_uint32, POINTER(CIMVAR), enum, c_void_p]
290library.WbemClassObject_Get = logFuncCall(library.WbemClassObject_Get)
291
292library.ConnectAndQuery.restype = WERROR
293library.ConnectAndQuery.argtypes = [POINTER(com_context), c_char_p, c_char_p, c_void_p]
294library.ConnectAndQuery = logFuncCall(library.ConnectAndQuery)
295library.IWbemServices_ExecQuery_send_f.restype = POINTER(composite_context)
296library.IWbemServices_ExecQuery_send_f.argtypes = [POINTER(IWbemServices), c_void_p, BSTR, BSTR, c_int32, POINTER(IWbemContext)]
297library.IWbemServices_ExecQuery_send_f = logFuncCall(library.IWbemServices_ExecQuery_send_f)
298library.IWbemServices_ExecNotificationQuery_send_f.restype = POINTER(composite_context)
299library.IWbemServices_ExecNotificationQuery_send_f.argtypes = [POINTER(IWbemServices), c_void_p, BSTR, BSTR, c_int32, POINTER(IWbemContext)]
300library.IWbemServices_ExecNotificationQuery_send_f = logFuncCall(library.IWbemServices_ExecNotificationQuery_send_f)
301library.IWbemServices_ExecNotificationQuery_recv.restype = WERROR
302library.IWbemServices_ExecNotificationQuery_recv.argtypes = [POINTER(composite_context), POINTER(POINTER(IEnumWbemClassObject))]
303library.IWbemServices_ExecNotificationQuery_recv = logFuncCall(library.IWbemServices_ExecNotificationQuery_recv)
304library.IEnumWbemClassObject_Reset_send_f.restype = POINTER(composite_context)
305library.IEnumWbemClassObject_Reset_send_f.argtypes = [POINTER(IEnumWbemClassObject), c_void_p]
306library.IEnumWbemClassObject_Reset_send_f = logFuncCall(library.IEnumWbemClassObject_Reset_send_f)
307library.IUnknown_Release_send_f.restype = POINTER(composite_context)
308library.IUnknown_Release_send_f.argtypes = [POINTER(IUnknown), c_void_p]
309library.IUnknown_Release_send_f = logFuncCall(library.IUnknown_Release_send_f)
310