Annotation of embedaddon/smartmontools/os_win32/wmiquery.h, revision 1.1.1.2
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:
1.1.1.2 ! misho 21: #define WMIQUERY_H_CVSID "$Id: wmiquery.h 3475 2011-11-10 21:43:40Z chrfranke $"
1.1 misho 22:
23: #ifdef HAVE_WBEMCLI_H
24: #include <wbemcli.h>
25: #else
26: #include "wbemcli_small.h"
27: #endif
28:
29: #include <string>
30:
1.1.1.2 ! misho 31: #ifndef __GNUC__
! 32: #define __attribute_format_printf(x, y) /**/
! 33: #elif defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO
! 34: // Check format of __mingw_*printf() instead of MSVCRT.DLL:*printf()
! 35: #define __attribute_format_printf(x, y) __attribute__((format (gnu_printf, x, y)))
! 36: #else
! 37: #define __attribute_format_printf(x, y) __attribute__((format (printf, x, y)))
1.1 misho 38: #endif
39:
40: /////////////////////////////////////////////////////////////////////////////
41: // com_bstr
42:
43: /// Wrapper class for COM BSTR
44: class com_bstr
45: {
46: public:
47: /// Construct from string.
48: com_bstr(const char * str);
49:
50: /// Destructor frees BSTR.
51: ~com_bstr()
52: { SysFreeString(m_bstr); }
53:
54: /// Implicit conversion to BSTR.
55: operator BSTR()
56: { return m_bstr; }
57:
58: /// Convert BSTR back to std::string.
59: static bool to_str(const BSTR & bstr, std::string & str);
60:
61: private:
62: BSTR m_bstr;
63:
64: com_bstr(const com_bstr &);
65: void operator=(const com_bstr &);
66: };
67:
68:
69: /////////////////////////////////////////////////////////////////////////////
70: // com_intf_ptr
71:
72: /// Wrapper class for COM Interface pointer
73: template <class T>
74: class com_intf_ptr
75: {
76: public:
77: /// Construct empty object
78: com_intf_ptr()
79: : m_ptr(0) { }
80:
81: /// Destructor releases the interface.
82: ~com_intf_ptr()
83: { reset(); }
84:
85: /// Release interface and clear the pointer.
86: void reset()
87: {
88: if (m_ptr) {
89: m_ptr->Release(); m_ptr = 0;
90: }
91: }
92:
93: /// Return the pointer.
94: T * get()
95: { return m_ptr; }
96:
97: /// Pointer dereferencing.
98: T * operator->()
99: { return m_ptr; }
100:
101: /// Return address of pointer for replacement.
102: T * * replace()
103: { reset(); return &m_ptr; }
104:
105: /// For (ptr != 0) check.
106: operator bool() const
107: { return !!m_ptr; }
108:
109: /// For (ptr == 0) check.
110: bool operator!() const
111: { return !m_ptr; }
112:
113: private:
114: T * m_ptr;
115:
116: com_intf_ptr(const com_intf_ptr &);
117: void operator=(const com_intf_ptr &);
118: };
119:
120:
121: /////////////////////////////////////////////////////////////////////////////
122: // wbem_object
123:
124: class wbem_enumerator;
125:
126: /// Wrapper class for IWbemClassObject
127: class wbem_object
128: {
129: public:
130: /// Get string representation.
131: std::string get_str(const char * name) /*const*/;
132:
133: private:
134: /// Contents is set by wbem_enumerator.
135: friend class wbem_enumerator;
136: com_intf_ptr<IWbemClassObject> m_intf;
137: };
138:
139:
140: /////////////////////////////////////////////////////////////////////////////
141: // wbem_enumerator
142:
143: class wbem_services;
144:
145: /// Wrapper class for IEnumWbemClassObject
146: class wbem_enumerator
147: {
148: public:
149: /// Get next object, return false if none or error.
150: bool next(wbem_object & obj);
151:
152: private:
153: /// Contents is set by wbem_services.
154: friend class wbem_services;
155: com_intf_ptr<IEnumWbemClassObject> m_intf;
156: };
157:
158:
159: /////////////////////////////////////////////////////////////////////////////
160: // wbem_services
161:
162: /// Wrapper class for IWbemServices
163: class wbem_services
164: {
165: public:
166: /// Connect to service, return false on error.
167: bool connect();
168:
169: /// Execute query, get result list.
170: /// Return false on error.
171: bool vquery(wbem_enumerator & result, const char * qstr, va_list args) /*const*/;
172:
173: /// Execute query, get single result object.
174: /// Return false on error or result size != 1.
175: bool vquery1(wbem_object & obj, const char * qstr, va_list args) /*const*/;
176:
177: /// Version of vquery() with printf() formatting.
178: bool query(wbem_enumerator & result, const char * qstr, ...) /*const*/
1.1.1.2 ! misho 179: __attribute_format_printf(3, 4);
1.1 misho 180:
181: /// Version of vquery1() with printf() formatting.
182: bool query1(wbem_object & obj, const char * qstr, ...) /*const*/
1.1.1.2 ! misho 183: __attribute_format_printf(3, 4);
1.1 misho 184:
185: private:
186: com_intf_ptr<IWbemServices> m_intf;
187: };
188:
189: #endif // WMIQUERY_H
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>