[2/4] wbemprox: Add a partial Win32_BIOS class implementation.

Hans Leidekker hans at codeweavers.com
Fri Jun 15 08:47:28 CDT 2012


---
 dlls/wbemprox/Makefile.in        |    1 +
 dlls/wbemprox/builtin.c          |   98 ++++++++++++++++++++++++++++++++++++++
 dlls/wbemprox/query.c            |    1 +
 dlls/wbemprox/wbemprox_private.h |   18 +++++++
 4 files changed, 118 insertions(+)
 create mode 100644 dlls/wbemprox/builtin.c

diff --git a/dlls/wbemprox/Makefile.in b/dlls/wbemprox/Makefile.in
index 8c6c313..3a4d9f3 100644
--- a/dlls/wbemprox/Makefile.in
+++ b/dlls/wbemprox/Makefile.in
@@ -2,6 +2,7 @@ MODULE    = wbemprox.dll
 IMPORTS   = ole32 advapi32
 
 C_SRCS = \
+	builtin.c \
 	class.c \
 	main.c \
 	query.c \
diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c
new file mode 100644
index 0000000..c6879e7
--- /dev/null
+++ b/dlls/wbemprox/builtin.c
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2012 Hans Leidekker for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+
+#include "config.h"
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wbemcli.h"
+
+#include "wine/debug.h"
+#include "wbemprox_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
+
+static const WCHAR class_biosW[] =
+    {'W','i','n','3','2','_','B','I','O','S',0};
+
+static const WCHAR prop_captionW[] =
+    {'C','a','p','t','i','o','n',0};
+static const WCHAR prop_descriptionW[] =
+    {'D','e','s','c','r','i','p','t','i','o','n',0};
+static const WCHAR prop_manufacturerW[] =
+    {'M','a','n','u','f','a','c','t','u','r','e','r',0};
+static const WCHAR prop_releasedateW[] =
+    {'R','e','l','e','a','s','e','D','a','t','e',0};
+static const WCHAR prop_serialnumberW[] =
+    {'S','e','r','i','a','l','N','u','m','b','e','r',0};
+
+static const struct column col_bios[] =
+{
+    { prop_descriptionW,  CIM_STRING },
+    { prop_manufacturerW, CIM_STRING },
+    { prop_releasedateW,  CIM_DATETIME },
+    { prop_serialnumberW, CIM_STRING }
+};
+
+static const WCHAR bios_descriptionW[] =
+    {'D','e','f','a','u','l','t',' ','S','y','s','t','e','m',' ','B','I','O','S',0};
+static const WCHAR bios_manufacturerW[] =
+    {'T','h','e',' ','W','i','n','e',' ','P','r','o','j','e','c','t',0};
+static const WCHAR bios_releasedateW[] =
+    {'2','0','1','2','0','6','0','8','0','0','0','0','0','0','.','0','0','0','0','0','0','+','0','0','0',0};
+static const WCHAR bios_serialnumberW[] =
+    {'0',0};
+
+#include "pshpack1.h"
+struct record_bios
+{
+    const WCHAR *description;
+    const WCHAR *manufacturer;
+    const WCHAR *releasedate;
+    const WCHAR *serialnumber;
+};
+#include "poppack.h"
+
+static const struct record_bios data_bios[] =
+{
+    { bios_descriptionW, bios_manufacturerW, bios_releasedateW, bios_serialnumberW }
+};
+
+static struct table classtable[] =
+{
+    { class_biosW, SIZEOF(col_bios), col_bios, SIZEOF(data_bios), (BYTE *)data_bios }
+};
+
+struct table *get_table( const WCHAR *name )
+{
+    UINT i;
+    struct table *table = NULL;
+
+    for (i = 0; i < SIZEOF(classtable); i++)
+    {
+        if (!strcmpiW( classtable[i].name, name ))
+        {
+            table = &classtable[i];
+            break;
+        }
+    }
+    return table;
+}
diff --git a/dlls/wbemprox/query.c b/dlls/wbemprox/query.c
index d40d7f1..551cd20 100644
--- a/dlls/wbemprox/query.c
+++ b/dlls/wbemprox/query.c
@@ -37,6 +37,7 @@ HRESULT create_view( const struct property *proplist, const WCHAR *class,
 
     if (!view) return E_OUTOFMEMORY;
     view->proplist = proplist;
+    view->table    = get_table( class );
     view->cond     = cond;
     *ret = view;
     return S_OK;
diff --git a/dlls/wbemprox/wbemprox_private.h b/dlls/wbemprox/wbemprox_private.h
index 7e129f0..346ed43 100644
--- a/dlls/wbemprox/wbemprox_private.h
+++ b/dlls/wbemprox/wbemprox_private.h
@@ -17,9 +17,25 @@
  */
 
 #include "wine/list.h"
+#include "wine/unicode.h"
 
 #define SIZEOF(array) (sizeof(array)/sizeof((array)[0]))
 
+struct column
+{
+    const WCHAR *name;
+    CIMTYPE_ENUMERATION type;
+};
+
+struct table
+{
+    const WCHAR *name;
+    UINT num_cols;
+    const struct column *columns;
+    UINT num_rows;
+    BYTE *data;
+};
+
 struct property
 {
     const WCHAR *name;
@@ -75,6 +91,7 @@ struct expr
 struct view
 {
     const struct property *proplist;
+    struct table *table;
     const struct expr *cond;
 };
 
@@ -90,6 +107,7 @@ HRESULT parse_query( const WCHAR *, struct view **, struct list * ) DECLSPEC_HID
 HRESULT create_view( const struct property *, const WCHAR *, const struct expr *,
                      struct view ** ) DECLSPEC_HIDDEN;
 void destroy_view( struct view * ) DECLSPEC_HIDDEN;
+struct table *get_table( const WCHAR * ) DECLSPEC_HIDDEN;
 
 HRESULT WbemLocator_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN;
 HRESULT WbemServices_create(IUnknown *, LPVOID *) DECLSPEC_HIDDEN;
-- 
1.7.10







More information about the wine-patches mailing list