Annotation of embedaddon/smartmontools/os_win32/wmiquery.h, revision 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>