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