From d75375ea451df85d991ead883205e0206682f6f2 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Fri, 15 Jun 2012 15:47:28 +0200 Subject: [PATCH] wbemprox: Add a partial Win32_BIOS class implementation. --- 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 8c6c31393bf..3a4d9f3b61c 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 00000000000..c6879e7e2e3 --- /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 + +#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 d40d7f102b3..551cd201576 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 7e129f0624c..346ed43638b 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;