Annotation of embedaddon/smartmontools/os_win32/wmiquery.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * os_win32/wmiquery.h
                      3:  *
                      4:  * Home page of code is: http://smartmontools.sourceforge.net
                      5:  *
                      6:  * Copyright (C) 2011 Christian Franke <smartmontools-support@lists.sourceforge.net>
                      7:  *
                      8:  * This program is free software; you can redistribute it and/or modify
                      9:  * it under the terms of the GNU General Public License as published by
                     10:  * the Free Software Foundation; either version 2, or (at your option)
                     11:  * any later version.
                     12:  *
                     13:  * You should have received a copy of the GNU General Public License
                     14:  * (for example COPYING); If not, see <http://www.gnu.org/licenses/>.
                     15:  *
                     16:  */
                     17: 
                     18: #ifndef WMIQUERY_H
                     19: #define WMIQUERY_H
                     20: 
                     21: #define WMIQUERY_H_CVSID "$Id: wmiquery.h 3243 2011-01-19 20:03:47Z chrfranke $"
                     22: 
                     23: #ifdef HAVE_WBEMCLI_H
                     24: #include <wbemcli.h>
                     25: #else
                     26: #include "wbemcli_small.h"
                     27: #endif
                     28: 
                     29: #include <string>
                     30: 
                     31: #if !defined(__GNUC__) && !defined(__attribute__)
                     32: #define __attribute__(x)  /**/
                     33: #endif
                     34: 
                     35: /////////////////////////////////////////////////////////////////////////////
                     36: // com_bstr
                     37: 
                     38: /// Wrapper class for COM BSTR
                     39: class com_bstr
                     40: {
                     41: public:
                     42:   /// Construct from string.
                     43:   com_bstr(const char * str);
                     44: 
                     45:   /// Destructor frees BSTR.
                     46:   ~com_bstr()
                     47:     { SysFreeString(m_bstr); }
                     48: 
                     49:   /// Implicit conversion to BSTR.
                     50:   operator BSTR()
                     51:     { return m_bstr; }
                     52: 
                     53:   /// Convert BSTR back to std::string.
                     54:   static bool to_str(const BSTR & bstr, std::string & str);
                     55: 
                     56: private:
                     57:   BSTR m_bstr;
                     58: 
                     59:   com_bstr(const com_bstr &);
                     60:   void operator=(const com_bstr &);
                     61: };
                     62: 
                     63: 
                     64: /////////////////////////////////////////////////////////////////////////////
                     65: // com_intf_ptr
                     66: 
                     67: /// Wrapper class for COM Interface pointer
                     68: template <class T>
                     69: class com_intf_ptr
                     70: {
                     71: public:
                     72:   /// Construct empty object
                     73:   com_intf_ptr()
                     74:     : m_ptr(0) { }
                     75: 
                     76:   /// Destructor releases the interface.
                     77:   ~com_intf_ptr()
                     78:     { reset(); }
                     79: 
                     80:   /// Release interface and clear the pointer.
                     81:   void reset()
                     82:     {
                     83:       if (m_ptr) {
                     84:         m_ptr->Release(); m_ptr = 0;
                     85:       }
                     86:     }
                     87: 
                     88:   /// Return the pointer.
                     89:   T * get()
                     90:     { return m_ptr; }
                     91: 
                     92:   /// Pointer dereferencing.
                     93:   T * operator->()
                     94:     { return m_ptr; }
                     95: 
                     96:   /// Return address of pointer for replacement.
                     97:   T * * replace()
                     98:     { reset(); return &m_ptr; }
                     99: 
                    100:   /// For (ptr != 0) check.
                    101:   operator bool() const
                    102:     { return !!m_ptr; }
                    103: 
                    104:   /// For (ptr == 0) check.
                    105:   bool operator!() const
                    106:     { return !m_ptr; }
                    107: 
                    108: private:
                    109:   T * m_ptr;
                    110: 
                    111:   com_intf_ptr(const com_intf_ptr &);
                    112:   void operator=(const com_intf_ptr &);
                    113: };
                    114: 
                    115: 
                    116: /////////////////////////////////////////////////////////////////////////////
                    117: // wbem_object
                    118: 
                    119: class wbem_enumerator;
                    120: 
                    121: /// Wrapper class for IWbemClassObject
                    122: class wbem_object
                    123: {
                    124: public:
                    125:   /// Get string representation.
                    126:   std::string get_str(const char * name) /*const*/;
                    127: 
                    128: private:
                    129:   /// Contents is set by wbem_enumerator.
                    130:   friend class wbem_enumerator;
                    131:   com_intf_ptr<IWbemClassObject> m_intf;
                    132: };
                    133: 
                    134: 
                    135: /////////////////////////////////////////////////////////////////////////////
                    136: // wbem_enumerator
                    137: 
                    138: class wbem_services;
                    139: 
                    140: /// Wrapper class for IEnumWbemClassObject
                    141: class wbem_enumerator
                    142: {
                    143: public:
                    144:   /// Get next object, return false if none or error.
                    145:   bool next(wbem_object & obj);
                    146: 
                    147: private:
                    148:   /// Contents is set by wbem_services.
                    149:   friend class wbem_services;
                    150:   com_intf_ptr<IEnumWbemClassObject> m_intf;
                    151: };
                    152: 
                    153: 
                    154: /////////////////////////////////////////////////////////////////////////////
                    155: // wbem_services
                    156: 
                    157: /// Wrapper class for IWbemServices
                    158: class wbem_services
                    159: {
                    160: public:
                    161:   /// Connect to service, return false on error.
                    162:   bool connect();
                    163: 
                    164:   /// Execute query, get result list.
                    165:   /// Return false on error.
                    166:   bool vquery(wbem_enumerator & result, const char * qstr, va_list args) /*const*/;
                    167: 
                    168:   /// Execute query, get single result object.
                    169:   /// Return false on error or result size != 1.
                    170:   bool vquery1(wbem_object & obj, const char * qstr, va_list args) /*const*/;
                    171: 
                    172:   /// Version of vquery() with printf() formatting.
                    173:   bool query(wbem_enumerator & result, const char * qstr, ...) /*const*/
                    174:        __attribute__ ((format (printf, 3, 4)));
                    175: 
                    176:   /// Version of vquery1() with printf() formatting.
                    177:   bool query1(wbem_object & obj, const char * qstr, ...) /*const*/
                    178:        __attribute__ ((format (printf, 3, 4)));
                    179: 
                    180: private:
                    181:   com_intf_ptr<IWbemServices> m_intf;
                    182: };
                    183: 
                    184: #endif // WMIQUERY_H

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>