mirror of
https://github.com/reactos/reactos.git
synced 2025-04-04 12:39:35 +00:00
* Revert r73869 because wmi was mentioned nowhere in CORE-9111, nor in our tree restructure wiki, nor any developers discussions. This is the ReactOS trunk, not a branch.
svn path=/trunk/; revision=73870
This commit is contained in:
parent
9f59e28a23
commit
79111c35e6
75 changed files with 18998 additions and 10 deletions
|
@ -4,4 +4,3 @@ add_subdirectory(services)
|
|||
add_subdirectory(setup)
|
||||
add_subdirectory(shell)
|
||||
add_subdirectory(system)
|
||||
add_subdirectory(wmi)
|
||||
|
|
|
@ -9,6 +9,7 @@ add_subdirectory(help)
|
|||
add_subdirectory(hostname)
|
||||
add_subdirectory(lodctr)
|
||||
add_subdirectory(mode)
|
||||
add_subdirectory(mofcomp)
|
||||
add_subdirectory(more)
|
||||
add_subdirectory(reg)
|
||||
add_subdirectory(schtasks)
|
||||
|
@ -16,5 +17,6 @@ add_subdirectory(sort)
|
|||
add_subdirectory(taskkill)
|
||||
add_subdirectory(tree)
|
||||
add_subdirectory(whoami)
|
||||
add_subdirectory(wmic)
|
||||
add_subdirectory(wscript)
|
||||
add_subdirectory(xcopy)
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
add_executable(mofcomp mofcomp.c)
|
||||
target_link_libraries(mofcomp wine)
|
||||
set_module_type(mofcomp win32cui UNICODE)
|
||||
add_importlibs(mofcomp msvcrt kernel32 ntdll)
|
||||
add_cd_file(TARGET mofcomp DESTINATION reactos/system32/wbem FOR all)
|
29
reactos/base/applications/cmdutils/mofcomp/mofcomp.c
Normal file
29
reactos/base/applications/cmdutils/mofcomp/mofcomp.c
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Copyright 2010 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 WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
#include <wine/debug.h>
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mofcomp);
|
||||
|
||||
int wmain( int argc, const WCHAR *argv[] )
|
||||
{
|
||||
WINE_FIXME("stub\n");
|
||||
return 0;
|
||||
}
|
6
reactos/base/applications/cmdutils/wmic/CMakeLists.txt
Normal file
6
reactos/base/applications/cmdutils/wmic/CMakeLists.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
|
||||
add_executable(wmic main.c wmic.rc)
|
||||
target_link_libraries(wmic wine)
|
||||
set_module_type(wmic win32cui UNICODE)
|
||||
add_importlibs(wmic oleaut32 ole32 user32 msvcrt kernel32 ntdll)
|
||||
add_cd_file(TARGET wmic DESTINATION reactos/system32/wbem FOR all)
|
9
reactos/base/applications/cmdutils/wmic/lang/de-DE.rc
Normal file
9
reactos/base/applications/cmdutils/wmic/lang/de-DE.rc
Normal file
|
@ -0,0 +1,9 @@
|
|||
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_CMDLINE_NOT_SUPPORTED, "Fehler: Befehlszeile nicht unterstützt\n"
|
||||
STRING_ALIAS_NOT_FOUND, "Fehler: Alias nicht gefunden\n"
|
||||
STRING_INVALID_QUERY, "Fehler: Ungültige Abfrage\n"
|
||||
STRING_INVALID_PATH, "Invalid syntax for PATH\n"
|
||||
}
|
9
reactos/base/applications/cmdutils/wmic/lang/en-US.rc
Normal file
9
reactos/base/applications/cmdutils/wmic/lang/en-US.rc
Normal file
|
@ -0,0 +1,9 @@
|
|||
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_CMDLINE_NOT_SUPPORTED, "Error: Command line not supported\n"
|
||||
STRING_ALIAS_NOT_FOUND, "Error: Alias not found\n"
|
||||
STRING_INVALID_QUERY, "Error: Invalid query\n"
|
||||
STRING_INVALID_PATH, "Invalid syntax for PATH\n"
|
||||
}
|
11
reactos/base/applications/cmdutils/wmic/lang/ro-RO.rc
Normal file
11
reactos/base/applications/cmdutils/wmic/lang/ro-RO.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* Translator: Ștefan Fulea (stefan dot fulea at mail dot md) */
|
||||
|
||||
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_CMDLINE_NOT_SUPPORTED, "Eroare: Comandă nerecunoscută.\n"
|
||||
STRING_ALIAS_NOT_FOUND, "Eroare: Alias necunoscut.\n"
|
||||
STRING_INVALID_QUERY, "Eroare: Cerere nevalidă.\n"
|
||||
STRING_INVALID_PATH, "Conținutul din «PATH» este sintactic nevalid.\n"
|
||||
}
|
9
reactos/base/applications/cmdutils/wmic/lang/ru-RU.rc
Normal file
9
reactos/base/applications/cmdutils/wmic/lang/ru-RU.rc
Normal file
|
@ -0,0 +1,9 @@
|
|||
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_CMDLINE_NOT_SUPPORTED, "Ошибка: Командная строка не поддерживается\n"
|
||||
STRING_ALIAS_NOT_FOUND, "Ошибка: Псевдоним не найден\n"
|
||||
STRING_INVALID_QUERY, "Ошибка: Неверный запрос\n"
|
||||
STRING_INVALID_PATH, "Неверный синтаксис PATH\n"
|
||||
}
|
13
reactos/base/applications/cmdutils/wmic/lang/sq-AL.rc
Normal file
13
reactos/base/applications/cmdutils/wmic/lang/sq-AL.rc
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* TRANSLATOR : Ardit Dani (Ard1t) (ardit.dani@gmail.com)
|
||||
* DATE OF TR: 29-11-2013
|
||||
*/
|
||||
|
||||
LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_CMDLINE_NOT_SUPPORTED, "Gabim: Linja e komandave jo e mbështetur\n"
|
||||
STRING_ALIAS_NOT_FOUND, "Gabim: Pseudonimi nuk u gjend\n"
|
||||
STRING_INVALID_QUERY, "Gabim: Kërkim pa vlere\n"
|
||||
STRING_INVALID_PATH, "Invalid syntax for PATH\n"
|
||||
}
|
11
reactos/base/applications/cmdutils/wmic/lang/tr-TR.rc
Normal file
11
reactos/base/applications/cmdutils/wmic/lang/tr-TR.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
|
||||
|
||||
LANGUAGE LANG_TURKISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_CMDLINE_NOT_SUPPORTED, "Yanlışlık: Komut yatacı desteklenmiyor\n"
|
||||
STRING_ALIAS_NOT_FOUND, "Yanlışlık: Başka ad bulunamadı\n"
|
||||
STRING_INVALID_QUERY, "Yanlışlık: Geçersiz sorgu\n"
|
||||
STRING_INVALID_PATH, "YOL için geçersiz söz dizimi.\n"
|
||||
}
|
11
reactos/base/applications/cmdutils/wmic/lang/zh-CN.rc
Normal file
11
reactos/base/applications/cmdutils/wmic/lang/zh-CN.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* Simplified Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_CMDLINE_NOT_SUPPORTED, "错误: 不支持的命令行\n"
|
||||
STRING_ALIAS_NOT_FOUND, "错误: 别名未找到\n"
|
||||
STRING_INVALID_QUERY, "错误: 无效的查询\n"
|
||||
STRING_INVALID_PATH, "Invalid syntax for PATH\n"
|
||||
}
|
11
reactos/base/applications/cmdutils/wmic/lang/zh-TW.rc
Normal file
11
reactos/base/applications/cmdutils/wmic/lang/zh-TW.rc
Normal file
|
@ -0,0 +1,11 @@
|
|||
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
|
||||
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
|
||||
|
||||
STRINGTABLE
|
||||
{
|
||||
STRING_CMDLINE_NOT_SUPPORTED, "錯誤: 不支援的命令列\n"
|
||||
STRING_ALIAS_NOT_FOUND, "錯誤: 別名未找到\n"
|
||||
STRING_INVALID_QUERY, "錯誤: 無效的查詢\n"
|
||||
STRING_INVALID_PATH, "Invalid syntax for PATH\n"
|
||||
}
|
313
reactos/base/applications/cmdutils/wmic/main.c
Normal file
313
reactos/base/applications/cmdutils/wmic/main.c
Normal file
|
@ -0,0 +1,313 @@
|
|||
/*
|
||||
* Copyright 2010 Louis Lenders
|
||||
* 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 <stdio.h>
|
||||
//#include "windows.h"
|
||||
//#include "ocidl.h"
|
||||
#include <initguid.h>
|
||||
//#include "objidl.h"
|
||||
#include <wbemcli.h>
|
||||
#include "wmic.h"
|
||||
|
||||
#include <wine/debug.h>
|
||||
#include <wine/unicode.h>
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wmic);
|
||||
|
||||
static const WCHAR biosW[] =
|
||||
{'b','i','o','s',0};
|
||||
static const WCHAR computersystemW[] =
|
||||
{'c','o','m','p','u','t','e','r','s','y','s','t','e','m',0};
|
||||
static const WCHAR cpuW[] =
|
||||
{'c','p','u',0};
|
||||
static const WCHAR logicaldiskW[] =
|
||||
{'L','o','g','i','c','a','l','D','i','s','k',0};
|
||||
static const WCHAR nicW[] =
|
||||
{'n','i','c',0};
|
||||
static const WCHAR osW[] =
|
||||
{'o','s',0};
|
||||
static const WCHAR processW[] =
|
||||
{'p','r','o','c','e','s','s',0};
|
||||
|
||||
static const WCHAR win32_biosW[] =
|
||||
{'W','i','n','3','2','_','B','I','O','S',0};
|
||||
static const WCHAR win32_computersystemW[] =
|
||||
{'W','i','n','3','2','_','C','o','m','p','u','t','e','r','S','y','s','t','e','m',0};
|
||||
static const WCHAR win32_logicaldiskW[] =
|
||||
{'W','i','n','3','2','_','L','o','g','i','c','a','l','D','i','s','k',0};
|
||||
static const WCHAR win32_networkadapterW[] =
|
||||
{'W','i','n','3','2','_','N','e','t','w','o','r','k','A','d','a','p','t','e','r',0};
|
||||
static const WCHAR win32_operatingsystemW[] =
|
||||
{'W','i','n','3','2','_','O','p','e','r','a','t','i','n','g','S','y','s','t','e','m',0};
|
||||
static const WCHAR win32_processW[] =
|
||||
{'W','i','n','3','2','_','P','r','o','c','e','s','s',0};
|
||||
static const WCHAR win32_processorW[] =
|
||||
{'W','i','n','3','2','_','P','r','o','c','e','s','s','o','r',0};
|
||||
|
||||
static const struct
|
||||
{
|
||||
const WCHAR *alias;
|
||||
const WCHAR *class;
|
||||
}
|
||||
alias_map[] =
|
||||
{
|
||||
{ biosW, win32_biosW },
|
||||
{ computersystemW, win32_computersystemW },
|
||||
{ cpuW, win32_processorW },
|
||||
{ logicaldiskW, win32_logicaldiskW },
|
||||
{ nicW, win32_networkadapterW },
|
||||
{ osW, win32_operatingsystemW },
|
||||
{ processW, win32_processW }
|
||||
};
|
||||
|
||||
static const WCHAR *find_class( const WCHAR *alias )
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < sizeof(alias_map)/sizeof(alias_map[0]); i++)
|
||||
{
|
||||
if (!strcmpiW( alias, alias_map[i].alias )) return alias_map[i].class;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline WCHAR *strdupW( const WCHAR *src )
|
||||
{
|
||||
WCHAR *dst;
|
||||
if (!src) return NULL;
|
||||
if (!(dst = HeapAlloc( GetProcessHeap(), 0, (strlenW( src ) + 1) * sizeof(WCHAR) ))) return NULL;
|
||||
strcpyW( dst, src );
|
||||
return dst;
|
||||
}
|
||||
|
||||
static WCHAR *find_prop( IWbemClassObject *class, const WCHAR *prop )
|
||||
{
|
||||
SAFEARRAY *sa;
|
||||
WCHAR *ret = NULL;
|
||||
LONG i, last_index = 0;
|
||||
BSTR str;
|
||||
|
||||
if (IWbemClassObject_GetNames( class, NULL, WBEM_FLAG_ALWAYS, NULL, &sa ) != S_OK) return NULL;
|
||||
|
||||
SafeArrayGetUBound( sa, 1, &last_index );
|
||||
for (i = 0; i <= last_index; i++)
|
||||
{
|
||||
SafeArrayGetElement( sa, &i, &str );
|
||||
if (!strcmpiW( str, prop ))
|
||||
{
|
||||
ret = strdupW( str );
|
||||
break;
|
||||
}
|
||||
}
|
||||
SafeArrayDestroy( sa );
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int output_string( const WCHAR *msg, ... )
|
||||
{
|
||||
va_list va_args;
|
||||
int wlen;
|
||||
DWORD count, ret;
|
||||
WCHAR buffer[8192];
|
||||
|
||||
va_start( va_args, msg );
|
||||
vsprintfW( buffer, msg, va_args );
|
||||
va_end( va_args );
|
||||
|
||||
wlen = strlenW( buffer );
|
||||
ret = WriteConsoleW( GetStdHandle(STD_OUTPUT_HANDLE), buffer, wlen, &count, NULL );
|
||||
if (!ret)
|
||||
{
|
||||
DWORD len;
|
||||
char *msgA;
|
||||
|
||||
/* On Windows WriteConsoleW() fails if the output is redirected. So fall
|
||||
* back to WriteFile(), assuming the console encoding is still the right
|
||||
* one in that case.
|
||||
*/
|
||||
len = WideCharToMultiByte( GetConsoleOutputCP(), 0, buffer, wlen, NULL, 0, NULL, NULL );
|
||||
if (!(msgA = HeapAlloc( GetProcessHeap(), 0, len * sizeof(char) ))) return 0;
|
||||
|
||||
WideCharToMultiByte( GetConsoleOutputCP(), 0, buffer, wlen, msgA, len, NULL, NULL );
|
||||
WriteFile( GetStdHandle(STD_OUTPUT_HANDLE), msgA, len, &count, FALSE );
|
||||
HeapFree( GetProcessHeap(), 0, msgA );
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static int output_message( int msg )
|
||||
{
|
||||
static const WCHAR fmtW[] = {'%','s',0};
|
||||
WCHAR buffer[8192];
|
||||
|
||||
LoadStringW( GetModuleHandleW(NULL), msg, buffer, sizeof(buffer)/sizeof(WCHAR) );
|
||||
return output_string( fmtW, buffer );
|
||||
}
|
||||
|
||||
static int query_prop( const WCHAR *class, const WCHAR *propname )
|
||||
{
|
||||
static const WCHAR select_allW[] = {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',0};
|
||||
static const WCHAR cimv2W[] = {'R','O','O','T','\\','C','I','M','V','2',0};
|
||||
static const WCHAR wqlW[] = {'W','Q','L',0};
|
||||
static const WCHAR newlineW[] = {'\n',0};
|
||||
static const WCHAR fmtW[] = {'%','s','\n',0};
|
||||
HRESULT hr;
|
||||
IWbemLocator *locator = NULL;
|
||||
IWbemServices *services = NULL;
|
||||
IEnumWbemClassObject *result = NULL;
|
||||
LONG flags = WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY;
|
||||
BSTR path = NULL, wql = NULL, query = NULL;
|
||||
WCHAR *prop = NULL;
|
||||
BOOL first = TRUE;
|
||||
int len, ret = -1;
|
||||
|
||||
WINE_TRACE("%s, %s\n", debugstr_w(class), debugstr_w(propname));
|
||||
|
||||
CoInitialize( NULL );
|
||||
CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,
|
||||
RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL );
|
||||
|
||||
hr = CoCreateInstance( &CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER, &IID_IWbemLocator,
|
||||
(void **)&locator );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
if (!(path = SysAllocString( cimv2W ))) goto done;
|
||||
hr = IWbemLocator_ConnectServer( locator, path, NULL, NULL, NULL, 0, NULL, NULL, &services );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
len = strlenW( class ) + sizeof(select_allW) / sizeof(select_allW[0]);
|
||||
if (!(query = SysAllocStringLen( NULL, len ))) goto done;
|
||||
strcpyW( query, select_allW );
|
||||
strcatW( query, class );
|
||||
|
||||
if (!(wql = SysAllocString( wqlW ))) goto done;
|
||||
hr = IWbemServices_ExecQuery( services, wql, query, flags, NULL, &result );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
IWbemClassObject *obj;
|
||||
ULONG count;
|
||||
VARIANT v;
|
||||
|
||||
IEnumWbemClassObject_Next( result, WBEM_INFINITE, 1, &obj, &count );
|
||||
if (!count) break;
|
||||
|
||||
if (first)
|
||||
{
|
||||
if (!(prop = find_prop( obj, propname )))
|
||||
{
|
||||
output_message( STRING_INVALID_QUERY );
|
||||
goto done;
|
||||
}
|
||||
output_string( fmtW, prop );
|
||||
first = FALSE;
|
||||
}
|
||||
if (IWbemClassObject_Get( obj, prop, 0, &v, NULL, NULL ) == WBEM_S_NO_ERROR)
|
||||
{
|
||||
VariantChangeType( &v, &v, 0, VT_BSTR );
|
||||
output_string( fmtW, V_BSTR( &v ) );
|
||||
VariantClear( &v );
|
||||
}
|
||||
IWbemClassObject_Release( obj );
|
||||
}
|
||||
output_string( newlineW );
|
||||
ret = 0;
|
||||
|
||||
done:
|
||||
if (result) IEnumWbemClassObject_Release( result );
|
||||
if (services) IWbemServices_Release( services );
|
||||
if (locator) IWbemLocator_Release( locator );
|
||||
SysFreeString( path );
|
||||
SysFreeString( query );
|
||||
SysFreeString( wql );
|
||||
HeapFree( GetProcessHeap(), 0, prop );
|
||||
CoUninitialize();
|
||||
return ret;
|
||||
}
|
||||
|
||||
int wmain(int argc, WCHAR *argv[])
|
||||
{
|
||||
static const WCHAR getW[] = {'g','e','t',0};
|
||||
static const WCHAR quitW[] = {'q','u','i','t',0};
|
||||
static const WCHAR exitW[] = {'e','x','i','t',0};
|
||||
static const WCHAR pathW[] = {'p','a','t','h',0};
|
||||
static const WCHAR classW[] = {'c','l','a','s','s',0};
|
||||
static const WCHAR contextW[] = {'c','o','n','t','e','x','t',0};
|
||||
|
||||
const WCHAR *class;
|
||||
const WCHAR *value;
|
||||
int i;
|
||||
|
||||
if (argc == 1)
|
||||
goto not_supported;
|
||||
|
||||
for (i = 1; i < argc && argv[i][0] == '/'; i++)
|
||||
WINE_FIXME("command line switch %s not supported\n", debugstr_w(argv[i]));
|
||||
|
||||
if (i >= argc)
|
||||
goto not_supported;
|
||||
|
||||
if (!strcmpiW( argv[i], quitW ) ||
|
||||
!strcmpiW( argv[i], exitW ))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if (!strcmpiW( argv[i], classW) ||
|
||||
!strcmpiW( argv[i], contextW))
|
||||
{
|
||||
WINE_FIXME("command %s not supported\n", debugstr_w(argv[i]));
|
||||
goto not_supported;
|
||||
}
|
||||
else if (!strcmpiW( argv[i], pathW))
|
||||
{
|
||||
if (++i >= argc)
|
||||
{
|
||||
output_message( STRING_INVALID_PATH );
|
||||
return 1;
|
||||
}
|
||||
class = argv[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
class = find_class( argv[i] );
|
||||
if (!class)
|
||||
{
|
||||
output_message( STRING_ALIAS_NOT_FOUND );
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (++i >= argc)
|
||||
goto not_supported;
|
||||
|
||||
if (!strcmpiW( argv[i], getW))
|
||||
{
|
||||
if (++i >= argc)
|
||||
goto not_supported;
|
||||
value = argv[i];
|
||||
return query_prop( class, value );
|
||||
}
|
||||
|
||||
not_supported:
|
||||
output_message( STRING_CMDLINE_NOT_SUPPORTED );
|
||||
return 1;
|
||||
}
|
24
reactos/base/applications/cmdutils/wmic/wmic.h
Normal file
24
reactos/base/applications/cmdutils/wmic/wmic.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include <windef.h>
|
||||
|
||||
#define STRING_CMDLINE_NOT_SUPPORTED 101
|
||||
#define STRING_ALIAS_NOT_FOUND 102
|
||||
#define STRING_INVALID_QUERY 103
|
||||
#define STRING_INVALID_PATH 104
|
54
reactos/base/applications/cmdutils/wmic/wmic.rc
Normal file
54
reactos/base/applications/cmdutils/wmic/wmic.rc
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "wmic.h"
|
||||
|
||||
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS WMI command line"
|
||||
#define REACTOS_STR_INTERNAL_NAME "wmic"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "wmic.exe"
|
||||
#include <reactos/version.rc>
|
||||
|
||||
/* UTF-8 */
|
||||
#pragma code_page(65001)
|
||||
|
||||
#ifdef LANGUAGE_DE_DE
|
||||
#include "lang/de-DE.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_EN_US
|
||||
#include "lang/en-US.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RO_RO
|
||||
#include "lang/ro-RO.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_RU_RU
|
||||
#include "lang/ru-RU.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_SQ_AL
|
||||
#include "lang/sq-AL.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_TR_TR
|
||||
#include "lang/tr-TR.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_CN
|
||||
#include "lang/zh-CN.rc"
|
||||
#endif
|
||||
#ifdef LANGUAGE_ZH_TW
|
||||
#include "lang/zh-TW.rc"
|
||||
#endif
|
|
@ -13,3 +13,4 @@ add_subdirectory(thmsvc)
|
|||
add_subdirectory(umpnpmgr)
|
||||
add_subdirectory(wkssvc)
|
||||
add_subdirectory(wlansvc)
|
||||
add_subdirectory(wmisvc)
|
||||
|
|
10
reactos/base/services/wmisvc/CMakeLists.txt
Normal file
10
reactos/base/services/wmisvc/CMakeLists.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
spec2def(wmisvc.dll wmisvc.spec ADD_IMPORTLIB)
|
||||
|
||||
add_library(wmisvc SHARED
|
||||
wmisvc.c
|
||||
wmisvc.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/wmisvc.def)
|
||||
|
||||
set_module_type(wmisvc win32dll UNICODE)
|
||||
add_importlibs(wmisvc advapi32 msvcrt kernel32 ntdll)
|
||||
add_cd_file(TARGET wmisvc DESTINATION reactos/system32/wbem FOR all)
|
157
reactos/base/services/wmisvc/wmisvc.c
Normal file
157
reactos/base/services/wmisvc/wmisvc.c
Normal file
|
@ -0,0 +1,157 @@
|
|||
/*
|
||||
* ReactOS Services
|
||||
* Copyright (C) 2015 ReactOS Team
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS Services
|
||||
* FILE: base/services/wmisvc/wmisvc.c
|
||||
* PURPOSE: WMI service
|
||||
* PROGRAMMER: Pierre Schweitzer
|
||||
*/
|
||||
|
||||
/* INCLUDES *****************************************************************/
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#define _INC_WINDOWS
|
||||
#define COM_NO_WINDOWS_H
|
||||
#include <stdarg.h>
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winreg.h>
|
||||
#include <winsvc.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
/* GLOBALS ******************************************************************/
|
||||
|
||||
static WCHAR ServiceName[] = L"winmgmt";
|
||||
|
||||
static SERVICE_STATUS_HANDLE ServiceStatusHandle;
|
||||
static SERVICE_STATUS ServiceStatus;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
static VOID
|
||||
UpdateServiceStatus(DWORD dwState)
|
||||
{
|
||||
ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
|
||||
ServiceStatus.dwCurrentState = dwState;
|
||||
ServiceStatus.dwControlsAccepted = 0;
|
||||
ServiceStatus.dwWin32ExitCode = 0;
|
||||
ServiceStatus.dwServiceSpecificExitCode = 0;
|
||||
ServiceStatus.dwCheckPoint = 0;
|
||||
|
||||
if (dwState == SERVICE_START_PENDING ||
|
||||
dwState == SERVICE_STOP_PENDING ||
|
||||
dwState == SERVICE_PAUSE_PENDING ||
|
||||
dwState == SERVICE_CONTINUE_PENDING)
|
||||
ServiceStatus.dwWaitHint = 10000;
|
||||
else
|
||||
ServiceStatus.dwWaitHint = 0;
|
||||
|
||||
SetServiceStatus(ServiceStatusHandle,
|
||||
&ServiceStatus);
|
||||
}
|
||||
|
||||
static DWORD WINAPI
|
||||
ServiceControlHandler(DWORD dwControl,
|
||||
DWORD dwEventType,
|
||||
LPVOID lpEventData,
|
||||
LPVOID lpContext)
|
||||
{
|
||||
DPRINT1("ServiceControlHandler() called\n");
|
||||
|
||||
switch (dwControl)
|
||||
{
|
||||
case SERVICE_CONTROL_STOP:
|
||||
DPRINT1(" SERVICE_CONTROL_STOP received\n");
|
||||
UpdateServiceStatus(SERVICE_STOPPED);
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
case SERVICE_CONTROL_PAUSE:
|
||||
DPRINT1(" SERVICE_CONTROL_PAUSE received\n");
|
||||
UpdateServiceStatus(SERVICE_PAUSED);
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
case SERVICE_CONTROL_CONTINUE:
|
||||
DPRINT1(" SERVICE_CONTROL_CONTINUE received\n");
|
||||
UpdateServiceStatus(SERVICE_RUNNING);
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
case SERVICE_CONTROL_INTERROGATE:
|
||||
DPRINT1(" SERVICE_CONTROL_INTERROGATE received\n");
|
||||
SetServiceStatus(ServiceStatusHandle,
|
||||
&ServiceStatus);
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
case SERVICE_CONTROL_SHUTDOWN:
|
||||
DPRINT1(" SERVICE_CONTROL_SHUTDOWN received\n");
|
||||
UpdateServiceStatus(SERVICE_STOPPED);
|
||||
return ERROR_SUCCESS;
|
||||
|
||||
default :
|
||||
DPRINT1(" Control %lu received\n");
|
||||
return ERROR_CALL_NOT_IMPLEMENTED;
|
||||
}
|
||||
}
|
||||
|
||||
VOID WINAPI
|
||||
ServiceMain(DWORD argc, LPTSTR *argv)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(argc);
|
||||
UNREFERENCED_PARAMETER(argv);
|
||||
|
||||
DPRINT("ServiceMain() called\n");
|
||||
|
||||
ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName,
|
||||
ServiceControlHandler,
|
||||
NULL);
|
||||
if (!ServiceStatusHandle)
|
||||
{
|
||||
DPRINT1("RegisterServiceCtrlHandlerExW() failed! (Error %lu)\n", GetLastError());
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateServiceStatus(SERVICE_RUNNING);
|
||||
|
||||
do
|
||||
{
|
||||
Sleep(1);
|
||||
} while (1);
|
||||
|
||||
UpdateServiceStatus(SERVICE_STOPPED);
|
||||
}
|
||||
|
||||
BOOL WINAPI
|
||||
DllMain(HINSTANCE hinstDLL,
|
||||
DWORD fdwReason,
|
||||
LPVOID lpvReserved)
|
||||
{
|
||||
switch (fdwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
DisableThreadLibraryCalls(hinstDLL);
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
5
reactos/base/services/wmisvc/wmisvc.rc
Normal file
5
reactos/base/services/wmisvc/wmisvc.rc
Normal file
|
@ -0,0 +1,5 @@
|
|||
#define REACTOS_VERSION_DLL
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "WMI Service"
|
||||
#define REACTOS_STR_INTERNAL_NAME "wmisvc"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "wmisvc.dll"
|
||||
#include <reactos/version.rc>
|
1
reactos/base/services/wmisvc/wmisvc.spec
Normal file
1
reactos/base/services/wmisvc/wmisvc.spec
Normal file
|
@ -0,0 +1 @@
|
|||
@ stdcall ServiceMain(long ptr)
|
|
@ -92,6 +92,13 @@ HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","9",2,"secur32.dll"
|
|||
|
||||
HKLM,"SOFTWARE\Microsoft\Secure",,0x00000012
|
||||
|
||||
; WBem
|
||||
HKLM,"SOFTWARE\Microsoft\wbem\ess",,0x00000012
|
||||
HKLM,"SOFTWARE\Microsoft\wbem\Transports",,0x00000012
|
||||
HKLM,"SOFTWARE\Microsoft\wbem\Scripting",,0x00000012
|
||||
HKLM,"SOFTWARE\Microsoft\wbem","Installation Directory",0x00020000,"%SystemRoot%\system32\wbem"
|
||||
HKLM,"SOFTWARE\Microsoft\wbem","MOF Self-Install Directory",0x00020000,"%SystemRoot%\system32\wbem\mof"
|
||||
|
||||
; HTML Help
|
||||
HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}",,2,"HTML Help"
|
||||
HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","ComponentID",2,"HTMLHelp"
|
||||
|
|
|
@ -1997,6 +1997,18 @@ HKLM,"SYSTEM\CurrentControlSet\Services\MSIServer","ObjectName",0x00000000,"Loca
|
|||
HKLM,"SYSTEM\CurrentControlSet\Services\MSIServer","Start",0x00010001,0x00000003
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\MSIServer","Type",0x00010001,0x00000020
|
||||
|
||||
; WMI Service
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","DependOnService",0x00010000,"RPCSS"
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","DisplayName",0x00000000,"ReactOS Management Infrastructure"
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","Description",0x00000000,"Provides interface to system management information"
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","ErrorControl",0x00010001,0x00000001
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","Group",0x00000000,"WMI"
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","ImagePath",0x00020000,"%SystemRoot%\system32\svchost.exe -k netsvcs"
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","ObjectName",0x00000000,"LocalSystem"
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","Start",0x00010001,0x00000002
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt","Type",0x00010001,0x00000020
|
||||
HKLM,"SYSTEM\CurrentControlSet\Services\winmgmt\Parameters","ServiceDll",0x00020000,"%SystemRoot%\system32\wbem\wmisvc.dll"
|
||||
|
||||
; Sound Blaster (NT4)
|
||||
;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Description",0x00000000,"Sound Blaster (NT4)"
|
||||
;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ErrorControl",0x00010001,0x00000001
|
||||
|
|
|
@ -42,6 +42,7 @@ add_subdirectory(faultrep)
|
|||
add_subdirectory(fltlib)
|
||||
add_subdirectory(fmifs)
|
||||
add_subdirectory(fontsub)
|
||||
add_subdirectory(framedyn)
|
||||
add_subdirectory(fusion)
|
||||
add_subdirectory(gdiplus)
|
||||
add_subdirectory(getuname)
|
||||
|
@ -219,6 +220,8 @@ add_subdirectory(uxtheme)
|
|||
add_subdirectory(vbscript)
|
||||
add_subdirectory(version)
|
||||
add_subdirectory(vssapi)
|
||||
add_subdirectory(wbemdisp)
|
||||
add_subdirectory(wbemprox)
|
||||
if(ARCH STREQUAL "i386")
|
||||
add_subdirectory(wdmaud.drv)
|
||||
endif()
|
||||
|
@ -235,6 +238,8 @@ add_subdirectory(winsta)
|
|||
add_subdirectory(wintrust)
|
||||
add_subdirectory(wlanapi)
|
||||
add_subdirectory(wldap32)
|
||||
add_subdirectory(wmi)
|
||||
add_subdirectory(wmiutils)
|
||||
add_subdirectory(wmvcore)
|
||||
add_subdirectory(ws2_32)
|
||||
add_subdirectory(ws2help)
|
||||
|
|
24
reactos/dll/win32/framedyn/CMakeLists.txt
Normal file
24
reactos/dll/win32/framedyn/CMakeLists.txt
Normal file
|
@ -0,0 +1,24 @@
|
|||
|
||||
set_cpp(WITH_RUNTIME WITH_EXCEPTIONS)
|
||||
spec2def(framedyn.dll framedyn.spec ADD_IMPORTLIB)
|
||||
|
||||
list(APPEND SOURCE
|
||||
main.c
|
||||
chstring.cpp
|
||||
provider.cpp
|
||||
${CMAKE_CURRENT_BINARY_DIR}/framedyn.def)
|
||||
|
||||
if(MSVC)
|
||||
add_compile_flags("/Zc:wchar_t-")
|
||||
endif()
|
||||
|
||||
add_library(framedyn SHARED ${SOURCE})
|
||||
set_module_type(framedyn win32dll UNICODE)
|
||||
add_importlibs(framedyn oleaut32 msvcrt kernel32 ntdll)
|
||||
add_cd_file(TARGET framedyn DESTINATION reactos/system32/wbem FOR all)
|
||||
|
||||
if(NOT MSVC)
|
||||
add_asm_files(framedynex_asm alias_gcc.s)
|
||||
add_library(framedynex ${framedynex_asm})
|
||||
set_target_properties(framedynex PROPERTIES LINKER_LANGUAGE ASM)
|
||||
endif()
|
98
reactos/dll/win32/framedyn/alias_gcc.s
Normal file
98
reactos/dll/win32/framedyn/alias_gcc.s
Normal file
|
@ -0,0 +1,98 @@
|
|||
#include <asm.inc>
|
||||
|
||||
.code64
|
||||
.align 4
|
||||
|
||||
MACRO(DEFINE_ALIAS, alias, alias2, origstring)
|
||||
PUBLIC alias
|
||||
.weakref alias2, origstring
|
||||
alias:
|
||||
jmp alias2
|
||||
ENDM
|
||||
|
||||
#define DEFINE_ALIAS(alias, orig) DEFINE_ALIAS alias, __wrap_ ## alias, #orig
|
||||
|
||||
DEFINE_ALIAS(__ZN8CHString16AllocBeforeWriteEi, ?AllocBeforeWrite@CHString@@IAEXH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString11AllocBufferEi, ?AllocBuffer@CHString@@IAEXH@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString9AllocCopyERS_iii, ?AllocCopy@CHString@@IBEXAAV1@HHH@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString14AllocSysStringEv, ?AllocSysString@CHString@@QBEPAGXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString10AssignCopyEiPKw, ?AssignCopy@CHString@@IAEXHPBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1ERKS_, ??0CHString@@QAE@ABV0@@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1EPKc, ??0CHString@@QAE@PBD@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1EPKh, ??0CHString@@QAE@PBE@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1EPKw, ??0CHString@@QAE@PBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1EPKwi, ??0CHString@@QAE@PBGH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1Ewi, ??0CHString@@QAE@GH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringC1Ev, ??0CHString@@QAE@XZ)
|
||||
DEFINE_ALIAS(__ZN8CHStringC2Ev, ??0CHString@@QAE@XZ) // CHString::CHString(void)
|
||||
DEFINE_ALIAS(__ZNK8CHString7CollateEPKw, ?Collate@CHString@@QBEHPBG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString7CompareEPKw, ?Compare@CHString@@QBEHPBG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString13CompareNoCaseEPKw, ?CompareNoCase@CHString@@QBEHPBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString10ConcatCopyEiPKwiS1_, ?ConcatCopy@CHString@@IAEXHPBGH0@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString13ConcatInPlaceEiPKw, ?ConcatInPlace@CHString@@IAEXHPBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString15CopyBeforeWriteEv, ?CopyBeforeWrite@CHString@@IAEXXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString5EmptyEv, ?Empty@CHString@@QAEXXZ)
|
||||
DEFINE_ALIAS(__ZNK8CHString4FindEPKw, ?Find@CHString@@QBEHPBG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString4FindEw, ?Find@CHString@@QBEHG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString9FindOneOfEPKw, ?FindOneOf@CHString@@QBEHPBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString6FormatEjz, ?Format@CHString@@QAAXIZZ)
|
||||
DEFINE_ALIAS(__ZN8CHString6FormatEPKwz, ?Format@CHString@@QAAXPBGZZ)
|
||||
DEFINE_ALIAS(__ZN8CHString14FormatMessageWEjz, ?FormatMessageW@CHString@@QAAXIZZ)
|
||||
DEFINE_ALIAS(__ZN8CHString14FormatMessageWEPKwz, ?FormatMessageW@CHString@@QAAXPBGZZ)
|
||||
DEFINE_ALIAS(__ZN8CHString7FormatVEPKwPc, ?FormatV@CHString@@QAEXPBGPAD@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString9FreeExtraEv, ?FreeExtra@CHString@@QAEXXZ)
|
||||
DEFINE_ALIAS(__ZNK8CHString14GetAllocLengthEv, ?GetAllocLength@CHString@@QBEHXZ)
|
||||
DEFINE_ALIAS(__ZNK8CHString5GetAtEi, ?GetAt@CHString@@QBEGH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString9GetBufferEi, ?GetBuffer@CHString@@QAEPAGH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString18GetBufferSetLengthEi, ?GetBufferSetLength@CHString@@QAEPAGH@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString7GetDataEv, ?GetData@CHString@@IBEPAUCHStringData@@XZ)
|
||||
DEFINE_ALIAS(__ZNK8CHString9GetLengthEv, ?GetLength@CHString@@QBEHXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString4InitEv, ?Init@CHString@@IAEXXZ)
|
||||
DEFINE_ALIAS(__ZNK8CHString7IsEmptyEv, ?IsEmpty@CHString@@QBEHXZ)
|
||||
DEFINE_ALIAS(__ZNK8CHString4LeftEi, ?Left@CHString@@QBE?AV1@H@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString11LoadStringWEj, ?LoadStringW@CHString@@QAEHI@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString11LoadStringWEjPwj, ?LoadStringW@CHString@@IAEHIPAGI@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString10LockBufferEv, ?LockBuffer@CHString@@QAEPAGXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString9MakeLowerEv, ?MakeLower@CHString@@QAEXXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString11MakeReverseEv, ?MakeReverse@CHString@@QAEXXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString9MakeUpperEv, ?MakeUpper@CHString@@QAEXXZ)
|
||||
DEFINE_ALIAS(__ZNK8CHString3MidEi, ?Mid@CHString@@QBE?AV1@H@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString3MidEii, ?Mid@CHString@@QBE?AV1@HH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString7ReleaseEP12CHStringData@4, ?Release@CHString@@KGXPAUCHStringData@@@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString7ReleaseEv, ?Release@CHString@@IAEXXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString13ReleaseBufferEi, ?ReleaseBuffer@CHString@@QAEXH@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString11ReverseFindEw, ?ReverseFind@CHString@@QBEHG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString5RightEi, ?Right@CHString@@QBE?AV1@H@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString10SafeStrlenEPKw@4, ?SafeStrlen@CHString@@KGHPBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString5SetAtEiw, ?SetAt@CHString@@QAEXHG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString13SpanExcludingEPKw, ?SpanExcluding@CHString@@QBE?AV1@PBG@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHString13SpanIncludingEPKw, ?SpanIncluding@CHString@@QBE?AV1@PBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHString8TrimLeftEv, ?TrimLeft@CHString@@QAEXXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString9TrimRightEv, ?TrimRight@CHString@@QAEXXZ)
|
||||
DEFINE_ALIAS(__ZN8CHString12UnlockBufferEv, ?UnlockBuffer@CHString@@QAEXXZ)
|
||||
DEFINE_ALIAS(__ZNK8CHStringcvPKwEv, ??BCHString@@QBEPBGXZ)
|
||||
DEFINE_ALIAS(__ZN8CHStringpLERKS_, ??YCHString@@QAEABV0@ABV0@@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringpLEc, ??YCHString@@QAEABV0@D@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringpLEPKw, ??YCHString@@QAEABV0@PBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringpLEw, ??YCHString@@QAEABV0@G@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringaSEPS_, ??4CHString@@QAEABV0@PAV0@@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringaSERKS_, ??4CHString@@QAEABV0@ABV0@@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringaSEPKc, ??4CHString@@QAEABV0@PBD@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringaSEc, ??4CHString@@QAEABV0@D@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringaSEPKh, ??4CHString@@QAEABV0@PBE@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringaSEPKw, ??4CHString@@QAEABV0@PBG@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringaSEw, ??4CHString@@QAEABV0@G@Z)
|
||||
DEFINE_ALIAS(__ZNK8CHStringixEi, ??ACHString@@QBEGH@Z)
|
||||
DEFINE_ALIAS(__ZN8CHStringD1Ev, ??1CHString@@QAE@XZ) // CHString::~CHString() complete object destructor
|
||||
DEFINE_ALIAS(__ZN8CHStringD2Ev, ??1CHString@@QAE@XZ) // CHString::~CHString() base object destructor
|
||||
DEFINE_ALIAS(__ZplwRK8CHString, ??H@YG?AVCHString@@GABV0@@Z)
|
||||
DEFINE_ALIAS(__ZplRK8CHStringw, ??H@YG?AVCHString@@ABV0@G@Z)
|
||||
DEFINE_ALIAS(__ZplRK8CHStringPKw, ??H@YG?AVCHString@@ABV0@PBG@Z)
|
||||
DEFINE_ALIAS(__ZplPKwRK8CHString, ??H@YG?AVCHString@@PBGABV0@@Z)
|
||||
DEFINE_ALIAS(__ZplRK8CHStringS1_, ??H@YG?AVCHString@@ABV0@0@Z)
|
||||
DEFINE_ALIAS(__ZN8Provider5FlushEv, ?Flush@Provider@@MAEXXZ)
|
||||
DEFINE_ALIAS(__ZN8Provider21ValidateDeletionFlagsEl, ?ValidateDeletionFlags@Provider@@MAEJJ@Z)
|
||||
DEFINE_ALIAS(__ZN8Provider19ValidateMethodFlagsEl, ?ValidateMethodFlags@Provider@@MAEJJ@Z)
|
||||
DEFINE_ALIAS(__ZN8Provider18ValidateQueryFlagsEl, ?ValidateQueryFlags@Provider@@MAEJJ@Z)
|
||||
|
||||
END
|
1404
reactos/dll/win32/framedyn/chstring.cpp
Normal file
1404
reactos/dll/win32/framedyn/chstring.cpp
Normal file
File diff suppressed because it is too large
Load diff
778
reactos/dll/win32/framedyn/framedyn.spec
Normal file
778
reactos/dll/win32/framedyn/framedyn.spec
Normal file
|
@ -0,0 +1,778 @@
|
|||
|
||||
# **************** x86 exports ****************
|
||||
@ thiscall -arch=i386 ?AllocBeforeWrite@CHString@@IAEXH@Z(long) _ZN8CHString16AllocBeforeWriteEi # protected: void __thiscall CHString::AllocBeforeWrite(int)
|
||||
@ thiscall -arch=i386 ?AllocBuffer@CHString@@IAEXH@Z(long) _ZN8CHString11AllocBufferEi # protected: void __thiscall CHString::AllocBuffer(int)
|
||||
@ thiscall -arch=i386 ?AllocCopy@CHString@@IBEXAAV1@HHH@Z(ptr long long long) _ZNK8CHString9AllocCopyERS_iii # protected: void __thiscall CHString::AllocCopy(class CHString &,int,int,int)const
|
||||
@ thiscall -arch=i386 ?AllocSysString@CHString@@QBEPAGXZ() _ZNK8CHString14AllocSysStringEv
|
||||
@ thiscall -arch=i386 ?AssignCopy@CHString@@IAEXHPBG@Z(long wstr) _ZN8CHString10AssignCopyEiPKw
|
||||
@ thiscall -arch=i386 ??0CHString@@QAE@ABV0@@Z(ptr) _ZN8CHStringC1ERKS_
|
||||
@ thiscall -arch=i386 ??0CHString@@QAE@PBD@Z(str) _ZN8CHStringC1EPKc
|
||||
@ thiscall -arch=i386 ??0CHString@@QAE@PBE@Z(str) _ZN8CHStringC1EPKh
|
||||
@ thiscall -arch=i386 ??0CHString@@QAE@PBG@Z(wstr) _ZN8CHStringC1EPKw
|
||||
@ thiscall -arch=i386 ??0CHString@@QAE@PBGH@Z(wstr long) _ZN8CHStringC1EPKwi
|
||||
@ thiscall -arch=i386 ??0CHString@@QAE@GH@Z(long long) _ZN8CHStringC1Ewi
|
||||
@ thiscall -arch=i386 ??0CHString@@QAE@XZ() _ZN8CHStringC1Ev # public: __thiscall CHString::CHString(void)
|
||||
@ thiscall -arch=i386 ?Collate@CHString@@QBEHPBG@Z(wstr) _ZNK8CHString7CollateEPKw # public: int __thiscall CHString::Collate(unsigned short const *)const
|
||||
@ thiscall -arch=i386 ?Compare@CHString@@QBEHPBG@Z(wstr) _ZNK8CHString7CompareEPKw # public: int __thiscall CHString::Compare(unsigned short const *)const
|
||||
@ thiscall -arch=i386 ?CompareNoCase@CHString@@QBEHPBG@Z(wstr) _ZNK8CHString13CompareNoCaseEPKw # public: int __thiscall CHString::CompareNoCase(unsigned short const *)const
|
||||
@ thiscall -arch=i386 ?ConcatCopy@CHString@@IAEXHPBGH0@Z(long wstr long wstr) _ZN8CHString10ConcatCopyEiPKwiS1_ # protected: void __thiscall CHString::ConcatCopy(int,unsigned short const *,int,unsigned short const *)
|
||||
@ thiscall -arch=i386 ?ConcatInPlace@CHString@@IAEXHPBG@Z(long wstr) _ZN8CHString13ConcatInPlaceEiPKw # protected: void __thiscall CHString::ConcatInPlace(int,unsigned short const *)
|
||||
@ thiscall -arch=i386 ?CopyBeforeWrite@CHString@@IAEXXZ() _ZN8CHString15CopyBeforeWriteEv # protected: void __thiscall CHString::CopyBeforeWrite(void)
|
||||
@ thiscall -arch=i386 ?Empty@CHString@@QAEXXZ() _ZN8CHString5EmptyEv # public: void __thiscall CHString::Empty(void)
|
||||
@ thiscall -arch=i386 ?Find@CHString@@QBEHPBG@Z(wstr) _ZNK8CHString4FindEPKw # public: int __thiscall CHString::Find(unsigned short const *)const
|
||||
@ thiscall -arch=i386 ?Find@CHString@@QBEHG@Z(long) _ZNK8CHString4FindEw # public: int __thiscall CHString::Find(unsigned short)const
|
||||
@ thiscall -arch=i386 ?FindOneOf@CHString@@QBEHPBG@Z(wstr) _ZNK8CHString9FindOneOfEPKw # public: int __thiscall CHString::FindOneOf(unsigned short const *)const
|
||||
@ thiscall -arch=i386 ?Format@CHString@@QAAXIZZ(long long long) _ZN8CHString6FormatEjz # public: void __cdecl CHString::Format(unsigned int,...)
|
||||
@ thiscall -arch=i386 ?Format@CHString@@QAAXPBGZZ(long wstr long) _ZN8CHString6FormatEPKwz # public: void __cdecl CHString::Format(unsigned short const *,...)
|
||||
@ thiscall -arch=i386 ?FormatMessageW@CHString@@QAAXIZZ(long long long) _ZN8CHString14FormatMessageWEjz # public: void __cdecl CHString::FormatMessageW(unsigned int,...)
|
||||
@ thiscall -arch=i386 ?FormatMessageW@CHString@@QAAXPBGZZ(long ptr long) _ZN8CHString14FormatMessageWEPKwz # public: void __cdecl CHString::FormatMessageW(unsigned short const *,...)
|
||||
@ thiscall -arch=i386 ?FormatV@CHString@@QAEXPBGPAD@Z(wstr long) _ZN8CHString7FormatVEPKwPc # public: void __thiscall CHString::FormatV(unsigned short const *,char *)
|
||||
@ thiscall -arch=i386 ?FreeExtra@CHString@@QAEXXZ() _ZN8CHString9FreeExtraEv # public: void __thiscall CHString::FreeExtra(void)
|
||||
@ thiscall -arch=i386 ?GetAllocLength@CHString@@QBEHXZ() _ZNK8CHString14GetAllocLengthEv # public: int __thiscall CHString::GetAllocLength(void)const
|
||||
@ thiscall -arch=i386 ?GetAt@CHString@@QBEGH@Z(long) _ZNK8CHString5GetAtEi # public: unsigned short __thiscall CHString::GetAt(int)const
|
||||
@ thiscall -arch=i386 ?GetBuffer@CHString@@QAEPAGH@Z(long) _ZN8CHString9GetBufferEi # public: unsigned short * __thiscall CHString::GetBuffer(int)
|
||||
@ thiscall -arch=i386 ?GetBufferSetLength@CHString@@QAEPAGH@Z(long) _ZN8CHString18GetBufferSetLengthEi # public: unsigned short * __thiscall CHString::GetBufferSetLength(int)
|
||||
@ thiscall -arch=i386 ?GetData@CHString@@IBEPAUCHStringData@@XZ() _ZNK8CHString7GetDataEv # protected: struct CHStringData * __thiscall CHString::GetData(void)const
|
||||
@ thiscall -arch=i386 ?GetLength@CHString@@QBEHXZ() _ZNK8CHString9GetLengthEv # public: int __thiscall CHString::GetLength(void)const
|
||||
@ thiscall -arch=i386 ?Init@CHString@@IAEXXZ() _ZN8CHString4InitEv # protected: void __thiscall CHString::Init(void)
|
||||
@ thiscall -arch=i386 ?IsEmpty@CHString@@QBEHXZ() _ZNK8CHString7IsEmptyEv # public: int __thiscall CHString::IsEmpty(void)const
|
||||
@ thiscall -arch=i386 ?Left@CHString@@QBE?AV1@H@Z(long) _ZNK8CHString4LeftEi # public: class CHString __thiscall CHString::Left(int)const
|
||||
@ thiscall -arch=i386 ?LoadStringW@CHString@@QAEHI@Z(long) _ZN8CHString11LoadStringWEj # public: int __thiscall CHString::LoadStringW(unsigned int)
|
||||
@ thiscall -arch=i386 ?LoadStringW@CHString@@IAEHIPAGI@Z(long wstr long) _ZN8CHString11LoadStringWEjPwj # protected: int __thiscall CHString::LoadStringW(unsigned int,unsigned short *,unsigned int)
|
||||
@ thiscall -arch=i386 ?LockBuffer@CHString@@QAEPAGXZ() _ZN8CHString10LockBufferEv # public: unsigned short * __thiscall CHString::LockBuffer(void)
|
||||
@ thiscall -arch=i386 ?MakeLower@CHString@@QAEXXZ() _ZN8CHString9MakeLowerEv # public: void __thiscall CHString::MakeLower(void)
|
||||
@ thiscall -arch=i386 ?MakeReverse@CHString@@QAEXXZ() _ZN8CHString11MakeReverseEv # public: void __thiscall CHString::MakeReverse(void)
|
||||
@ thiscall -arch=i386 ?MakeUpper@CHString@@QAEXXZ() _ZN8CHString9MakeUpperEv # public: void __thiscall CHString::MakeUpper(void)
|
||||
@ thiscall -arch=i386 ?Mid@CHString@@QBE?AV1@H@Z(long) _ZNK8CHString3MidEi # public: class CHString __thiscall CHString::Mid(int)const
|
||||
@ thiscall -arch=i386 ?Mid@CHString@@QBE?AV1@HH@Z(long long) _ZNK8CHString3MidEii # public: class CHString __thiscall CHString::Mid(int,int)const
|
||||
@ thiscall -arch=i386 ?Release@CHString@@KGXPAUCHStringData@@@Z(ptr) _ZN8CHString7ReleaseEP12CHStringData@4 # protected: static void __stdcall CHString::Release(struct CHStringData *)
|
||||
@ thiscall -arch=i386 ?Release@CHString@@IAEXXZ() _ZN8CHString7ReleaseEv # protected: void __thiscall CHString::Release(void)
|
||||
@ thiscall -arch=i386 ?ReleaseBuffer@CHString@@QAEXH@Z(long) _ZN8CHString13ReleaseBufferEi # public: void __thiscall CHString::ReleaseBuffer(int)
|
||||
@ thiscall -arch=i386 ?ReverseFind@CHString@@QBEHG@Z(long) _ZNK8CHString11ReverseFindEw # public: int __thiscall CHString::ReverseFind(unsigned short)const
|
||||
@ thiscall -arch=i386 ?Right@CHString@@QBE?AV1@H@Z(long) _ZNK8CHString5RightEi # public: class CHString __thiscall CHString::Right(int)const
|
||||
@ stdcall -arch=i386 ?SafeStrlen@CHString@@KGHPBG@Z(wstr) _ZN8CHString10SafeStrlenEPKw # protected: static int__stdcall CHString::SafeStrlen(unsigned short const *)
|
||||
@ thiscall -arch=i386 ?SetAt@CHString@@QAEXHG@Z(long long) _ZN8CHString5SetAtEiw # public: void __thiscall CHString::SetAt(int,unsigned short)
|
||||
@ thiscall -arch=i386 ?SpanExcluding@CHString@@QBE?AV1@PBG@Z(long wstr) _ZNK8CHString13SpanExcludingEPKw # public: class CHString __thiscall CHString::SpanExcluding(unsigned short const *)const
|
||||
@ thiscall -arch=i386 ?SpanIncluding@CHString@@QBE?AV1@PBG@Z(long wstr) _ZNK8CHString13SpanIncludingEPKw # public: class CHString __thiscall CHString::SpanIncluding(unsigned short const *)const
|
||||
@ thiscall -arch=i386 ?TrimLeft@CHString@@QAEXXZ() _ZN8CHString8TrimLeftEv # public: void __thiscall CHString::TrimLeft(void)
|
||||
@ thiscall -arch=i386 ?TrimRight@CHString@@QAEXXZ() _ZN8CHString9TrimRightEv # public: void __thiscall CHString::TrimRight(void)
|
||||
@ thiscall -arch=i386 ?UnlockBuffer@CHString@@QAEXXZ() _ZN8CHString12UnlockBufferEv # public: void __thiscall CHString::UnlockBuffer(void)
|
||||
@ thiscall -arch=i386 ??BCHString@@QBEPBGXZ(ptr) _ZNK8CHStringcvPKwEv # public: __thiscall CHString::operator unsigned short const *(void)const
|
||||
@ thiscall -arch=i386 ??YCHString@@QAEABV0@ABV0@@Z(ptr) _ZN8CHStringpLERKS_ # public: class CHString const & __thiscall CHString::operator+=(class CHString const &)
|
||||
@ thiscall -arch=i386 ??YCHString@@QAEABV0@D@Z(long) _ZN8CHStringpLEc # public: class CHString const & __thiscall CHString::operator+=(char)
|
||||
@ thiscall -arch=i386 ??YCHString@@QAEABV0@PBG@Z(wstr) _ZN8CHStringpLEPKw # public: class CHString const & __thiscall CHString::operator+=(unsigned short const *)
|
||||
@ thiscall -arch=i386 ??YCHString@@QAEABV0@G@Z(long) _ZN8CHStringpLEw # public: class CHString const & __thiscall CHString::operator+=(unsigned short)
|
||||
@ thiscall -arch=i386 ??4CHString@@QAEABV0@PAV0@@Z(ptr) _ZN8CHStringaSEPS_ # public: class CHString const & __thiscall CHString::operator=(class CHString *)
|
||||
@ thiscall -arch=i386 ??4CHString@@QAEABV0@ABV0@@Z(ptr) _ZN8CHStringaSERKS_ # public: class CHString const & __thiscall CHString::operator=(class CHString const &)
|
||||
@ thiscall -arch=i386 ??4CHString@@QAEABV0@PBD@Z(str) _ZN8CHStringaSEPKc # public: class CHString const & __thiscall CHString::operator=(char const *)
|
||||
@ thiscall -arch=i386 ??4CHString@@QAEABV0@D@Z(long) _ZN8CHStringaSEc # public: class CHString const & __thiscall CHString::operator=(char)
|
||||
@ thiscall -arch=i386 ??4CHString@@QAEABV0@PBE@Z(str) _ZN8CHStringaSEPKh # public: class CHString const & __thiscall CHString::operator=(unsigned char const *)
|
||||
@ thiscall -arch=i386 ??4CHString@@QAEABV0@PBG@Z(wstr) _ZN8CHStringaSEPKw # public: class CHString const & __thiscall CHString::operator=(unsigned short const *)
|
||||
@ thiscall -arch=i386 ??4CHString@@QAEABV0@G@Z(long) _ZN8CHStringaSEw # public: class CHString const & __thiscall CHString::operator=(unsigned short)
|
||||
@ thiscall -arch=i386 ??ACHString@@QBEGH@Z(long) _ZNK8CHStringixEi # public: unsigned short __thiscall CHString::operator[](int)const
|
||||
@ thiscall -arch=i386 ??1CHString@@QAE@XZ() _ZN8CHStringD1Ev # public: __thiscall CHString::~CHString(void), complete object destructor, identical to _ZN8CHStringD2Ev aka base object destructor
|
||||
@ stdcall -arch=i386 ??H@YG?AVCHString@@GABV0@@Z(long ptr) _ZplwRK8CHString # class CHString __stdcall operator+(unsigned short,class CHString const &)
|
||||
@ stdcall -arch=i386 ??H@YG?AVCHString@@ABV0@G@Z(ptr long) _ZplRK8CHStringw # class CHString __stdcall operator+(class CHString const &,unsigned short)
|
||||
@ stdcall -arch=i386 ??H@YG?AVCHString@@ABV0@PBG@Z(ptr wstr) _ZplRK8CHStringPKw # class CHString __stdcall operator+(class CHString const &,unsigned short const *)
|
||||
@ stdcall -arch=i386 ??H@YG?AVCHString@@PBGABV0@@Z(wstr ptr) _ZplPKwRK8CHString # class CHString __stdcall operator+(unsigned short const *,class CHString const &)
|
||||
@ stdcall -arch=i386 ??H@YG?AVCHString@@ABV0@0@Z(ptr ptr) _ZplRK8CHStringS1_ # class CHString __stdcall operator+(class CHString const &,class CHString const &)
|
||||
@ thiscall -arch=i386 ?Flush@Provider@@MAEXXZ() _ZN8Provider5FlushEv # protected: virtual void __thiscall Provider::Flush(void)
|
||||
@ thiscall -arch=i386 ?ValidateDeletionFlags@Provider@@MAEJJ@Z(long) _ZN8Provider21ValidateDeletionFlagsEl # protected: virtual long __thiscall Provider::ValidateDeletionFlags(long)
|
||||
@ thiscall -arch=i386 ?ValidateMethodFlags@Provider@@MAEJJ@Z(long) _ZN8Provider19ValidateMethodFlagsEl # protected: virtual long __thiscall Provider::ValidateMethodFlags(long)
|
||||
@ thiscall -arch=i386 ?ValidateQueryFlags@Provider@@MAEJJ@Z(long) _ZN8Provider18ValidateQueryFlagsEl # protected: virtual long __thiscall Provider::ValidateQueryFlags(long)
|
||||
|
||||
# **************** win64 exports ****************
|
||||
@ thiscall -arch=win64 ?AllocBeforeWrite@CHString@@IEAAXH@Z(long) _ZN8CHString16AllocBeforeWriteEi # protected: void __thiscall CHString::AllocBeforeWrite(int)
|
||||
@ thiscall -arch=win64 ?AllocBuffer@CHString@@IEAAXH@Z(long) _ZN8CHString11AllocBufferEi # protected: void __thiscall CHString::AllocBuffer(int)
|
||||
@ thiscall -arch=win64 ?AllocCopy@CHString@@IEBAXAEAV1@HHH@Z(ptr long long long) _ZNK8CHString9AllocCopyERS_iii # protected: void __thiscall CHString::AllocCopy(class CHString &,int,int,int)const
|
||||
@ thiscall -arch=win64 ?AllocSysString@CHString@@QEBAPEAGXZ() _ZNK8CHString14AllocSysStringEv
|
||||
@ thiscall -arch=win64 ?AssignCopy@CHString@@IEAAXHPEBG@Z(long wstr) _ZN8CHString10AssignCopyEiPKw
|
||||
@ thiscall -arch=win64 ??0CHString@@QEAA@AEBV0@@Z(ptr) _ZN8CHStringC1ERKS_
|
||||
@ thiscall -arch=win64 ??0CHString@@QEAA@PEBD@Z(str) _ZN8CHStringC1EPKc
|
||||
@ thiscall -arch=win64 ??0CHString@@QEAA@PEBE@Z(str) _ZN8CHStringC1EPKh
|
||||
@ thiscall -arch=win64 ??0CHString@@QEAA@PEBG@Z(wstr) _ZN8CHStringC1EPKw
|
||||
@ thiscall -arch=win64 ??0CHString@@QEAA@PEBGH@Z(wstr long) _ZN8CHStringC1EPKwi
|
||||
@ thiscall -arch=win64 ??0CHString@@QEAA@GH@Z(long long) _ZN8CHStringC1Ewi
|
||||
@ thiscall -arch=win64 ??0CHString@@QEAA@XZ() _ZN8CHStringC1Ev # public: __thiscall CHString::CHString(void)
|
||||
@ thiscall -arch=win64 ?Collate@CHString@@QEBAHPEBG@Z(wstr) _ZNK8CHString7CollateEPKw # public: int __thiscall CHString::Collate(unsigned short const *)const
|
||||
@ thiscall -arch=win64 ?Compare@CHString@@QEBAHPEBG@Z(wstr) _ZNK8CHString7CompareEPKw # public: int __thiscall CHString::Compare(unsigned short const *)const
|
||||
@ thiscall -arch=win64 ?CompareNoCase@CHString@@QEBAHPEBG@Z(wstr) _ZNK8CHString13CompareNoCaseEPKw # public: int __thiscall CHString::CompareNoCase(unsigned short const *)const
|
||||
@ thiscall -arch=win64 ?ConcatCopy@CHString@@IEAAXHPEBGH0@Z(long wstr long wstr) _ZN8CHString10ConcatCopyEiPKwiS1_ # protected: void __thiscall CHString::ConcatCopy(int,unsigned short const *,int,unsigned short const *)
|
||||
@ thiscall -arch=win64 ?ConcatInPlace@CHString@@IEAAXHPEBG@Z(long wstr) _ZN8CHString13ConcatInPlaceEiPKw # protected: void __thiscall CHString::ConcatInPlace(int,unsigned short const *)
|
||||
@ thiscall -arch=win64 ?CopyBeforeWrite@CHString@@IEAAXXZ() _ZN8CHString15CopyBeforeWriteEv # protected: void __thiscall CHString::CopyBeforeWrite(void)
|
||||
@ thiscall -arch=win64 ?Empty@CHString@@QEAAXXZ() _ZN8CHString5EmptyEv # public: void __thiscall CHString::Empty(void)
|
||||
@ thiscall -arch=win64 ?Find@CHString@@QEBAHPEBG@Z(wstr) _ZNK8CHString4FindEPKw # public: int __thiscall CHString::Find(unsigned short const *)const
|
||||
@ thiscall -arch=win64 ?Find@CHString@@QEBAHG@Z(long) _ZNK8CHString4FindEPKw # public: int __thiscall CHString::Find(unsigned short)const
|
||||
@ thiscall -arch=win64 ?FindOneOf@CHString@@QEBAHPEBG@Z(wstr) _ZNK8CHString9FindOneOfEPKw # public: int __thiscall CHString::FindOneOf(unsigned short const *)const
|
||||
@ thiscall -arch=win64 ?Format@CHString@@QEAAXIZZ(long long long) _ZN8CHString6FormatEjz # public: void __cdecl CHString::Format(unsigned int,...)
|
||||
@ thiscall -arch=win64 ?Format@CHString@@QEAAXPEBGZZ(long wstr long) _ZN8CHString6FormatEPKwz # public: void __cdecl CHString::Format(unsigned short const *,...)
|
||||
@ thiscall -arch=win64 ?FormatMessageW@CHString@@QEAAXIZZ(long long long) _ZN8CHString14FormatMessageWEjz # public: void __cdecl CHString::FormatMessageW(unsigned int,...)
|
||||
@ thiscall -arch=win64 ?FormatMessageW@CHString@@QEAAXPEBGZZ(long ptr long) _ZN8CHString14FormatMessageWEPKwz # public: void __cdecl CHString::FormatMessageW(unsigned short const *,...)
|
||||
@ thiscall -arch=win64 ?FormatV@CHString@@QEAAXPEBGPEAD@Z(wstr long) _ZN8CHString7FormatVEPKwPc # public: void __thiscall CHString::FormatV(unsigned short const *,char *)
|
||||
@ thiscall -arch=win64 ?FreeExtra@CHString@@QEAAXXZ() _ZN8CHString9FreeExtraEv # public: void __thiscall CHString::FreeExtra(void)
|
||||
@ thiscall -arch=win64 ?GetAllocLength@CHString@@QEBAHXZ() _ZNK8CHString14GetAllocLengthEv # public: int __thiscall CHString::GetAllocLength(void)const
|
||||
@ thiscall -arch=win64 ?GetAt@CHString@@QEBAGH@Z(long) _ZNK8CHString5GetAtEi # public: unsigned short __thiscall CHString::GetAt(int)const
|
||||
@ thiscall -arch=win64 ?GetBuffer@CHString@@QEAAPEAGH@Z(long) _ZN8CHString9GetBufferEi # public: unsigned short * __thiscall CHString::GetBuffer(int)
|
||||
@ thiscall -arch=win64 ?GetBufferSetLength@CHString@@QEAAPEAGH@Z(long) _ZN8CHString18GetBufferSetLengthEi # public: unsigned short * __thiscall CHString::GetBufferSetLength(int)
|
||||
@ thiscall -arch=win64 ?GetData@CHString@@IEBAPEAUCHStringData@@XZ() _ZNK8CHString7GetDataEv # protected: struct CHStringData * __thiscall CHString::GetData(void)const
|
||||
@ thiscall -arch=win64 ?GetLength@CHString@@QEBAHXZ() _ZNK8CHString9GetLengthEv # public: int __thiscall CHString::GetLength(void)const
|
||||
@ thiscall -arch=win64 ?Init@CHString@@IEAAXXZ() _ZN8CHString4InitEv # protected: void __thiscall CHString::Init(void)
|
||||
@ thiscall -arch=win64 ?IsEmpty@CHString@@QEBAHXZ() _ZNK8CHString7IsEmptyEv # public: int __thiscall CHString::IsEmpty(void)const
|
||||
@ thiscall -arch=win64 ?Left@CHString@@QEBA?AV1@H@Z(long) _ZNK8CHString4LeftEi # public: class CHString __thiscall CHString::Left(int)const
|
||||
@ thiscall -arch=win64 ?LoadStringW@CHString@@QEAAHI@Z(long) _ZN8CHString11LoadStringWEj # public: int __thiscall CHString::LoadStringW(unsigned int)
|
||||
@ thiscall -arch=win64 ?LoadStringW@CHString@@IEAAHIPEAGI@Z(long wstr long) _ZN8CHString11LoadStringWEjPwj # protected: int __thiscall CHString::LoadStringW(unsigned int,unsigned short *,unsigned int)
|
||||
@ thiscall -arch=win64 ?LockBuffer@CHString@@QEAAPEAGXZ() _ZN8CHString10LockBufferEv # public: unsigned short * __thiscall CHString::LockBuffer(void)
|
||||
@ thiscall -arch=win64 ?MakeLower@CHString@@QEAAXXZ() _ZN8CHString9MakeLowerEv # public: void __thiscall CHString::MakeLower(void)
|
||||
@ thiscall -arch=win64 ?MakeReverse@CHString@@QEAAXXZ() _ZN8CHString11MakeReverseEv # public: void __thiscall CHString::MakeReverse(void)
|
||||
@ thiscall -arch=win64 ?MakeUpper@CHString@@QEAAXXZ() _ZN8CHString9MakeUpperEv # public: void __thiscall CHString::MakeUpper(void)
|
||||
@ thiscall -arch=win64 ?Mid@CHString@@QEBA?AV1@H@Z(long) _ZNK8CHString3MidEi # public: class CHString __thiscall CHString::Mid(int)const
|
||||
@ thiscall -arch=win64 ?Mid@CHString@@QEBA?AV1@HH@Z(long long) _ZNK8CHString3MidEii # public: class CHString __thiscall CHString::Mid(int,int)const
|
||||
@ thiscall -arch=win64 ?Release@CHString@@KAXPEAUCHStringData@@@Z(ptr) _ZN8CHString7ReleaseEP12CHStringData@4 # protected: static void __stdcall CHString::Release(struct CHStringData *)
|
||||
@ thiscall -arch=win64 ?Release@CHString@@IEAAXXZ() _ZN8CHString7ReleaseEv # protected: void __thiscall CHString::Release(void)
|
||||
@ thiscall -arch=win64 ?ReleaseBuffer@CHString@@QEAAXH@Z(long) _ZN8CHString13ReleaseBufferEi # public: void __thiscall CHString::ReleaseBuffer(int)
|
||||
@ thiscall -arch=win64 ?ReverseFind@CHString@@QEBAHG@Z(long) _ZNK8CHString11ReverseFindEw # public: int __thiscall CHString::ReverseFind(unsigned short)const
|
||||
@ thiscall -arch=win64 ?Right@CHString@@QEBA?AV1@H@Z(long) _ZNK8CHString5RightEi # public: class CHString __thiscall CHString::Right(int)const
|
||||
@ stdcall -arch=win64 ?SafeStrlen@CHString@@KAHPEBG@Z(wstr) _ZN8CHString10SafeStrlenEPKw # protected: static int__stdcall CHString::SafeStrlen(unsigned short const *)
|
||||
@ thiscall -arch=win64 ?SetAt@CHString@@QEAAXHG@Z(long long) _ZN8CHString5SetAtEiw # public: void __thiscall CHString::SetAt(int,unsigned short)
|
||||
@ thiscall -arch=win64 ?SpanExcluding@CHString@@QEBA?AV1@PEBG@Z(long wstr) _ZNK8CHString13SpanExcludingEPKw # public: class CHString __thiscall CHString::SpanExcluding(unsigned short const *)const
|
||||
@ thiscall -arch=win64 ?SpanIncluding@CHString@@QEBA?AV1@PEBG@Z(long wstr) _ZNK8CHString13SpanIncludingEPKw # public: class CHString __thiscall CHString::SpanIncluding(unsigned short const *)const
|
||||
@ thiscall -arch=win64 ?TrimLeft@CHString@@QEAAXXZ() _ZN8CHString8TrimLeftEv # public: void __thiscall CHString::TrimLeft(void)
|
||||
@ thiscall -arch=win64 ?TrimRight@CHString@@QEAAXXZ() _ZN8CHString9TrimRightEv # public: void __thiscall CHString::TrimRight(void)
|
||||
@ thiscall -arch=win64 ?UnlockBuffer@CHString@@QEAAXXZ() _ZN8CHString12UnlockBufferEv # public: void __thiscall CHString::UnlockBuffer(void)
|
||||
@ thiscall -arch=win64 ??BCHString@@QEBAPEBGXZ(ptr) _ZNK8CHStringcvPKwEv # public: __thiscall CHString::operator unsigned short const *(void)const
|
||||
@ thiscall -arch=win64 ??YCHString@@QEAAAEBV0@AEBV0@@Z(ptr) _ZN8CHStringpLERKS_ # public: class CHString const & __thiscall CHString::operator+=(class CHString const &)
|
||||
@ thiscall -arch=win64 ??YCHString@@QEAAAEBV0@D@Z(long) _ZN8CHStringpLEc # public: class CHString const & __thiscall CHString::operator+=(char)
|
||||
@ thiscall -arch=win64 ??YCHString@@QEAAAEBV0@PEBG@Z(wstr) _ZN8CHStringpLEPKw # public: class CHString const & __thiscall CHString::operator+=(unsigned short const *)
|
||||
@ thiscall -arch=win64 ??YCHString@@QEAAAEBV0@G@Z(long) _ZN8CHStringpLEw # public: class CHString const & __thiscall CHString::operator+=(unsigned short)
|
||||
@ thiscall -arch=win64 ??4CHString@@QEAAAEBV0@PEAV0@@Z(ptr) _ZN8CHStringaSEPS_ # public: class CHString const & __thiscall CHString::operator=(class CHString *)
|
||||
@ thiscall -arch=win64 ??4CHString@@QEAAAEBV0@AEBV0@@Z(ptr) _ZN8CHStringaSERKS_ # public: class CHString const & __thiscall CHString::operator=(class CHString const &)
|
||||
@ thiscall -arch=win64 ??4CHString@@QEAAAEBV0@PEBD@Z(str) _ZN8CHStringaSEPKc # public: class CHString const & __thiscall CHString::operator=(char const *)
|
||||
@ thiscall -arch=win64 ??4CHString@@QEAAAEBV0@D@Z(long) _ZN8CHStringaSEc # public: class CHString const & __thiscall CHString::operator=(char)
|
||||
@ thiscall -arch=win64 ??4CHString@@QEAAAEBV0@PEBE@Z(str) _ZN8CHStringaSEPKh # public: class CHString const & __thiscall CHString::operator=(unsigned char const *)
|
||||
@ thiscall -arch=win64 ??4CHString@@QEAAAEBV0@PEBG@Z(wstr) _ZN8CHStringaSEPKw # public: class CHString const & __thiscall CHString::operator=(unsigned short const *)
|
||||
@ thiscall -arch=win64 ??4CHString@@QEAAAEBV0@G@Z(long) _ZN8CHStringaSEw # public: class CHString const & __thiscall CHString::operator=(unsigned short)
|
||||
@ thiscall -arch=win64 ??ACHString@@QEBAGH@Z(long) _ZNK8CHStringixEi # public: unsigned short __thiscall CHString::operator[](int)const
|
||||
@ thiscall -arch=win64 ??1CHString@@QEAA@XZ() _ZN8CHStringD1Ev # public: __thiscall CHString::~CHString(void), complete object destructor, identical to _ZN8CHStringD2Ev aka base object destructor
|
||||
@ stdcall -arch=win64 ??H@YA?AVCHString@@GAEBV0@@Z(long ptr) _ZplwRK8CHString # class CHString __stdcall operator+(unsigned short,class CHString const &)
|
||||
@ stdcall -arch=win64 ??H@YA?AVCHString@@AEBV0@G@Z(ptr long) _ZplRK8CHStringw # class CHString __stdcall operator+(class CHString const &,unsigned short)
|
||||
@ stdcall -arch=win64 ??H@YA?AVCHString@@AEBV0@PEBG@Z(ptr wstr) _ZplRK8CHStringPKw # class CHString __stdcall operator+(class CHString const &,unsigned short const *)
|
||||
@ stdcall -arch=win64 ??H@YA?AVCHString@@PEBGAEBV0@@Z(wstr ptr) _ZplPKwRK8CHString # class CHString __stdcall operator+(unsigned short const *,class CHString const &)
|
||||
@ stdcall -arch=win64 ??H@YA?AVCHString@@AEBV0@0@Z(ptr ptr) _ZplRK8CHStringS1_ # class CHString __stdcall operator+(class CHString const &,class CHString const &)
|
||||
@ thiscall -arch=win64 ?Flush@Provider@@MEAAXXZ() _ZN8Provider5FlushEv # protected: virtual void __thiscall Provider::Flush(void)
|
||||
@ thiscall -arch=win64 ?ValidateDeletionFlags@Provider@@MEAAJJ@Z(long) _ZN8Provider21ValidateDeletionFlagsEl # protected: virtual long __thiscall Provider::ValidateDeletionFlags(long)
|
||||
@ thiscall -arch=win64 ?ValidateMethodFlags@Provider@@MEAAJJ@Z(long) _ZN8Provider19ValidateMethodFlagsEl # protected: virtual long __thiscall Provider::ValidateMethodFlags(long)
|
||||
@ thiscall -arch=win64 ?ValidateQueryFlags@Provider@@MEAAJJ@Z(long) _ZN8Provider18ValidateQueryFlagsEl # protected: virtual long __thiscall Provider::ValidateQueryFlags(long)
|
||||
|
||||
# **************** arm exports ****************
|
||||
;@ cdecl -arch=arm ??0CAutoEvent@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CFrameworkQuery@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CFrameworkQuery@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CFrameworkQueryEx@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CFrameworkQueryEx@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CHPtrArray@@QAA@XZ()
|
||||
@ cdecl -arch=arm ??0CHString@@QAA@ABV0@@Z()
|
||||
@ cdecl -arch=arm ??0CHString@@QAA@GH@Z()
|
||||
@ cdecl -arch=arm ??0CHString@@QAA@PBD@Z()
|
||||
@ cdecl -arch=arm ??0CHString@@QAA@PBE@Z()
|
||||
@ cdecl -arch=arm ??0CHString@@QAA@PBG@Z()
|
||||
@ cdecl -arch=arm ??0CHString@@QAA@PBGH@Z()
|
||||
@ cdecl -arch=arm ??0CHString@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CHStringArray@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CInstance@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CInstance@@QAA@PAUIWbemClassObject@@PAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ??0CObjectPathParser@@QAA@W4ObjectParserFlags@@@Z()
|
||||
;@ cdecl -arch=arm ??0CRegistry@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CRegistry@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CRegistrySearch@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CRegistrySearch@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CThreadBase@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CThreadBase@@QAA@W4THREAD_SAFETY_MECHANISM@0@@Z()
|
||||
;@ cdecl -arch=arm ??0CWbemGlueFactory@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CWbemGlueFactory@@QAA@PAJ@Z()
|
||||
;@ cdecl -arch=arm ??0CWbemGlueFactory@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CWbemProviderGlue@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CWbemProviderGlue@@QAA@PAJ@Z()
|
||||
;@ cdecl -arch=arm ??0CWbemProviderGlue@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CWinMsgEvent@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0CWinMsgEvent@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0CreateMutexAsProcess@@QAA@PBG@Z()
|
||||
;@ cdecl -arch=arm ??0KeyRef@@QAA@PBGPBUtagVARIANT@@@Z()
|
||||
;@ cdecl -arch=arm ??0KeyRef@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0MethodContext@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0MethodContext@@QAA@PAUIWbemContext@@PAVCWbemProviderGlue@@@Z()
|
||||
;@ cdecl -arch=arm ??0ParsedObjectPath@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0Provider@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0Provider@@QAA@PBG0@Z()
|
||||
;@ cdecl -arch=arm ??0ProviderLog@@QAA@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??0ProviderLog@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0WBEMTime@@QAA@ABJ@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTime@@QAA@ABU_FILETIME@@@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTime@@QAA@ABU_SYSTEMTIME@@@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTime@@QAA@ABUtm@@@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTime@@QAA@QAG@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTime@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0WBEMTimeSpan@@QAA@ABJ@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTimeSpan@@QAA@ABU_FILETIME@@@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTimeSpan@@QAA@HHHHHHH@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTimeSpan@@QAA@QAG@Z()
|
||||
;@ cdecl -arch=arm ??0WBEMTimeSpan@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??0_Lockit@std@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CAutoEvent@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CFrameworkQuery@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CFrameworkQueryEx@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CHPtrArray@@QAA@XZ()
|
||||
@ cdecl -arch=arm ??1CHString@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CHStringArray@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CInstance@@UAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CObjectPathParser@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CRegistry@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CRegistrySearch@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CThreadBase@@UAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CWbemGlueFactory@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CWbemProviderGlue@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CWinMsgEvent@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1CreateMutexAsProcess@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1KeyRef@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1MethodContext@@UAA@XZ()
|
||||
;@ cdecl -arch=arm ??1ParsedObjectPath@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??1Provider@@UAA@XZ()
|
||||
;@ cdecl -arch=arm ??1ProviderLog@@UAA@XZ()
|
||||
;@ cdecl -arch=arm ??1_Lockit@std@@QAA@XZ()
|
||||
;@ cdecl -arch=arm ??4CAutoEvent@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CFrameworkQuery@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CFrameworkQueryEx@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CHPtrArray@@QAAAAV0@ABV0@@Z()
|
||||
@ cdecl -arch=arm ??4CHString@@QAAABV0@ABV0@@Z()
|
||||
@ cdecl -arch=arm ??4CHString@@QAAABV0@D@Z()
|
||||
@ cdecl -arch=arm ??4CHString@@QAAABV0@G@Z()
|
||||
@ cdecl -arch=arm ??4CHString@@QAAABV0@PAV0@@Z()
|
||||
@ cdecl -arch=arm ??4CHString@@QAAABV0@PBD@Z()
|
||||
@ cdecl -arch=arm ??4CHString@@QAAABV0@PBE@Z()
|
||||
@ cdecl -arch=arm ??4CHString@@QAAABV0@PBG@Z()
|
||||
;@ cdecl -arch=arm ??4CHStringArray@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CInstance@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CObjectPathParser@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CRegistry@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CRegistrySearch@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CThreadBase@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CWbemGlueFactory@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CWbemProviderGlue@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CWinMsgEvent@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4CreateMutexAsProcess@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4KeyRef@@QAAAAU0@ABU0@@Z()
|
||||
;@ cdecl -arch=arm ??4MethodContext@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4ParsedObjectPath@@QAAAAU0@ABU0@@Z()
|
||||
;@ cdecl -arch=arm ??4Provider@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4ProviderLog@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTime@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTime@@QAAABV0@ABJ@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTime@@QAAABV0@ABU_FILETIME@@@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTime@@QAAABV0@ABU_SYSTEMTIME@@@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTime@@QAAABV0@ABUtm@@@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTime@@QAAABV0@QAG@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTimeSpan@@QAAAAV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTimeSpan@@QAAABV0@ABJ@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTimeSpan@@QAAABV0@ABU_FILETIME@@@Z()
|
||||
;@ cdecl -arch=arm ??4WBEMTimeSpan@@QAAABV0@QAG@Z()
|
||||
;@ cdecl -arch=arm ??8WBEMTime@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??8WBEMTimeSpan@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??9WBEMTime@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??9WBEMTimeSpan@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??ACHPtrArray@@QAAAAPAXH@Z()
|
||||
;@ cdecl -arch=arm ??ACHPtrArray@@QBAPAXH@Z()
|
||||
@ cdecl -arch=arm ??ACHString@@QBAGH@Z()
|
||||
;@ cdecl -arch=arm ??ACHStringArray@@QAAAAVCHString@@H@Z()
|
||||
;@ cdecl -arch=arm ??ACHStringArray@@QBA?AVCHString@@H@Z()
|
||||
@ cdecl -arch=arm ??BCHString@@QBAPBGXZ()
|
||||
;@ cdecl -arch=arm ??GWBEMTime@@QAA?AVWBEMTimeSpan@@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??GWBEMTime@@QBA?AV0@ABVWBEMTimeSpan@@@Z()
|
||||
;@ cdecl -arch=arm ??GWBEMTimeSpan@@QBA?AV0@ABV0@@Z()
|
||||
@ cdecl -arch=arm ??H@YA?AVCHString@@ABV0@0@Z()
|
||||
@ cdecl -arch=arm ??H@YA?AVCHString@@ABV0@G@Z()
|
||||
@ cdecl -arch=arm ??H@YA?AVCHString@@ABV0@PBG@Z()
|
||||
@ cdecl -arch=arm ??H@YA?AVCHString@@GABV0@@Z()
|
||||
@ cdecl -arch=arm ??H@YA?AVCHString@@PBGABV0@@Z()
|
||||
;@ cdecl -arch=arm ??HWBEMTime@@QBA?AV0@ABVWBEMTimeSpan@@@Z()
|
||||
;@ cdecl -arch=arm ??HWBEMTimeSpan@@QBA?AV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??MWBEMTime@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??MWBEMTimeSpan@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??NWBEMTime@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??NWBEMTimeSpan@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??OWBEMTime@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??OWBEMTimeSpan@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??PWBEMTime@@QBAHABV0@@Z()
|
||||
;@ cdecl -arch=arm ??PWBEMTimeSpan@@QBAHABV0@@Z()
|
||||
@ cdecl -arch=arm ??YCHString@@QAAABV0@ABV0@@Z()
|
||||
@ cdecl -arch=arm ??YCHString@@QAAABV0@D@Z()
|
||||
@ cdecl -arch=arm ??YCHString@@QAAABV0@G@Z()
|
||||
@ cdecl -arch=arm ??YCHString@@QAAABV0@PBG@Z()
|
||||
;@ cdecl -arch=arm ??YWBEMTime@@QAAABV0@ABVWBEMTimeSpan@@@Z()
|
||||
;@ cdecl -arch=arm ??YWBEMTimeSpan@@QAAABV0@ABV0@@Z()
|
||||
;@ cdecl -arch=arm ??ZWBEMTime@@QAAABV0@ABVWBEMTimeSpan@@@Z()
|
||||
;@ cdecl -arch=arm ??ZWBEMTimeSpan@@QAAABV0@ABV0@@Z()
|
||||
;@ extern -arch=arm ??_7CFrameworkQueryEx@@6B@
|
||||
;@ extern -arch=arm ??_7CInstance@@6B@
|
||||
;@ extern -arch=arm ??_7CThreadBase@@6B@
|
||||
;@ extern -arch=arm ??_7CWbemGlueFactory@@6B@
|
||||
;@ extern -arch=arm ??_7CWbemProviderGlue@@6BIWbemProviderInit@@@
|
||||
;@ extern -arch=arm ??_7CWbemProviderGlue@@6BIWbemServices@@@
|
||||
;@ extern -arch=arm ??_7CWinMsgEvent@@6B@
|
||||
;@ extern -arch=arm ??_7MethodContext@@6B@
|
||||
;@ extern -arch=arm ??_7Provider@@6B@
|
||||
;@ cdecl -arch=arm ??_7ProviderLog@@6B@()
|
||||
;@ cdecl -arch=arm ??_FCObjectPathParser@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ??_FCThreadBase@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?Add@CHPtrArray@@QAAHPAX@Z()
|
||||
;@ cdecl -arch=arm ?Add@CHStringArray@@QAAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?AddFlushPtr@CWbemProviderGlue@@AAAXPAX@Z()
|
||||
;@ cdecl -arch=arm ?AddKeyRef@ParsedObjectPath@@QAAHPAUKeyRef@@@Z()
|
||||
;@ cdecl -arch=arm ?AddKeyRef@ParsedObjectPath@@QAAHPBGPBUtagVARIANT@@@Z()
|
||||
;@ cdecl -arch=arm ?AddKeyRefEx@ParsedObjectPath@@QAAHPBGPBUtagVARIANT@@@Z()
|
||||
;@ cdecl -arch=arm ?AddNamespace@ParsedObjectPath@@QAAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?AddProviderToMap@CWbemProviderGlue@@CAPAVProvider@@PBG0PAV2@@Z()
|
||||
;@ cdecl -arch=arm ?AddRef@CInstance@@QAAJXZ()
|
||||
;@ cdecl -arch=arm ?AddRef@CThreadBase@@QAAJXZ()
|
||||
;@ cdecl -arch=arm ?AddRef@CWbemGlueFactory@@UAAKXZ()
|
||||
;@ cdecl -arch=arm ?AddRef@CWbemProviderGlue@@UAAKXZ()
|
||||
;@ cdecl -arch=arm ?AddRef@MethodContext@@QAAJXZ()
|
||||
;@ cdecl -arch=arm ?AddToFactoryMap@CWbemProviderGlue@@KAXPBVCWbemGlueFactory@@PAJ@Z()
|
||||
;@ cdecl -arch=arm ?AllPropertiesAreRequired@CFrameworkQuery@@QAA_NXZ()
|
||||
@ cdecl -arch=arm ?AllocBeforeWrite@CHString@@IAAXH@Z()
|
||||
@ cdecl -arch=arm ?AllocBuffer@CHString@@IAAXH@Z()
|
||||
@ cdecl -arch=arm ?AllocCopy@CHString@@IBAXAAV1@HHH@Z()
|
||||
@ cdecl -arch=arm ?AllocSysString@CHString@@QBAPAGXZ()
|
||||
;@ cdecl -arch=arm ?Append@CHPtrArray@@QAAHABV1@@Z()
|
||||
;@ cdecl -arch=arm ?Append@CHStringArray@@QAAHABV1@@Z()
|
||||
@ cdecl -arch=arm ?AssignCopy@CHString@@IAAXHPBG@Z()
|
||||
;@ cdecl -arch=arm ?BeginRead@CThreadBase@@QAAHK@Z()
|
||||
;@ cdecl -arch=arm ?BeginWrite@CThreadBase@@QAAHK@Z()
|
||||
;@ cdecl -arch=arm ?CancelAsyncCall@CWbemProviderGlue@@UAAJPAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?CancelAsyncRequest@CWbemProviderGlue@@UAAJJ@Z()
|
||||
;@ cdecl -arch=arm ?CheckAndAddToList@CRegistrySearch@@AAAXPAVCRegistry@@VCHString@@1AAVCHPtrArray@@11H@Z()
|
||||
;@ cdecl -arch=arm ?CheckFileSize@ProviderLog@@AAAXAAT_LARGE_INTEGER@@ABVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?CheckImpersonationLevel@CWbemProviderGlue@@CAJXZ()
|
||||
;@ cdecl -arch=arm ?Clear@WBEMTime@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?Clear@WBEMTimeSpan@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?ClearKeys@ParsedObjectPath@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?Close@CRegistry@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?CloseSubKey@CRegistry@@AAAXXZ()
|
||||
@ cdecl -arch=arm ?Collate@CHString@@QBAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?Commit@CInstance@@QAAJXZ()
|
||||
;@ cdecl -arch=arm ?Commit@Provider@@IAAJPAVCInstance@@_N@Z()
|
||||
@ cdecl -arch=arm ?Compare@CHString@@QBAHPBG@Z()
|
||||
@ cdecl -arch=arm ?CompareNoCase@CHString@@QBAHPBG@Z()
|
||||
@ cdecl -arch=arm ?ConcatCopy@CHString@@IAAXHPBGH0@Z()
|
||||
@ cdecl -arch=arm ?ConcatInPlace@CHString@@IAAXHPBG@Z()
|
||||
;@ cdecl -arch=arm ?Copy@CHPtrArray@@QAAXABV1@@Z()
|
||||
;@ cdecl -arch=arm ?Copy@CHStringArray@@QAAXABV1@@Z()
|
||||
@ cdecl -arch=arm ?CopyBeforeWrite@CHString@@IAAXXZ()
|
||||
;@ cdecl -arch=arm ?Create@CWbemGlueFactory@@SAPAV1@PAJ@Z()
|
||||
;@ cdecl -arch=arm ?Create@CWbemGlueFactory@@SAPAV1@XZ()
|
||||
;@ cdecl -arch=arm ?CreateClassEnum@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAPAUIEnumWbemClassObject@@@Z()
|
||||
;@ cdecl -arch=arm ?CreateClassEnumAsync@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?CreateInstance@CWbemGlueFactory@@UAAJPAUIUnknown@@ABU_GUID@@PAPAX@Z()
|
||||
;@ cdecl -arch=arm ?CreateInstanceEnum@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAPAUIEnumWbemClassObject@@@Z()
|
||||
;@ cdecl -arch=arm ?CreateInstanceEnum@Provider@@AAAJPAVMethodContext@@J@Z()
|
||||
;@ cdecl -arch=arm ?CreateInstanceEnumAsync@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?CreateMsgProvider@CWinMsgEvent@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?CreateMsgWindow@CWinMsgEvent@@CAPAUHWND__@@XZ()
|
||||
;@ cdecl -arch=arm ?CreateNewInstance@Provider@@IAAPAVCInstance@@PAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?CreateOpen@CRegistry@@QAAJPAUHKEY__@@PBGPAGKKPAU_SECURITY_ATTRIBUTES@@PAK@Z()
|
||||
;@ cdecl -arch=arm ?CtrlHandlerRoutine@CWinMsgEvent@@CAHK@Z()
|
||||
;@ cdecl -arch=arm ?DecrementMapCount@CWbemProviderGlue@@KAJPAJ@Z()
|
||||
;@ cdecl -arch=arm ?DecrementMapCount@CWbemProviderGlue@@KAJPBVCWbemGlueFactory@@@Z()
|
||||
;@ cdecl -arch=arm ?DecrementObjectCount@CWbemProviderGlue@@SAJXZ()
|
||||
;@ cdecl -arch=arm ?DeleteClass@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAPAUIWbemCallResult@@@Z()
|
||||
;@ cdecl -arch=arm ?DeleteClassAsync@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?DeleteCurrentKeyValue@CRegistry@@QAAKPAUHKEY__@@PBG@Z()
|
||||
;@ cdecl -arch=arm ?DeleteCurrentKeyValue@CRegistry@@QAAKPBG@Z()
|
||||
;@ cdecl -arch=arm ?DeleteInstance@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAPAUIWbemCallResult@@@Z()
|
||||
;@ cdecl -arch=arm ?DeleteInstance@Provider@@AAAJPAUParsedObjectPath@@JPAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?DeleteInstance@Provider@@MAAJABVCInstance@@J@Z()
|
||||
;@ cdecl -arch=arm ?DeleteInstanceAsync@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?DeleteKey@CRegistry@@QAAJPAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?DeleteValue@CRegistry@@QAAJPBG@Z()
|
||||
;@ cdecl -arch=arm ?Destroy@CWbemGlueFactory@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?DestroyMsgWindow@CWinMsgEvent@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?ElementAt@CHPtrArray@@QAAAAPAXH@Z()
|
||||
;@ cdecl -arch=arm ?ElementAt@CHStringArray@@QAAAAVCHString@@H@Z()
|
||||
@ cdecl -arch=arm ?Empty@CHString@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?Empty@CObjectPathParser@@AAAXXZ()
|
||||
;@ cdecl -arch=arm ?EndRead@CThreadBase@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?EndWrite@CThreadBase@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?EnumerateAndGetValues@CRegistry@@QAAJAAKAAPAGAAPAE@Z()
|
||||
;@ cdecl -arch=arm ?EnumerateInstances@Provider@@MAAJPAVMethodContext@@J@Z()
|
||||
;@ cdecl -arch=arm ?ExecMethod@CWbemProviderGlue@@UAAJQAG0JPAUIWbemContext@@PAUIWbemClassObject@@PAPAU3@PAPAUIWbemCallResult@@@Z()
|
||||
;@ cdecl -arch=arm ?ExecMethod@Provider@@AAAJPAUParsedObjectPath@@PAGJPAVCInstance@@2PAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?ExecMethod@Provider@@MAAJABVCInstance@@QAGPAV2@2J@Z()
|
||||
;@ cdecl -arch=arm ?ExecMethodAsync@CWbemProviderGlue@@UAAJQAG0JPAUIWbemContext@@PAUIWbemClassObject@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?ExecNotificationQuery@CWbemProviderGlue@@UAAJQAG0JPAUIWbemContext@@PAPAUIEnumWbemClassObject@@@Z()
|
||||
;@ cdecl -arch=arm ?ExecNotificationQueryAsync@CWbemProviderGlue@@UAAJQAG0JPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?ExecQuery@CWbemProviderGlue@@UAAJQAG0JPAUIWbemContext@@PAPAUIEnumWbemClassObject@@@Z()
|
||||
;@ cdecl -arch=arm ?ExecQuery@Provider@@MAAJPAVMethodContext@@AAVCFrameworkQuery@@J@Z()
|
||||
;@ cdecl -arch=arm ?ExecQueryAsync@CWbemProviderGlue@@UAAJQAG0JPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?ExecuteQuery@Provider@@AAAJPAVMethodContext@@AAVCFrameworkQuery@@J@Z()
|
||||
;@ cdecl -arch=arm ?FillInstance@CWbemProviderGlue@@SAJPAVCInstance@@PBG@Z()
|
||||
;@ cdecl -arch=arm ?FillInstance@CWbemProviderGlue@@SAJPAVMethodContext@@PAVCInstance@@@Z()
|
||||
@ cdecl -arch=arm ?Find@CHString@@QBAHG@Z()
|
||||
@ cdecl -arch=arm ?Find@CHString@@QBAHPBG@Z()
|
||||
@ cdecl -arch=arm ?FindOneOf@CHString@@QBAHPBG@Z()
|
||||
@ cdecl -arch=arm ?Flush@Provider@@MAAXXZ()
|
||||
;@ cdecl -arch=arm ?FlushAll@CWbemProviderGlue@@AAAXXZ()
|
||||
@ cdecl -arch=arm ?Format@CHString@@QAAXIZZ()
|
||||
@ cdecl -arch=arm ?Format@CHString@@QAAXPBGZZ()
|
||||
@ cdecl -arch=arm ?FormatMessageW@CHString@@QAAXIZZ()
|
||||
@ cdecl -arch=arm ?FormatMessageW@CHString@@QAAXPBGZZ()
|
||||
@ cdecl -arch=arm ?FormatV@CHString@@QAAXPBGPAD@Z()
|
||||
;@ cdecl -arch=arm ?FrameworkLogin@CWbemProviderGlue@@SAXPBGPAVProvider@@0@Z()
|
||||
;@ cdecl -arch=arm ?FrameworkLoginDLL@CWbemProviderGlue@@SAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?FrameworkLoginDLL@CWbemProviderGlue@@SAHPBGPAJ@Z()
|
||||
;@ cdecl -arch=arm ?FrameworkLogoff@CWbemProviderGlue@@SAXPBG0@Z()
|
||||
;@ cdecl -arch=arm ?FrameworkLogoffDLL@CWbemProviderGlue@@SAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?FrameworkLogoffDLL@CWbemProviderGlue@@SAHPBGPAJ@Z()
|
||||
;@ cdecl -arch=arm ?Free@CObjectPathParser@@QAAXPAUParsedObjectPath@@@Z()
|
||||
;@ cdecl -arch=arm ?FreeExtra@CHPtrArray@@QAAXXZ()
|
||||
@ cdecl -arch=arm ?FreeExtra@CHString@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?FreeExtra@CHStringArray@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?FreeSearchList@CRegistrySearch@@QAAHHAAVCHPtrArray@@@Z()
|
||||
;@ cdecl -arch=arm ?GetAllDerivedInstances@CWbemProviderGlue@@SAJPBGPAV?$TRefPointerCollection@VCInstance@@@@PAVMethodContext@@0@Z()
|
||||
;@ cdecl -arch=arm ?GetAllDerivedInstancesAsynch@CWbemProviderGlue@@SAJPBGPAVProvider@@P6AJ1PAVCInstance@@PAVMethodContext@@PAX@Z034@Z()
|
||||
;@ cdecl -arch=arm ?GetAllInstances@CWbemProviderGlue@@SAJPBGPAV?$TRefPointerCollection@VCInstance@@@@0PAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?GetAllInstancesAsynch@CWbemProviderGlue@@SAJPBGPAVProvider@@P6AJ1PAVCInstance@@PAVMethodContext@@PAX@Z034@Z()
|
||||
@ cdecl -arch=arm ?GetAllocLength@CHString@@QBAHXZ()
|
||||
;@ cdecl -arch=arm ?GetAt@CHPtrArray@@QBAPAXH@Z()
|
||||
@ cdecl -arch=arm ?GetAt@CHString@@QBAGH@Z()
|
||||
;@ cdecl -arch=arm ?GetAt@CHStringArray@@QBA?AVCHString@@H@Z()
|
||||
;@ cdecl -arch=arm ?GetBSTR@WBEMTime@@QBAPAGXZ()
|
||||
;@ cdecl -arch=arm ?GetBSTR@WBEMTimeSpan@@QBAPAGXZ()
|
||||
@ cdecl -arch=arm ?GetBuffer@CHString@@QAAPAGH@Z()
|
||||
@ cdecl -arch=arm ?GetBufferSetLength@CHString@@QAAPAGH@Z()
|
||||
;@ cdecl -arch=arm ?GetByte@CInstance@@QBA_NPBGAAE@Z()
|
||||
;@ cdecl -arch=arm ?GetCHString@CInstance@@QBA_NPBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCSDVersion@CWbemProviderGlue@@SAPBGXZ()
|
||||
;@ cdecl -arch=arm ?GetClassNameW@CRegistry@@QAAPAGXZ()
|
||||
;@ cdecl -arch=arm ?GetClassObjectInterface@CInstance@@QAAPAUIWbemClassObject@@XZ()
|
||||
;@ cdecl -arch=arm ?GetClassObjectInterface@Provider@@AAAPAUIWbemClassObject@@PAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?GetComputerNameW@CWbemProviderGlue@@CAXAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentBinaryKeyValue@CRegistry@@QAAKPAUHKEY__@@PBGPAEPAK@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentBinaryKeyValue@CRegistry@@QAAKPBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentBinaryKeyValue@CRegistry@@QAAKPBGPAEPAK@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentKeyValue@CRegistry@@QAAKPAUHKEY__@@PBGAAK@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentKeyValue@CRegistry@@QAAKPAUHKEY__@@PBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentKeyValue@CRegistry@@QAAKPAUHKEY__@@PBGAAVCHStringArray@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentKeyValue@CRegistry@@QAAKPBGAAK@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentKeyValue@CRegistry@@QAAKPBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentKeyValue@CRegistry@@QAAKPBGAAVCHStringArray@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentRawKeyValue@CRegistry@@AAAKPAUHKEY__@@PBGPAXPAK3@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentRawSubKeyValue@CRegistry@@AAAKPBGPAXPAK2@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentSubKeyCount@CRegistry@@QAAKXZ()
|
||||
;@ cdecl -arch=arm ?GetCurrentSubKeyName@CRegistry@@QAAKAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentSubKeyPath@CRegistry@@QAAKAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentSubKeyValue@CRegistry@@QAAKPBGAAK@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentSubKeyValue@CRegistry@@QAAKPBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetCurrentSubKeyValue@CRegistry@@QAAKPBGPAXPAK@Z()
|
||||
;@ cdecl -arch=arm ?GetDMTF@WBEMTime@@QBAPAGH@Z()
|
||||
;@ cdecl -arch=arm ?GetDMTFNonNtfs@WBEMTime@@QBAPAGXZ()
|
||||
;@ cdecl -arch=arm ?GetDOUBLE@CInstance@@QBA_NPBGAAN@Z()
|
||||
;@ cdecl -arch=arm ?GetDWORD@CInstance@@QBA_NPBGAAK@Z()
|
||||
;@ cdecl -arch=arm ?GetData@CHPtrArray@@QAAPAPAXXZ()
|
||||
;@ cdecl -arch=arm ?GetData@CHPtrArray@@QBAPAPBXXZ()
|
||||
@ cdecl -arch=arm ?GetData@CHString@@IBAPAUCHStringData@@XZ()
|
||||
;@ cdecl -arch=arm ?GetData@CHStringArray@@QAAPAVCHString@@XZ()
|
||||
;@ cdecl -arch=arm ?GetData@CHStringArray@@QBAPBVCHString@@XZ()
|
||||
;@ cdecl -arch=arm ?GetDateTime@CInstance@@QBA_NPBGAAVWBEMTime@@@Z()
|
||||
;@ cdecl -arch=arm ?GetEmbeddedObject@CInstance@@QBA_NPBGPAPAV1@PAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?GetEmptyInstance@CWbemProviderGlue@@SAJPAVMethodContext@@PBGPAPAVCInstance@@1@Z()
|
||||
;@ cdecl -arch=arm ?GetEmptyInstance@CWbemProviderGlue@@SAJPBGPAPAVCInstance@@0@Z()
|
||||
;@ cdecl -arch=arm ?GetFILETIME@WBEMTime@@QBAHPAU_FILETIME@@@Z()
|
||||
;@ cdecl -arch=arm ?GetFILETIME@WBEMTimeSpan@@QBAHPAU_FILETIME@@@Z()
|
||||
;@ cdecl -arch=arm ?GetIWBEMContext@MethodContext@@UAAPAUIWbemContext@@XZ()
|
||||
;@ cdecl -arch=arm ?GetInstanceByPath@CWbemProviderGlue@@SAJPBGPAPAVCInstance@@PAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?GetInstanceFromCIMOM@CWbemProviderGlue@@CAJPBG0PAVMethodContext@@PAPAVCInstance@@@Z()
|
||||
;@ cdecl -arch=arm ?GetInstanceKeysByPath@CWbemProviderGlue@@SAJPBGPAPAVCInstance@@PAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?GetInstancePropertiesByPath@CWbemProviderGlue@@SAJPBGPAPAVCInstance@@PAVMethodContext@@AAVCHStringArray@@@Z()
|
||||
;@ cdecl -arch=arm ?GetInstancesByQuery@CWbemProviderGlue@@SAJPBGPAV?$TRefPointerCollection@VCInstance@@@@PAVMethodContext@@0@Z()
|
||||
;@ cdecl -arch=arm ?GetInstancesByQueryAsynch@CWbemProviderGlue@@SAJPBGPAVProvider@@P6AJ1PAVCInstance@@PAVMethodContext@@PAX@Z034@Z()
|
||||
;@ cdecl -arch=arm ?GetKeyString@ParsedObjectPath@@QAAPAGXZ()
|
||||
@ cdecl -arch=arm ?GetLength@CHString@@QBAHXZ()
|
||||
;@ cdecl -arch=arm ?GetLocalComputerName@Provider@@IAAABVCHString@@XZ()
|
||||
;@ cdecl -arch=arm ?GetLocalInstancePath@Provider@@IAA_NPBVCInstance@@AAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetLocalOffsetForDate@WBEMTime@@SAJABJ@Z()
|
||||
;@ cdecl -arch=arm ?GetLocalOffsetForDate@WBEMTime@@SAJPBU_FILETIME@@@Z()
|
||||
;@ cdecl -arch=arm ?GetLocalOffsetForDate@WBEMTime@@SAJPBU_SYSTEMTIME@@@Z()
|
||||
;@ cdecl -arch=arm ?GetLocalOffsetForDate@WBEMTime@@SAJPBUtm@@@Z()
|
||||
;@ cdecl -arch=arm ?GetLongestClassStringSize@CRegistry@@QAAKXZ()
|
||||
;@ cdecl -arch=arm ?GetLongestSubKeySize@CRegistry@@QAAKXZ()
|
||||
;@ cdecl -arch=arm ?GetLongestValueData@CRegistry@@QAAKXZ()
|
||||
;@ cdecl -arch=arm ?GetLongestValueName@CRegistry@@QAAKXZ()
|
||||
;@ cdecl -arch=arm ?GetMapCountPtr@CWbemProviderGlue@@KAPAJPBVCWbemGlueFactory@@@Z()
|
||||
;@ cdecl -arch=arm ?GetMethodContext@CInstance@@QBAPAVMethodContext@@XZ()
|
||||
;@ cdecl -arch=arm ?GetNamespace@CFrameworkQuery@@IAAABVCHString@@XZ()
|
||||
;@ cdecl -arch=arm ?GetNamespace@Provider@@IAAABVCHString@@XZ()
|
||||
;@ cdecl -arch=arm ?GetNamespaceConnection@CWbemProviderGlue@@SAPAUIWbemServices@@PBG@Z()
|
||||
;@ cdecl -arch=arm ?GetNamespaceConnection@CWbemProviderGlue@@SAPAUIWbemServices@@PBGPAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?GetNamespacePart@ParsedObjectPath@@QAAPAGXZ()
|
||||
;@ cdecl -arch=arm ?GetOSMajorVersion@CWbemProviderGlue@@SAKXZ()
|
||||
;@ cdecl -arch=arm ?GetObject@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAPAUIWbemClassObject@@PAPAUIWbemCallResult@@@Z()
|
||||
;@ cdecl -arch=arm ?GetObject@Provider@@AAAJPAUParsedObjectPath@@PAVMethodContext@@J@Z()
|
||||
;@ cdecl -arch=arm ?GetObject@Provider@@MAAJPAVCInstance@@J@Z()
|
||||
;@ cdecl -arch=arm ?GetObject@Provider@@MAAJPAVCInstance@@JAAVCFrameworkQuery@@@Z()
|
||||
;@ cdecl -arch=arm ?GetObjectAsync@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?GetParentNamespacePart@ParsedObjectPath@@QAAPAGXZ()
|
||||
;@ cdecl -arch=arm ?GetPlatform@CWbemProviderGlue@@SAKXZ()
|
||||
;@ cdecl -arch=arm ?GetPropertyBitMask@CFrameworkQueryEx@@QAAXABVCHPtrArray@@PAX@Z()
|
||||
;@ cdecl -arch=arm ?GetProviderGlue@MethodContext@@AAAPAVCWbemProviderGlue@@XZ()
|
||||
;@ cdecl -arch=arm ?GetProviderName@Provider@@IAAABVCHString@@XZ()
|
||||
;@ cdecl -arch=arm ?GetQuery@CFrameworkQuery@@QAAABVCHString@@XZ()
|
||||
;@ cdecl -arch=arm ?GetQueryClassName@CFrameworkQuery@@QAAPAGXZ()
|
||||
;@ cdecl -arch=arm ?GetRelativePath@CObjectPathParser@@SAPAGPAG@Z()
|
||||
;@ cdecl -arch=arm ?GetRequiredProperties@CFrameworkQuery@@QAAXAAVCHStringArray@@@Z()
|
||||
;@ cdecl -arch=arm ?GetSYSTEMTIME@WBEMTime@@QBAHPAU_SYSTEMTIME@@@Z()
|
||||
;@ cdecl -arch=arm ?GetSize@CHPtrArray@@QBAHXZ()
|
||||
;@ cdecl -arch=arm ?GetSize@CHStringArray@@QBAHXZ()
|
||||
;@ cdecl -arch=arm ?GetStatus@CInstance@@QBA_NPBGAA_NAAG@Z()
|
||||
;@ cdecl -arch=arm ?GetStatusObject@CWbemProviderGlue@@CAPAUIWbemClassObject@@PAVMethodContext@@PBG@Z()
|
||||
;@ cdecl -arch=arm ?GetStatusObject@MethodContext@@QAAPAUIWbemClassObject@@XZ()
|
||||
;@ cdecl -arch=arm ?GetStringArray@CInstance@@QBA_NPBGAAPAUtagSAFEARRAY@@@Z()
|
||||
;@ cdecl -arch=arm ?GetStructtm@WBEMTime@@QBAHPAUtm@@@Z()
|
||||
;@ cdecl -arch=arm ?GetTime@WBEMTime@@QBA_KXZ()
|
||||
;@ cdecl -arch=arm ?GetTime@WBEMTimeSpan@@QBA_KXZ()
|
||||
;@ cdecl -arch=arm ?GetTimeSpan@CInstance@@QBA_NPBGAAVWBEMTimeSpan@@@Z()
|
||||
;@ cdecl -arch=arm ?GetUpperBound@CHPtrArray@@QBAHXZ()
|
||||
;@ cdecl -arch=arm ?GetUpperBound@CHStringArray@@QBAHXZ()
|
||||
;@ cdecl -arch=arm ?GetValueCount@CRegistry@@QAAKXZ()
|
||||
;@ cdecl -arch=arm ?GetValuesForProp@CFrameworkQuery@@QAAJPBGAAV?$vector@V_bstr_t@@V?$allocator@V_bstr_t@@@std@@@std@@@Z()
|
||||
;@ cdecl -arch=arm ?GetValuesForProp@CFrameworkQuery@@QAAJPBGAAVCHStringArray@@@Z()
|
||||
;@ cdecl -arch=arm ?GetValuesForProp@CFrameworkQueryEx@@QAAJPBGAAV?$vector@HV?$allocator@H@std@@@std@@@Z()
|
||||
;@ cdecl -arch=arm ?GetValuesForProp@CFrameworkQueryEx@@QAAJPBGAAV?$vector@V_variant_t@@V?$allocator@V_variant_t@@@std@@@std@@@Z()
|
||||
;@ cdecl -arch=arm ?GetVariant@CInstance@@QBA_NPBGAAUtagVARIANT@@@Z()
|
||||
;@ cdecl -arch=arm ?GetWBEMINT16@CInstance@@QBA_NPBGAAF@Z()
|
||||
;@ cdecl -arch=arm ?GetWBEMINT64@CInstance@@QBA_NPBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?GetWBEMINT64@CInstance@@QBA_NPBGAA_J@Z()
|
||||
;@ cdecl -arch=arm ?GetWBEMINT64@CInstance@@QBA_NPBGAA_K@Z()
|
||||
;@ cdecl -arch=arm ?GetWCHAR@CInstance@@QBA_NPBGPAPAG@Z()
|
||||
;@ cdecl -arch=arm ?GetWORD@CInstance@@QBA_NPBGAAG@Z()
|
||||
;@ cdecl -arch=arm ?Getbool@CInstance@@QBA_NPBGAA_N@Z()
|
||||
;@ cdecl -arch=arm ?GethKey@CRegistry@@QAAPAUHKEY__@@XZ()
|
||||
;@ cdecl -arch=arm ?Gettime_t@WBEMTime@@QBAHPAJ@Z()
|
||||
;@ cdecl -arch=arm ?Gettime_t@WBEMTimeSpan@@QBAHPAJ@Z()
|
||||
;@ cdecl -arch=arm ?IncrementMapCount@CWbemProviderGlue@@KAJPAJ@Z()
|
||||
;@ cdecl -arch=arm ?IncrementMapCount@CWbemProviderGlue@@KAJPBVCWbemGlueFactory@@@Z()
|
||||
;@ cdecl -arch=arm ?IncrementObjectCount@CWbemProviderGlue@@SAXXZ()
|
||||
;@ cdecl -arch=arm ?Init2@CFrameworkQuery@@QAAXPAUIWbemClassObject@@@Z()
|
||||
;@ cdecl -arch=arm ?Init@CFrameworkQuery@@QAAJPAUParsedObjectPath@@PAUIWbemContext@@PBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?Init@CFrameworkQuery@@QAAJQAG0JAAVCHString@@@Z()
|
||||
@ cdecl -arch=arm ?Init@CHString@@IAAXXZ()
|
||||
;@ cdecl -arch=arm ?Init@CWbemProviderGlue@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?InitComputerName@Provider@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?InitEx@CFrameworkQueryEx@@UAAJQAG0JAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?Initialize@CWbemProviderGlue@@UAAJPAGJ00PAUIWbemServices@@PAUIWbemContext@@PAUIWbemProviderInitSink@@@Z()
|
||||
;@ cdecl -arch=arm ?InsertAt@CHPtrArray@@QAAXHPAV1@@Z()
|
||||
;@ cdecl -arch=arm ?InsertAt@CHPtrArray@@QAAXHPAXH@Z()
|
||||
;@ cdecl -arch=arm ?InsertAt@CHStringArray@@QAAXHPAV1@@Z()
|
||||
;@ cdecl -arch=arm ?InsertAt@CHStringArray@@QAAXHPBGH@Z()
|
||||
;@ cdecl -arch=arm ?InternalGetNamespaceConnection@CWbemProviderGlue@@AAAPAUIWbemServices@@PBG@Z()
|
||||
;@ cdecl -arch=arm ?Is3TokenOR@CFrameworkQueryEx@@QAAHPBG0AAUtagVARIANT@@1@Z()
|
||||
;@ cdecl -arch=arm ?IsClass@ParsedObjectPath@@QAAHXZ()
|
||||
;@ cdecl -arch=arm ?IsDerivedFrom@CWbemProviderGlue@@SA_NPBG0PAVMethodContext@@0@Z()
|
||||
@ cdecl -arch=arm ?IsEmpty@CHString@@QBAHXZ()
|
||||
;@ cdecl -arch=arm ?IsExtended@CFrameworkQueryEx@@UAA_NXZ()
|
||||
;@ cdecl -arch=arm ?IsInList@CFrameworkQuery@@IAAKABVCHStringArray@@PBG@Z()
|
||||
;@ cdecl -arch=arm ?IsInstance@ParsedObjectPath@@QAAHXZ()
|
||||
;@ cdecl -arch=arm ?IsLocal@ParsedObjectPath@@QAAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?IsLoggingOn@ProviderLog@@QAA?AW4LogLevel@1@PAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?IsNTokenAnd@CFrameworkQueryEx@@QAAHAAVCHStringArray@@AAVCHPtrArray@@@Z()
|
||||
;@ cdecl -arch=arm ?IsNull@CInstance@@QBA_NPBG@Z()
|
||||
;@ cdecl -arch=arm ?IsObject@ParsedObjectPath@@QAAHXZ()
|
||||
;@ cdecl -arch=arm ?IsOk@WBEMTime@@QBA_NXZ()
|
||||
;@ cdecl -arch=arm ?IsOk@WBEMTimeSpan@@QBA_NXZ()
|
||||
;@ cdecl -arch=arm ?IsPropertyRequired@CFrameworkQuery@@QAA_NPBG@Z()
|
||||
;@ cdecl -arch=arm ?IsReference@CFrameworkQuery@@IAAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?IsRelative@ParsedObjectPath@@QAAHPBG0@Z()
|
||||
;@ cdecl -arch=arm ?KeysOnly@CFrameworkQuery@@QAA_NXZ()
|
||||
@ cdecl -arch=arm ?Left@CHString@@QBA?AV1@H@Z()
|
||||
@ cdecl -arch=arm ?LoadStringW@CHString@@IAAHIPAGI@Z()
|
||||
@ cdecl -arch=arm ?LoadStringW@CHString@@QAAHI@Z()
|
||||
;@ cdecl -arch=arm ?LocalLogMessage@ProviderLog@@QAAXPBG0HW4LogLevel@1@@Z()
|
||||
;@ cdecl -arch=arm ?LocalLogMessage@ProviderLog@@QAAXPBGHW4LogLevel@1@0ZZ()
|
||||
;@ cdecl -arch=arm ?LocateKeyByNameOrValueName@CRegistrySearch@@QAAHPAUHKEY__@@PBG1PAPBGKAAVCHString@@3@Z()
|
||||
;@ cdecl -arch=arm ?Lock@CThreadBase@@AAAXXZ()
|
||||
@ cdecl -arch=arm ?LockBuffer@CHString@@QAAPAGXZ()
|
||||
;@ cdecl -arch=arm ?LockFactoryMap@CWbemProviderGlue@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?LockProviderMap@CWbemProviderGlue@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?LockServer@CWbemGlueFactory@@UAAJH@Z()
|
||||
;@ cdecl -arch=arm ?LogError@CInstance@@IBAXPBG00J@Z()
|
||||
;@ cdecl -arch=arm ?MakeLocalPath@Provider@@IAA?AVCHString@@ABV2@@Z()
|
||||
@ cdecl -arch=arm ?MakeLower@CHString@@QAAXXZ()
|
||||
@ cdecl -arch=arm ?MakeReverse@CHString@@QAAXXZ()
|
||||
@ cdecl -arch=arm ?MakeUpper@CHString@@QAAXXZ()
|
||||
@ cdecl -arch=arm ?Mid@CHString@@QBA?AV1@H@Z()
|
||||
@ cdecl -arch=arm ?Mid@CHString@@QBA?AV1@HH@Z()
|
||||
;@ cdecl -arch=arm ?MsgWndProc@CWinMsgEvent@@CAJPAUHWND__@@IIJ@Z()
|
||||
;@ cdecl -arch=arm ?NextSubKey@CRegistry@@QAAKXZ()
|
||||
;@ cdecl -arch=arm ?NextToken@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?NormalizePath@@YAKPBG00KAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?NullOutUnsetProperties@CWbemProviderGlue@@AAAJPAUIWbemClassObject@@PAPAU2@ABUtagVARIANT@@@Z()
|
||||
;@ cdecl -arch=arm ?OnFinalRelease@CThreadBase@@MAAXXZ()
|
||||
;@ cdecl -arch=arm ?Open@CRegistry@@QAAJPAUHKEY__@@PBGK@Z()
|
||||
;@ cdecl -arch=arm ?OpenAndEnumerateSubKeys@CRegistry@@QAAJPAUHKEY__@@PBGK@Z()
|
||||
;@ cdecl -arch=arm ?OpenCurrentUser@CRegistry@@QAAKPBGK@Z()
|
||||
;@ cdecl -arch=arm ?OpenLocalMachineKeyAndReadValue@CRegistry@@QAAJPBG0AAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?OpenNamespace@CWbemProviderGlue@@UAAJQAGJPAUIWbemContext@@PAPAUIWbemServices@@PAPAUIWbemCallResult@@@Z()
|
||||
;@ cdecl -arch=arm ?OpenSubKey@CRegistry@@AAAKXZ()
|
||||
;@ cdecl -arch=arm ?Parse@CObjectPathParser@@QAAHPBGPAPAUParsedObjectPath@@@Z()
|
||||
;@ cdecl -arch=arm ?PreProcessPutInstanceParms@CWbemProviderGlue@@AAAJPAUIWbemClassObject@@PAPAU2@PAUIWbemContext@@@Z()
|
||||
;@ cdecl -arch=arm ?PrepareToReOpen@CRegistry@@AAAXXZ()
|
||||
;@ cdecl -arch=arm ?PutClass@CWbemProviderGlue@@UAAJPAUIWbemClassObject@@JPAUIWbemContext@@PAPAUIWbemCallResult@@@Z()
|
||||
;@ cdecl -arch=arm ?PutClassAsync@CWbemProviderGlue@@UAAJPAUIWbemClassObject@@JPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?PutInstance@CWbemProviderGlue@@UAAJPAUIWbemClassObject@@JPAUIWbemContext@@PAPAUIWbemCallResult@@@Z()
|
||||
;@ cdecl -arch=arm ?PutInstance@Provider@@AAAJPAUIWbemClassObject@@JPAVMethodContext@@@Z()
|
||||
;@ cdecl -arch=arm ?PutInstance@Provider@@MAAJABVCInstance@@J@Z()
|
||||
;@ cdecl -arch=arm ?PutInstanceAsync@CWbemProviderGlue@@UAAJPAUIWbemClassObject@@JPAUIWbemContext@@PAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?QueryInterface@CWbemGlueFactory@@UAAJABU_GUID@@PAPAX@Z()
|
||||
;@ cdecl -arch=arm ?QueryInterface@CWbemProviderGlue@@UAAJABU_GUID@@PAPAX@Z()
|
||||
;@ cdecl -arch=arm ?QueryObjectSink@CWbemProviderGlue@@UAAJJPAPAUIWbemObjectSink@@@Z()
|
||||
;@ cdecl -arch=arm ?QueryPostProcess@MethodContext@@UAAXXZ()
|
||||
;@ cdecl -arch=arm ?RegisterForMessage@CWinMsgEvent@@IAAXIH@Z()
|
||||
# @ cdecl -arch=arm ?Release@CHString@@QAAXXZ() # FIXME!
|
||||
# @ cdecl -arch=arm ?Release@CHString@@SAXPAUCHStringData@@@Z() # FIXME!
|
||||
;@ cdecl -arch=arm ?Release@CInstance@@QAAJXZ()
|
||||
;@ cdecl -arch=arm ?Release@CThreadBase@@QAAJXZ()
|
||||
;@ cdecl -arch=arm ?Release@CWbemGlueFactory@@UAAKXZ()
|
||||
;@ cdecl -arch=arm ?Release@CWbemProviderGlue@@UAAKXZ()
|
||||
;@ cdecl -arch=arm ?Release@MethodContext@@QAAJXZ()
|
||||
@ cdecl -arch=arm ?ReleaseBuffer@CHString@@QAAXH@Z()
|
||||
;@ cdecl -arch=arm ?RemoveAll@CHPtrArray@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?RemoveAll@CHStringArray@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?RemoveAt@CHPtrArray@@QAAXHH@Z()
|
||||
;@ cdecl -arch=arm ?RemoveAt@CHStringArray@@QAAXHH@Z()
|
||||
;@ cdecl -arch=arm ?RemoveFromFactoryMap@CWbemProviderGlue@@KAXPBVCWbemGlueFactory@@@Z()
|
||||
;@ cdecl -arch=arm ?Reset@CFrameworkQuery@@AAAXXZ()
|
||||
@ cdecl -arch=arm ?ReverseFind@CHString@@QBAHG@Z()
|
||||
;@ cdecl -arch=arm ?RewindSubKeys@CRegistry@@QAAXXZ()
|
||||
@ cdecl -arch=arm ?Right@CHString@@QBA?AV1@H@Z()
|
||||
@ cdecl -arch=arm ?SafeStrlen@CHString@@KAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?SearchAndBuildList@CRegistrySearch@@QAAHVCHString@@AAVCHPtrArray@@00HPAUHKEY__@@@Z()
|
||||
;@ cdecl -arch=arm ?SearchMapForProvider@CWbemProviderGlue@@CAPAVProvider@@PBG0@Z()
|
||||
;@ cdecl -arch=arm ?SetAt@CHPtrArray@@QAAXHPAX@Z()
|
||||
@ cdecl -arch=arm ?SetAt@CHString@@QAAXHG@Z()
|
||||
;@ cdecl -arch=arm ?SetAt@CHStringArray@@QAAXHPBG@Z()
|
||||
;@ cdecl -arch=arm ?SetAtGrow@CHPtrArray@@QAAXHPAX@Z()
|
||||
;@ cdecl -arch=arm ?SetAtGrow@CHStringArray@@QAAXHPBG@Z()
|
||||
;@ cdecl -arch=arm ?SetByte@CInstance@@QAA_NPBGE@Z()
|
||||
;@ cdecl -arch=arm ?SetCHString@CInstance@@QAA_NPBG0@Z()
|
||||
;@ cdecl -arch=arm ?SetCHString@CInstance@@QAA_NPBGABVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?SetCHString@CInstance@@QAA_NPBGPBD@Z()
|
||||
;@ cdecl -arch=arm ?SetCHStringResourceHandle@@YAXPAUHINSTANCE__@@@Z()
|
||||
;@ cdecl -arch=arm ?SetCharSplat@CInstance@@QAA_NPBG0@Z()
|
||||
;@ cdecl -arch=arm ?SetCharSplat@CInstance@@QAA_NPBGK@Z()
|
||||
;@ cdecl -arch=arm ?SetCharSplat@CInstance@@QAA_NPBGPBD@Z()
|
||||
;@ cdecl -arch=arm ?SetClassName@ParsedObjectPath@@QAAHPBG@Z()
|
||||
;@ cdecl -arch=arm ?SetCreationClassName@Provider@@IAA_NPAVCInstance@@@Z()
|
||||
;@ cdecl -arch=arm ?SetCurrentKeyValue@CRegistry@@QAAKPAUHKEY__@@PBGAAK@Z()
|
||||
;@ cdecl -arch=arm ?SetCurrentKeyValue@CRegistry@@QAAKPAUHKEY__@@PBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?SetCurrentKeyValue@CRegistry@@QAAKPAUHKEY__@@PBGAAVCHStringArray@@@Z()
|
||||
;@ cdecl -arch=arm ?SetCurrentKeyValue@CRegistry@@QAAKPBGAAK@Z()
|
||||
;@ cdecl -arch=arm ?SetCurrentKeyValue@CRegistry@@QAAKPBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?SetCurrentKeyValue@CRegistry@@QAAKPBGAAVCHStringArray@@@Z()
|
||||
;@ cdecl -arch=arm ?SetCurrentKeyValueExpand@CRegistry@@QAAKPAUHKEY__@@PBGAAVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?SetDMTF@WBEMTime@@QAAHQAG@Z()
|
||||
;@ cdecl -arch=arm ?SetDOUBLE@CInstance@@QAA_NPBGN@Z()
|
||||
;@ cdecl -arch=arm ?SetDWORD@CInstance@@QAA_NPBGK@Z()
|
||||
;@ cdecl -arch=arm ?SetDateTime@CInstance@@QAA_NPBGABVWBEMTime@@@Z()
|
||||
;@ cdecl -arch=arm ?SetDefaultValues@CRegistry@@AAAXXZ()
|
||||
;@ cdecl -arch=arm ?SetEmbeddedObject@CInstance@@QAA_NPBGAAV1@@Z()
|
||||
;@ cdecl -arch=arm ?SetKeyFromParsedObjectPath@Provider@@AAAHPAVCInstance@@PAUParsedObjectPath@@@Z()
|
||||
;@ cdecl -arch=arm ?SetNull@CInstance@@QAA_NPBG@Z()
|
||||
;@ cdecl -arch=arm ?SetPlatformID@CRegistry@@CAHXZ()
|
||||
;@ cdecl -arch=arm ?SetSize@CHPtrArray@@QAAXHH@Z()
|
||||
;@ cdecl -arch=arm ?SetSize@CHStringArray@@QAAXHH@Z()
|
||||
;@ cdecl -arch=arm ?SetStatusObject@CWbemProviderGlue@@SA_NPAVMethodContext@@PBG1JPBUtagSAFEARRAY@@2@Z()
|
||||
;@ cdecl -arch=arm ?SetStatusObject@MethodContext@@QAA_NPAUIWbemClassObject@@@Z()
|
||||
;@ cdecl -arch=arm ?SetStringArray@CInstance@@QAA_NPBGABUtagSAFEARRAY@@@Z()
|
||||
;@ cdecl -arch=arm ?SetTimeSpan@CInstance@@QAA_NPBGABVWBEMTimeSpan@@@Z()
|
||||
;@ cdecl -arch=arm ?SetVariant@CInstance@@QAA_NPBGABUtagVARIANT@@@Z()
|
||||
;@ cdecl -arch=arm ?SetWBEMINT16@CInstance@@QAA_NPBGABF@Z()
|
||||
;@ cdecl -arch=arm ?SetWBEMINT64@CInstance@@QAA_NPBGABVCHString@@@Z()
|
||||
;@ cdecl -arch=arm ?SetWBEMINT64@CInstance@@QAA_NPBG_J@Z()
|
||||
;@ cdecl -arch=arm ?SetWBEMINT64@CInstance@@QAA_NPBG_K@Z()
|
||||
;@ cdecl -arch=arm ?SetWCHARSplat@CInstance@@QAA_NPBG0@Z()
|
||||
;@ cdecl -arch=arm ?SetWORD@CInstance@@QAA_NPBGG@Z()
|
||||
;@ cdecl -arch=arm ?Setbool@CInstance@@QAA_NPBG_N@Z()
|
||||
;@ cdecl -arch=arm ?Signal@CAutoEvent@@QAAHXZ()
|
||||
@ cdecl -arch=arm ?SpanExcluding@CHString@@QBA?AV1@PBG@Z()
|
||||
@ cdecl -arch=arm ?SpanIncluding@CHString@@QBA?AV1@PBG@Z()
|
||||
@ cdecl -arch=arm ?TrimLeft@CHString@@QAAXXZ()
|
||||
@ cdecl -arch=arm ?TrimRight@CHString@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?UnInit@CWbemProviderGlue@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?UnRegisterAllMessages@CWinMsgEvent@@IAAXXZ()
|
||||
;@ cdecl -arch=arm ?UnRegisterMessage@CWinMsgEvent@@IAA_NIH@Z()
|
||||
;@ cdecl -arch=arm ?Unlock@CThreadBase@@AAAXXZ()
|
||||
@ cdecl -arch=arm ?UnlockBuffer@CHString@@QAAXXZ()
|
||||
;@ cdecl -arch=arm ?UnlockFactoryMap@CWbemProviderGlue@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?UnlockProviderMap@CWbemProviderGlue@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?Unparse@CObjectPathParser@@SAHPAUParsedObjectPath@@PAPAG@Z()
|
||||
@ cdecl -arch=arm ?ValidateDeletionFlags@Provider@@MAAJJ@Z()
|
||||
;@ cdecl -arch=arm ?ValidateEnumerationFlags@Provider@@MAAJJ@Z()
|
||||
;@ cdecl -arch=arm ?ValidateFlags@Provider@@IAAJJW4FlagDefs@1@@Z()
|
||||
;@ cdecl -arch=arm ?ValidateGetObjFlags@Provider@@MAAJJ@Z()
|
||||
;@ cdecl -arch=arm ?ValidateIMOSPointer@Provider@@AAAHXZ()
|
||||
@ cdecl -arch=arm ?ValidateMethodFlags@Provider@@MAAJJ@Z()
|
||||
;@ cdecl -arch=arm ?ValidatePutInstanceFlags@Provider@@MAAJJ@Z()
|
||||
@ cdecl -arch=arm ?ValidateQueryFlags@Provider@@MAAJJ@Z()
|
||||
;@ cdecl -arch=arm ?Wait@CAutoEvent@@QAAKK@Z()
|
||||
;@ cdecl -arch=arm ?WindowsDispatch@CWinMsgEvent@@CAXXZ()
|
||||
;@ cdecl -arch=arm ?Zero@CObjectPathParser@@AAAXXZ()
|
||||
;@ cdecl -arch=arm ?begin_parse@CObjectPathParser@@AAAHXZ()
|
||||
;@ extern -arch=arm ?captainsLog@@3VProviderLog@@A
|
||||
;@ cdecl -arch=arm ?dwThreadProc@CWinMsgEvent@@CAKPAX@Z()
|
||||
;@ extern -arch=arm ?g_cs@@3VCCritSec@@A
|
||||
;@ cdecl -arch=arm ?ident_becomes_class@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?ident_becomes_ns@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?initFailed@Provider@@SAHXZ()
|
||||
;@ extern -arch=arm ?initFailed_@Provider@@0HA
|
||||
;@ cdecl -arch=arm ?key_const@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?keyref@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?keyref_list@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?keyref_term@CObjectPathParser@@AAAHXZ()
|
||||
;@ extern -arch=arm ?m_FlushPtrs@CWbemProviderGlue@@0V?$set@PAXU?$less@PAX@std@@V?$allocator@PAX@2@@std@@A
|
||||
;@ extern -arch=arm ?m_csFlushPtrs@CWbemProviderGlue@@0VCCritSec@@A
|
||||
;@ extern -arch=arm ?m_csStatusObject@CWbemProviderGlue@@0VCCritSec@@A
|
||||
;@ extern -arch=arm ?m_pStatusObject@CWbemProviderGlue@@0PAUIWbemClassObject@@A
|
||||
;@ extern -arch=arm ?mg_aeCreateWindow@CWinMsgEvent@@0VCAutoEvent@@A
|
||||
;@ extern -arch=arm ?mg_csMapLock@CWinMsgEvent@@0VCCritSec@@A
|
||||
;@ extern -arch=arm ?mg_csWindowLock@CWinMsgEvent@@0VCCritSec@@A
|
||||
;@ extern -arch=arm ?mg_hDevNotify@CWinMsgEvent@@0PAXA
|
||||
;@ extern -arch=arm ?mg_hThreadPumpHandle@CWinMsgEvent@@0PAXA
|
||||
;@ extern -arch=arm ?mg_hWnd@CWinMsgEvent@@0PAUHWND__@@A
|
||||
;@ extern -arch=arm ?mg_oSinkMap@CWinMsgEvent@@0V?$multimap@IPAVCWinMsgEvent@@U?$less@I@std@@V?$allocator@PAVCWinMsgEvent@@@3@@std@@A
|
||||
;@ cdecl -arch=arm ?myRegCreateKeyEx@CRegistry@@AAAJPAUHKEY__@@PBGKPAGKKQAU_SECURITY_ATTRIBUTES@@PAPAU2@PAK@Z()
|
||||
;@ cdecl -arch=arm ?myRegDeleteKey@CRegistry@@AAAJPAUHKEY__@@PBG@Z()
|
||||
;@ cdecl -arch=arm ?myRegDeleteValue@CRegistry@@AAAJPAUHKEY__@@PBG@Z()
|
||||
;@ cdecl -arch=arm ?myRegEnumKey@CRegistry@@AAAJPAUHKEY__@@KPAGK@Z()
|
||||
;@ cdecl -arch=arm ?myRegEnumValue@CRegistry@@AAAJPAUHKEY__@@KPAGPAK22PAE2@Z()
|
||||
;@ cdecl -arch=arm ?myRegOpenKeyEx@CRegistry@@AAAJPAUHKEY__@@PBGKKPAPAU2@@Z()
|
||||
;@ cdecl -arch=arm ?myRegQueryInfoKey@CRegistry@@AAAJPAUHKEY__@@PAGPAK22222222PAU_FILETIME@@@Z()
|
||||
;@ cdecl -arch=arm ?myRegQueryValueEx@CRegistry@@AAAJPAUHKEY__@@PBGPAK2PAE2@Z()
|
||||
;@ cdecl -arch=arm ?myRegSetValueEx@CRegistry@@AAAJPAUHKEY__@@PBGKKPBEK@Z()
|
||||
;@ cdecl -arch=arm ?ns_list@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?ns_list_rest@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?ns_or_class@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?ns_or_server@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?objref@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?objref_rest@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?optional_objref@CObjectPathParser@@AAAHXZ()
|
||||
;@ cdecl -arch=arm ?propname@CObjectPathParser@@AAAHXZ()
|
||||
;@ extern -arch=arm ?s_bInitted@CWbemProviderGlue@@0HA
|
||||
;@ extern -arch=arm ?s_csFactoryMap@CWbemProviderGlue@@0VCCritSec@@A
|
||||
;@ extern -arch=arm ?s_csProviderMap@CWbemProviderGlue@@0VCCritSec@@A
|
||||
;@ extern -arch=arm ?s_dwMajorVersion@CWbemProviderGlue@@0KA
|
||||
;@ extern -arch=arm ?s_dwPlatform@CRegistry@@0KA
|
||||
;@ extern -arch=arm ?s_dwPlatform@CWbemProviderGlue@@0KA
|
||||
;@ extern -arch=arm ?s_fPlatformSet@CRegistry@@0HA
|
||||
;@ extern -arch=arm ?s_factorymap@CWbemProviderGlue@@0V?$map@PBXPAJU?$less@PBX@std@@V?$allocator@PAJ@2@@std@@A
|
||||
;@ extern -arch=arm ?s_lObjects@CWbemProviderGlue@@0JA
|
||||
;@ extern -arch=arm ?s_providersmap@CWbemProviderGlue@@0V?$map@VCHString@@PAXU?$less@VCHString@@@std@@V?$allocator@PAX@3@@std@@A
|
||||
;@ extern -arch=arm ?s_strComputerName@Provider@@0VCHString@@A
|
||||
;@ extern -arch=arm ?s_wstrCSDVersion@CWbemProviderGlue@@0PAGA
|
||||
;@ cdecl -arch=arm DoCmd()
|
29
reactos/dll/win32/framedyn/main.c
Normal file
29
reactos/dll/win32/framedyn/main.c
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: dll/win32/framedyn/main.c
|
||||
* PURPOSE: framedyn entry point
|
||||
* PROGRAMMERS: Pierre Schweitzer (pierre@reactos.org)
|
||||
*
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||
{
|
||||
|
||||
switch (fdwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
DisableThreadLibraryCalls(hinstDLL);
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
57
reactos/dll/win32/framedyn/provider.cpp
Normal file
57
reactos/dll/win32/framedyn/provider.cpp
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: dll/win32/framedyn/provider.cpp
|
||||
* PURPOSE: Provider class implementation
|
||||
* PROGRAMMERS: Pierre Schweitzer (pierre@reactos.org)
|
||||
*/
|
||||
|
||||
/* INCLUDES ******************************************************************/
|
||||
|
||||
#include <provider.h>
|
||||
#include <wbemcli.h>
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
/* PUBLIC FUNCTIONS **********************************************************/
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
void Provider::Flush()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
HRESULT Provider::ValidateDeletionFlags(long lFlags)
|
||||
{
|
||||
if (lFlags == 0)
|
||||
return WBEM_S_NO_ERROR;
|
||||
|
||||
return WBEM_E_UNSUPPORTED_PARAMETER;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
HRESULT Provider::ValidateMethodFlags(long lFlags)
|
||||
{
|
||||
if (lFlags == 0)
|
||||
return WBEM_S_NO_ERROR;
|
||||
|
||||
return WBEM_E_UNSUPPORTED_PARAMETER;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
HRESULT Provider::ValidateQueryFlags(long lFlags)
|
||||
{
|
||||
if (lFlags == 0)
|
||||
return WBEM_S_NO_ERROR;
|
||||
|
||||
return WBEM_E_UNSUPPORTED_PARAMETER;
|
||||
}
|
32
reactos/dll/win32/wbemdisp/CMakeLists.txt
Normal file
32
reactos/dll/win32/wbemdisp/CMakeLists.txt
Normal file
|
@ -0,0 +1,32 @@
|
|||
|
||||
add_definitions(-D__WINESRC__)
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine)
|
||||
spec2def(wbemdisp.dll wbemdisp.spec)
|
||||
|
||||
list(APPEND SOURCE
|
||||
locator.c
|
||||
main.c
|
||||
wbemdisp_private.h)
|
||||
|
||||
add_idl_headers(wbemdisp_idlheader wbemdisp_classes.idl)
|
||||
add_typelib(wbemdisp_tlb.idl)
|
||||
|
||||
list(APPEND wbemdisp_rc_deps
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/wbemdisp_classes.rgs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/wbemdisp_tlb.rgs
|
||||
${CMAKE_CURRENT_BINARY_DIR}/wbemdisp_tlb.tlb)
|
||||
|
||||
set_source_files_properties(wbemdisp.rc PROPERTIES OBJECT_DEPENDS "${wbemdisp_rc_deps}")
|
||||
|
||||
add_library(wbemdisp SHARED
|
||||
${SOURCE}
|
||||
guid.c
|
||||
wbemdisp.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/wbemdisp.def)
|
||||
|
||||
set_module_type(wbemdisp win32dll)
|
||||
target_link_libraries(wbemdisp uuid wine)
|
||||
add_dependencies(wbemdisp stdole2 wbemdisp_idlheader)
|
||||
add_importlibs(wbemdisp oleaut32 ole32 msvcrt kernel32 ntdll)
|
||||
add_pch(wbemdisp wbemdisp_private.h SOURCE)
|
||||
add_cd_file(TARGET wbemdisp DESTINATION reactos/system32/wbem FOR all)
|
18
reactos/dll/win32/wbemdisp/guid.c
Normal file
18
reactos/dll/win32/wbemdisp/guid.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* DO NOT USE THE PRECOMPILED HEADER FOR THIS FILE! */
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#define _INC_WINDOWS
|
||||
#define COM_NO_WINDOWS_H
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <objbase.h>
|
||||
#include <initguid.h>
|
||||
#include <wbemdisp_classes.h>
|
||||
#include <wbemdisp.h>
|
||||
#include <wbemcli.h>
|
||||
#include <wmiutils.h>
|
||||
|
||||
/* NO CODE HERE, THIS IS JUST REQUIRED FOR THE GUID DEFINITIONS */
|
1658
reactos/dll/win32/wbemdisp/locator.c
Normal file
1658
reactos/dll/win32/wbemdisp/locator.c
Normal file
File diff suppressed because it is too large
Load diff
551
reactos/dll/win32/wbemdisp/main.c
Normal file
551
reactos/dll/win32/wbemdisp/main.c
Normal file
|
@ -0,0 +1,551 @@
|
|||
/*
|
||||
* Copyright 2013 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
|
||||
*/
|
||||
|
||||
#include "wbemdisp_private.h"
|
||||
|
||||
#include <rpcproxy.h>
|
||||
#include <wmiutils.h>
|
||||
#include <wbemdisp_classes.h>
|
||||
|
||||
static HINSTANCE instance;
|
||||
|
||||
struct moniker
|
||||
{
|
||||
IMoniker IMoniker_iface;
|
||||
LONG refs;
|
||||
IUnknown *obj;
|
||||
};
|
||||
|
||||
static inline struct moniker *impl_from_IMoniker(
|
||||
IMoniker *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, struct moniker, IMoniker_iface );
|
||||
}
|
||||
|
||||
static ULONG WINAPI moniker_AddRef(
|
||||
IMoniker *iface )
|
||||
{
|
||||
struct moniker *moniker = impl_from_IMoniker( iface );
|
||||
return InterlockedIncrement( &moniker->refs );
|
||||
}
|
||||
|
||||
static ULONG WINAPI moniker_Release(
|
||||
IMoniker *iface )
|
||||
{
|
||||
struct moniker *moniker = impl_from_IMoniker( iface );
|
||||
LONG refs = InterlockedDecrement( &moniker->refs );
|
||||
if (!refs)
|
||||
{
|
||||
TRACE( "destroying %p\n", moniker );
|
||||
IUnknown_Release( moniker->obj );
|
||||
heap_free( moniker );
|
||||
}
|
||||
return refs;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_QueryInterface(
|
||||
IMoniker *iface, REFIID riid, void **ppvObject )
|
||||
{
|
||||
struct moniker *moniker = impl_from_IMoniker( iface );
|
||||
|
||||
TRACE( "%p, %s, %p\n", moniker, debugstr_guid( riid ), ppvObject );
|
||||
|
||||
if (IsEqualGUID( riid, &IID_IMoniker ) ||
|
||||
IsEqualGUID( riid, &IID_IUnknown ))
|
||||
{
|
||||
*ppvObject = iface;
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
IMoniker_AddRef( iface );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_GetClassID(
|
||||
IMoniker *iface, CLSID *pClassID )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_IsDirty(
|
||||
IMoniker *iface )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_Load(
|
||||
IMoniker *iface, IStream *pStm )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_Save(
|
||||
IMoniker *iface, IStream *pStm, BOOL fClearDirty )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_GetSizeMax(
|
||||
IMoniker *iface, ULARGE_INTEGER *pcbSize )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_BindToObject(
|
||||
IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riidResult, void **ppvResult )
|
||||
{
|
||||
struct moniker *moniker = impl_from_IMoniker( iface );
|
||||
|
||||
TRACE( "%p, %p, %p, %s, %p\n", iface, pbc, pmkToLeft, debugstr_guid(riidResult), ppvResult );
|
||||
return IUnknown_QueryInterface( moniker->obj, riidResult, ppvResult );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_BindToStorage(
|
||||
IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObj )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_Reduce(
|
||||
IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_ComposeWith(
|
||||
IMoniker *iface, IMoniker *pmkRight, BOOL fOnlyIfNotGeneric, IMoniker **ppmkComposite )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_Enum(
|
||||
IMoniker *iface, BOOL fForward, IEnumMoniker **ppenumMoniker )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_IsEqual(
|
||||
IMoniker *iface, IMoniker *pmkOtherMoniker )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_Hash(
|
||||
IMoniker *iface, DWORD *pdwHash )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_IsRunning(
|
||||
IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_GetTimeOfLastChange(
|
||||
IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, FILETIME *pFileTime )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_Inverse(
|
||||
IMoniker *iface, IMoniker **ppmk )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_CommonPrefixWith(
|
||||
IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkPrefix )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_RelativePathTo(
|
||||
IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkRelPath )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_GetDisplayName(
|
||||
IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_ParseDisplayName(
|
||||
IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten,
|
||||
IMoniker **ppmkOut )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI moniker_IsSystemMoniker(
|
||||
IMoniker *iface, DWORD *pdwMksys )
|
||||
{
|
||||
FIXME( "\n" );
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IMonikerVtbl moniker_vtbl =
|
||||
{
|
||||
moniker_QueryInterface,
|
||||
moniker_AddRef,
|
||||
moniker_Release,
|
||||
moniker_GetClassID,
|
||||
moniker_IsDirty,
|
||||
moniker_Load,
|
||||
moniker_Save,
|
||||
moniker_GetSizeMax,
|
||||
moniker_BindToObject,
|
||||
moniker_BindToStorage,
|
||||
moniker_Reduce,
|
||||
moniker_ComposeWith,
|
||||
moniker_Enum,
|
||||
moniker_IsEqual,
|
||||
moniker_Hash,
|
||||
moniker_IsRunning,
|
||||
moniker_GetTimeOfLastChange,
|
||||
moniker_Inverse,
|
||||
moniker_CommonPrefixWith,
|
||||
moniker_RelativePathTo,
|
||||
moniker_GetDisplayName,
|
||||
moniker_ParseDisplayName,
|
||||
moniker_IsSystemMoniker
|
||||
};
|
||||
|
||||
static HRESULT Moniker_create( IUnknown *unk, IMoniker **obj )
|
||||
{
|
||||
struct moniker *moniker;
|
||||
|
||||
TRACE( "%p, %p\n", unk, obj );
|
||||
|
||||
if (!(moniker = heap_alloc( sizeof(*moniker) ))) return E_OUTOFMEMORY;
|
||||
moniker->IMoniker_iface.lpVtbl = &moniker_vtbl;
|
||||
moniker->refs = 1;
|
||||
moniker->obj = unk;
|
||||
IUnknown_AddRef( moniker->obj );
|
||||
|
||||
*obj = &moniker->IMoniker_iface;
|
||||
TRACE( "returning iface %p\n", *obj );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WinMGMTS_QueryInterface(IParseDisplayName *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
if(IsEqualGUID(riid, &IID_IUnknown)) {
|
||||
TRACE("(IID_IUnknown %p)\n", ppv);
|
||||
*ppv = iface;
|
||||
}else if(IsEqualGUID(riid, &IID_IParseDisplayName)) {
|
||||
TRACE("(IID_IParseDisplayName %p)\n", ppv);
|
||||
*ppv = iface;
|
||||
}else {
|
||||
WARN("Unsupported riid %s\n", debugstr_guid(riid));
|
||||
*ppv = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI WinMGMTS_AddRef(IParseDisplayName *iface)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ULONG WINAPI WinMGMTS_Release(IParseDisplayName *iface)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HRESULT parse_path( const WCHAR *str, BSTR *server, BSTR *namespace, BSTR *relative )
|
||||
{
|
||||
IWbemPath *path;
|
||||
ULONG len;
|
||||
HRESULT hr;
|
||||
|
||||
*server = *namespace = *relative = NULL;
|
||||
|
||||
hr = CoCreateInstance( &CLSID_WbemDefPath, NULL, CLSCTX_INPROC_SERVER, &IID_IWbemPath, (void **)&path );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, str );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
len = 0;
|
||||
hr = IWbemPath_GetServer( path, &len, NULL );
|
||||
if (hr == S_OK)
|
||||
{
|
||||
if (!(*server = SysAllocStringLen( NULL, len )))
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
hr = IWbemPath_GetServer( path, &len, *server );
|
||||
if (hr != S_OK) goto done;
|
||||
}
|
||||
|
||||
len = 0;
|
||||
hr = IWbemPath_GetText( path, WBEMPATH_GET_NAMESPACE_ONLY, &len, NULL );
|
||||
if (hr == S_OK)
|
||||
{
|
||||
if (!(*namespace = SysAllocStringLen( NULL, len )))
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
hr = IWbemPath_GetText( path, WBEMPATH_GET_NAMESPACE_ONLY, &len, *namespace );
|
||||
if (hr != S_OK) goto done;
|
||||
}
|
||||
len = 0;
|
||||
hr = IWbemPath_GetText( path, WBEMPATH_GET_RELATIVE_ONLY, &len, NULL );
|
||||
if (hr == S_OK)
|
||||
{
|
||||
if (!(*relative = SysAllocStringLen( NULL, len )))
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
hr = IWbemPath_GetText( path, WBEMPATH_GET_RELATIVE_ONLY, &len, *relative );
|
||||
}
|
||||
|
||||
done:
|
||||
IWbemPath_Release( path );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
SysFreeString( *server );
|
||||
SysFreeString( *namespace );
|
||||
SysFreeString( *relative );
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WinMGMTS_ParseDisplayName(IParseDisplayName *iface, IBindCtx *pbc, LPOLESTR pszDisplayName,
|
||||
ULONG *pchEaten, IMoniker **ppmkOut)
|
||||
{
|
||||
static const WCHAR prefixW[] = {'w','i','n','m','g','m','t','s',':',0};
|
||||
const DWORD prefix_len = sizeof(prefixW) / sizeof(prefixW[0]) - 1;
|
||||
ISWbemLocator *locator = NULL;
|
||||
ISWbemServices *services = NULL;
|
||||
ISWbemObject *obj = NULL;
|
||||
BSTR server, namespace, relative;
|
||||
WCHAR *p;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE( "%p, %p, %s, %p, %p\n", iface, pbc, debugstr_w(pszDisplayName), pchEaten, ppmkOut );
|
||||
|
||||
if (strncmpiW( pszDisplayName, prefixW, prefix_len )) return MK_E_SYNTAX;
|
||||
|
||||
p = pszDisplayName + prefix_len;
|
||||
if (*p == '{')
|
||||
{
|
||||
FIXME( "ignoring security settings\n" );
|
||||
while (*p && *p != '}') p++;
|
||||
if (*p == '}') p++;
|
||||
if (*p == '!') p++;
|
||||
}
|
||||
hr = parse_path( p, &server, &namespace, &relative );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = SWbemLocator_create( (void **)&locator );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
hr = ISWbemLocator_ConnectServer( locator, server, namespace, NULL, NULL, NULL, NULL, 0, NULL, &services );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
if (!relative || !*relative) Moniker_create( (IUnknown *)services, ppmkOut );
|
||||
else
|
||||
{
|
||||
hr = ISWbemServices_Get( services, relative, 0, NULL, &obj );
|
||||
if (hr != S_OK) goto done;
|
||||
hr = Moniker_create( (IUnknown *)obj, ppmkOut );
|
||||
}
|
||||
|
||||
done:
|
||||
if (obj) ISWbemObject_Release( obj );
|
||||
if (services) ISWbemServices_Release( services );
|
||||
if (locator) ISWbemLocator_Release( locator );
|
||||
SysFreeString( server );
|
||||
SysFreeString( namespace );
|
||||
SysFreeString( relative );
|
||||
if (hr == S_OK) *pchEaten = strlenW( pszDisplayName );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static const IParseDisplayNameVtbl WinMGMTSVtbl = {
|
||||
WinMGMTS_QueryInterface,
|
||||
WinMGMTS_AddRef,
|
||||
WinMGMTS_Release,
|
||||
WinMGMTS_ParseDisplayName
|
||||
};
|
||||
|
||||
static IParseDisplayName winmgmts = { &WinMGMTSVtbl };
|
||||
|
||||
static HRESULT WinMGMTS_create(void **ppv)
|
||||
{
|
||||
*ppv = &winmgmts;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
struct factory
|
||||
{
|
||||
IClassFactory IClassFactory_iface;
|
||||
HRESULT (*fnCreateInstance)( LPVOID * );
|
||||
};
|
||||
|
||||
static inline struct factory *impl_from_IClassFactory( IClassFactory *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, struct factory, IClassFactory_iface );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI factory_QueryInterface( IClassFactory *iface, REFIID riid, LPVOID *obj )
|
||||
{
|
||||
if (IsEqualGUID( riid, &IID_IUnknown ) || IsEqualGUID( riid, &IID_IClassFactory ))
|
||||
{
|
||||
IClassFactory_AddRef( iface );
|
||||
*obj = iface;
|
||||
return S_OK;
|
||||
}
|
||||
FIXME( "interface %s not implemented\n", debugstr_guid(riid) );
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI factory_AddRef( IClassFactory *iface )
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ULONG WINAPI factory_Release( IClassFactory *iface )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI factory_CreateInstance( IClassFactory *iface, LPUNKNOWN outer, REFIID riid,
|
||||
LPVOID *obj )
|
||||
{
|
||||
struct factory *factory = impl_from_IClassFactory( iface );
|
||||
IUnknown *unk;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE( "%p, %s, %p\n", outer, debugstr_guid(riid), obj );
|
||||
|
||||
*obj = NULL;
|
||||
if (outer) return CLASS_E_NOAGGREGATION;
|
||||
|
||||
hr = factory->fnCreateInstance( (LPVOID *)&unk );
|
||||
if (FAILED( hr ))
|
||||
return hr;
|
||||
|
||||
hr = IUnknown_QueryInterface( unk, riid, obj );
|
||||
IUnknown_Release( unk );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI factory_LockServer( IClassFactory *iface, BOOL lock )
|
||||
{
|
||||
FIXME( "%p, %d\n", iface, lock );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static const struct IClassFactoryVtbl factory_vtbl =
|
||||
{
|
||||
factory_QueryInterface,
|
||||
factory_AddRef,
|
||||
factory_Release,
|
||||
factory_CreateInstance,
|
||||
factory_LockServer
|
||||
};
|
||||
|
||||
static struct factory swbem_locator_cf = { { &factory_vtbl }, SWbemLocator_create };
|
||||
static struct factory winmgmts_cf = { { &factory_vtbl }, WinMGMTS_create };
|
||||
|
||||
BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
|
||||
{
|
||||
|
||||
switch (reason)
|
||||
{
|
||||
case DLL_WINE_PREATTACH:
|
||||
return FALSE; /* prefer native version */
|
||||
case DLL_PROCESS_ATTACH:
|
||||
instance = hinst;
|
||||
DisableThreadLibraryCalls( hinst );
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID iid, LPVOID *obj )
|
||||
{
|
||||
IClassFactory *cf = NULL;
|
||||
|
||||
TRACE( "%s, %s, %p\n", debugstr_guid(rclsid), debugstr_guid(iid), obj );
|
||||
|
||||
if (IsEqualGUID( rclsid, &CLSID_SWbemLocator ))
|
||||
cf = &swbem_locator_cf.IClassFactory_iface;
|
||||
else if (IsEqualGUID( rclsid, &CLSID_WinMGMTS ))
|
||||
cf = &winmgmts_cf.IClassFactory_iface;
|
||||
else
|
||||
return CLASS_E_CLASSNOTAVAILABLE;
|
||||
|
||||
return IClassFactory_QueryInterface( cf, iid, obj );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllCanUnloadNow (WBEMDISP.@)
|
||||
*/
|
||||
HRESULT WINAPI DllCanUnloadNow(void)
|
||||
{
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllRegisterServer (WBEMDISP.@)
|
||||
*/
|
||||
HRESULT WINAPI DllRegisterServer(void)
|
||||
{
|
||||
return __wine_register_resources( instance );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllUnregisterServer (WBEMDISP.@)
|
||||
*/
|
||||
HRESULT WINAPI DllUnregisterServer(void)
|
||||
{
|
||||
return __wine_unregister_resources( instance );
|
||||
}
|
3
reactos/dll/win32/wbemdisp/wbemdisp.rc
Normal file
3
reactos/dll/win32/wbemdisp/wbemdisp.rc
Normal file
|
@ -0,0 +1,3 @@
|
|||
1 WINE_REGISTRY "wbemdisp_classes.rgs"
|
||||
2 WINE_REGISTRY "wbemdisp_tlb.rgs"
|
||||
1 TYPELIB "wbemdisp_tlb.tlb"
|
4
reactos/dll/win32/wbemdisp/wbemdisp.spec
Normal file
4
reactos/dll/win32/wbemdisp/wbemdisp.spec
Normal file
|
@ -0,0 +1,4 @@
|
|||
@ stdcall -private DllCanUnloadNow()
|
||||
@ stdcall -private DllGetClassObject(ptr ptr ptr)
|
||||
@ stdcall -private DllRegisterServer()
|
||||
@ stdcall -private DllUnregisterServer()
|
29
reactos/dll/win32/wbemdisp/wbemdisp_classes.idl
Normal file
29
reactos/dll/win32/wbemdisp/wbemdisp_classes.idl
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* COM Classes for wbemdisp
|
||||
*
|
||||
* Copyright 2013 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
|
||||
*/
|
||||
|
||||
#pragma makedep register
|
||||
|
||||
[
|
||||
threading(apartment),
|
||||
uuid(172bddf8-ceea-11d1-8b05-00600806d9b6),
|
||||
progid("WINMGMTS.1"),
|
||||
vi_progid("WINMGMTS")
|
||||
]
|
||||
coclass WinMGMTS { interface IParseDisplayName; }
|
24
reactos/dll/win32/wbemdisp/wbemdisp_classes.rgs
Normal file
24
reactos/dll/win32/wbemdisp/wbemdisp_classes.rgs
Normal file
|
@ -0,0 +1,24 @@
|
|||
HKCR
|
||||
{
|
||||
NoRemove Interface
|
||||
{
|
||||
}
|
||||
NoRemove CLSID
|
||||
{
|
||||
'{172BDDF8-CEEA-11D1-8B05-00600806D9B6}' = s 'WinMGMTS'
|
||||
{
|
||||
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
|
||||
ProgId = s 'WINMGMTS.1'
|
||||
VersionIndependentProgId = s 'WINMGMTS'
|
||||
}
|
||||
}
|
||||
'WINMGMTS.1' = s 'WinMGMTS'
|
||||
{
|
||||
CLSID = s '{172BDDF8-CEEA-11D1-8B05-00600806D9B6}'
|
||||
}
|
||||
'WINMGMTS' = s 'WinMGMTS'
|
||||
{
|
||||
CLSID = s '{172BDDF8-CEEA-11D1-8B05-00600806D9B6}'
|
||||
CurVer = s 'WINMGMTS.1'
|
||||
}
|
||||
}
|
56
reactos/dll/win32/wbemdisp/wbemdisp_private.h
Normal file
56
reactos/dll/win32/wbemdisp/wbemdisp_private.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright 2013 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
|
||||
*/
|
||||
|
||||
#ifndef _WBEMDISP_PRIVATE_H_
|
||||
#define _WBEMDISP_PRIVATE_H_
|
||||
|
||||
#include <wine/config.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#define _INC_WINDOWS
|
||||
#define COM_NO_WINDOWS_H
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <objbase.h>
|
||||
#include <oleauto.h>
|
||||
#include <wbemdisp.h>
|
||||
|
||||
#include <wine/debug.h>
|
||||
#include <wine/unicode.h>
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wbemdisp);
|
||||
|
||||
HRESULT SWbemLocator_create(LPVOID *) DECLSPEC_HIDDEN;
|
||||
|
||||
static void *heap_alloc( size_t len ) __WINE_ALLOC_SIZE(1);
|
||||
static inline void *heap_alloc( size_t len )
|
||||
{
|
||||
return HeapAlloc( GetProcessHeap(), 0, len );
|
||||
}
|
||||
|
||||
static inline BOOL heap_free( void *mem )
|
||||
{
|
||||
return HeapFree( GetProcessHeap(), 0, mem );
|
||||
}
|
||||
|
||||
#endif /* _WBEMDISP_PRIVATE_H_ */
|
23
reactos/dll/win32/wbemdisp/wbemdisp_tlb.idl
Normal file
23
reactos/dll/win32/wbemdisp/wbemdisp_tlb.idl
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Typelib for wbemdisp
|
||||
*
|
||||
* Copyright 2013 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
|
||||
*/
|
||||
|
||||
#pragma makedep regtypelib
|
||||
|
||||
#include "wbemdisp.idl"
|
139
reactos/dll/win32/wbemdisp/wbemdisp_tlb.rgs
Normal file
139
reactos/dll/win32/wbemdisp/wbemdisp_tlb.rgs
Normal file
|
@ -0,0 +1,139 @@
|
|||
HKCR
|
||||
{
|
||||
NoRemove Typelib
|
||||
{
|
||||
NoRemove '{565783C6-CB41-11D1-8B02-00600806D9B6}'
|
||||
{
|
||||
'1.2' = s 'Microsoft WMI Scripting V1.2 Library'
|
||||
{
|
||||
'0' { win32 = s '%MODULE%' }
|
||||
FLAGS = s '0'
|
||||
}
|
||||
}
|
||||
}
|
||||
NoRemove Interface
|
||||
{
|
||||
'{27D54D92-0EBE-11D2-8B22-00600806D9B6}' = s 'ISWbemEventSource'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{76A6415B-CB41-11D1-8B02-00600806D9B6}' = s 'ISWbemLocator'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{422E8E90-D955-11D1-8B09-00600806D9B6}' = s 'ISWbemMethod'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{C93BA292-D955-11D1-8B09-00600806D9B6}' = s 'ISWbemMethodSet'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{76A64164-CB41-11D1-8B02-00600806D9B6}' = s 'ISWbemNamedValue'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{CF2376EA-CE8C-11D1-8B05-00600806D9B6}' = s 'ISWbemNamedValueSet'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{76A6415A-CB41-11D1-8B02-00600806D9B6}' = s 'ISWbemObject'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{5791BC27-CE9C-11D1-97BF-0000F81E849C}' = s 'ISWbemObjectPath'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{76A6415F-CB41-11D1-8B02-00600806D9B6}' = s 'ISWbemObjectSet'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{26EE67BD-5804-11D2-8B4A-00600806D9B6}' = s 'ISWbemPrivilege'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{26EE67BF-5804-11D2-8B4A-00600806D9B6}' = s 'ISWbemPrivilegeSet'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{1A388F98-D4BA-11D1-8B09-00600806D9B6}' = s 'ISWbemProperty'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{DEA0A7B2-D4BA-11D1-8B09-00600806D9B6}' = s 'ISWbemPropertySet'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{79B05932-D3B7-11D1-8B06-00600806D9B6}' = s 'ISWbemQualifier'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{9B16ED16-D3DF-11D1-8B08-00600806D9B6}' = s 'ISWbemQualifierSet'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{B54D66E6-2287-11D2-8B33-00600806D9B6}' = s 'ISWbemSecurity'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
'{76A6415C-CB41-11D1-8B02-00600806D9B6}' = s 'ISWbemServices'
|
||||
{
|
||||
ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}'
|
||||
ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}' { val Version = s '1.2' }
|
||||
}
|
||||
}
|
||||
NoRemove CLSID
|
||||
{
|
||||
'{76A64158-CB41-11D1-8B02-00600806D9B6}' = s 'SWbemLocator'
|
||||
{
|
||||
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' }
|
||||
ProgId = s 'WbemScripting.SWbemLocator.1'
|
||||
TypeLib = s '{565783C6-CB41-11D1-8B02-00600806D9B6}'
|
||||
Version = s '1.2'
|
||||
VersionIndependentProgId = s 'WbemScripting.SWbemLocator'
|
||||
}
|
||||
}
|
||||
'WbemScripting.SWbemLocator.1' = s 'SWbemLocator'
|
||||
{
|
||||
CLSID = s '{76A64158-CB41-11D1-8B02-00600806D9B6}'
|
||||
}
|
||||
'WbemScripting.SWbemLocator' = s 'SWbemLocator'
|
||||
{
|
||||
CLSID = s '{76A64158-CB41-11D1-8B02-00600806D9B6}'
|
||||
CurVer = s 'WbemScripting.SWbemLocator.1'
|
||||
}
|
||||
}
|
37
reactos/dll/win32/wbemprox/CMakeLists.txt
Normal file
37
reactos/dll/win32/wbemprox/CMakeLists.txt
Normal file
|
@ -0,0 +1,37 @@
|
|||
|
||||
remove_definitions(-D_WIN32_WINNT=0x502)
|
||||
add_definitions(-D_WIN32_WINNT=0x600)
|
||||
|
||||
add_definitions(-D__WINESRC__)
|
||||
include_directories(BEFORE ${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine)
|
||||
spec2def(wbemprox.dll wbemprox.spec)
|
||||
|
||||
list(APPEND SOURCE
|
||||
builtin.c
|
||||
class.c
|
||||
main.c
|
||||
process.c
|
||||
qualifier.c
|
||||
query.c
|
||||
reg.c
|
||||
security.c
|
||||
service.c
|
||||
services.c
|
||||
table.c
|
||||
wbemlocator.c
|
||||
wql.tab.c
|
||||
wbemprox_private.h)
|
||||
|
||||
add_library(wbemprox SHARED
|
||||
${SOURCE}
|
||||
guid.c
|
||||
wbemprox.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/wbemprox.def)
|
||||
|
||||
set_source_files_properties(wbemprox.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/wbemprox.rgs)
|
||||
set_module_type(wbemprox win32dll)
|
||||
target_link_libraries(wbemprox uuid wine)
|
||||
add_importlibs(wbemprox iphlpapi oleaut32 advapi32 user32 gdi32 version winspool ws2_32 rpcrt4 msvcrt kernel32 ntdll)
|
||||
add_dependencies(wbemprox d3d_idl_headers)
|
||||
add_pch(wbemprox wbemprox_private.h SOURCE)
|
||||
add_cd_file(TARGET wbemprox DESTINATION reactos/system32/wbem FOR all)
|
3157
reactos/dll/win32/wbemprox/builtin.c
Normal file
3157
reactos/dll/win32/wbemprox/builtin.c
Normal file
File diff suppressed because it is too large
Load diff
1030
reactos/dll/win32/wbemprox/class.c
Normal file
1030
reactos/dll/win32/wbemprox/class.c
Normal file
File diff suppressed because it is too large
Load diff
16
reactos/dll/win32/wbemprox/guid.c
Normal file
16
reactos/dll/win32/wbemprox/guid.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* DO NOT USE THE PRECOMPILED HEADER FOR THIS FILE! */
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#define _INC_WINDOWS
|
||||
#define COM_NO_WINDOWS_H
|
||||
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <objbase.h>
|
||||
#include <initguid.h>
|
||||
#include <wbemcli.h>
|
||||
#include <wbemprov.h>
|
||||
|
||||
/* NO CODE HERE, THIS IS JUST REQUIRED FOR THE GUID DEFINITIONS */
|
155
reactos/dll/win32/wbemprox/main.c
Normal file
155
reactos/dll/win32/wbemprox/main.c
Normal file
|
@ -0,0 +1,155 @@
|
|||
/*
|
||||
*
|
||||
* Copyright 2009 Austin English
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
#include <wbemprov.h>
|
||||
#include <rpcproxy.h>
|
||||
|
||||
static HINSTANCE instance;
|
||||
|
||||
typedef HRESULT (*fnCreateInstance)( LPVOID *ppObj );
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IClassFactory IClassFactory_iface;
|
||||
fnCreateInstance pfnCreateInstance;
|
||||
} wbemprox_cf;
|
||||
|
||||
static inline wbemprox_cf *impl_from_IClassFactory( IClassFactory *iface )
|
||||
{
|
||||
return CONTAINING_RECORD(iface, wbemprox_cf, IClassFactory_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbemprox_cf_QueryInterface( IClassFactory *iface, REFIID riid, LPVOID *ppobj )
|
||||
{
|
||||
if (IsEqualGUID(riid, &IID_IUnknown) ||
|
||||
IsEqualGUID(riid, &IID_IClassFactory))
|
||||
{
|
||||
IClassFactory_AddRef( iface );
|
||||
*ppobj = iface;
|
||||
return S_OK;
|
||||
}
|
||||
FIXME("interface %s not implemented\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI wbemprox_cf_AddRef( IClassFactory *iface )
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ULONG WINAPI wbemprox_cf_Release( IClassFactory *iface )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbemprox_cf_CreateInstance( IClassFactory *iface, LPUNKNOWN pOuter,
|
||||
REFIID riid, LPVOID *ppobj )
|
||||
{
|
||||
wbemprox_cf *This = impl_from_IClassFactory( iface );
|
||||
HRESULT r;
|
||||
IUnknown *punk;
|
||||
|
||||
TRACE("%p %s %p\n", pOuter, debugstr_guid(riid), ppobj);
|
||||
|
||||
*ppobj = NULL;
|
||||
|
||||
if (pOuter)
|
||||
return CLASS_E_NOAGGREGATION;
|
||||
|
||||
r = This->pfnCreateInstance( (LPVOID *)&punk );
|
||||
if (FAILED(r))
|
||||
return r;
|
||||
|
||||
r = IUnknown_QueryInterface( punk, riid, ppobj );
|
||||
IUnknown_Release( punk );
|
||||
return r;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbemprox_cf_LockServer( IClassFactory *iface, BOOL dolock )
|
||||
{
|
||||
FIXME("(%p)->(%d)\n", iface, dolock);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static const struct IClassFactoryVtbl wbemprox_cf_vtbl =
|
||||
{
|
||||
wbemprox_cf_QueryInterface,
|
||||
wbemprox_cf_AddRef,
|
||||
wbemprox_cf_Release,
|
||||
wbemprox_cf_CreateInstance,
|
||||
wbemprox_cf_LockServer
|
||||
};
|
||||
|
||||
static wbemprox_cf wbem_locator_cf = { { &wbemprox_cf_vtbl }, WbemLocator_create };
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||
{
|
||||
|
||||
switch (fdwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
instance = hinstDLL;
|
||||
DisableThreadLibraryCalls(hinstDLL);
|
||||
init_table_list();
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID iid, LPVOID *ppv )
|
||||
{
|
||||
IClassFactory *cf = NULL;
|
||||
|
||||
TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
|
||||
|
||||
if (IsEqualGUID( rclsid, &CLSID_WbemLocator ) ||
|
||||
IsEqualGUID( rclsid, &CLSID_WbemAdministrativeLocator ))
|
||||
{
|
||||
cf = &wbem_locator_cf.IClassFactory_iface;
|
||||
}
|
||||
if (!cf) return CLASS_E_CLASSNOTAVAILABLE;
|
||||
return IClassFactory_QueryInterface( cf, iid, ppv );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllCanUnloadNow (WBEMPROX.@)
|
||||
*/
|
||||
HRESULT WINAPI DllCanUnloadNow( void )
|
||||
{
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllRegisterServer (WBEMPROX.@)
|
||||
*/
|
||||
HRESULT WINAPI DllRegisterServer(void)
|
||||
{
|
||||
return __wine_register_resources( instance );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllUnregisterServer (WBEMPROX.@)
|
||||
*/
|
||||
HRESULT WINAPI DllUnregisterServer(void)
|
||||
{
|
||||
return __wine_unregister_resources( instance );
|
||||
}
|
101
reactos/dll/win32/wbemprox/process.c
Normal file
101
reactos/dll/win32/wbemprox/process.c
Normal file
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* Win32_Process methods implementation
|
||||
*
|
||||
* Copyright 2013 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
static HRESULT get_owner( VARIANT *user, VARIANT *domain, VARIANT *retval )
|
||||
{
|
||||
DWORD len;
|
||||
UINT error = 8;
|
||||
|
||||
len = 0;
|
||||
GetUserNameW( NULL, &len );
|
||||
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) goto done;
|
||||
if (!(V_BSTR( user ) = SysAllocStringLen( NULL, len - 1 ))) goto done;
|
||||
if (!GetUserNameW( V_BSTR( user ), &len )) goto done;
|
||||
V_VT( user ) = VT_BSTR;
|
||||
|
||||
len = 0;
|
||||
GetComputerNameW( NULL, &len );
|
||||
if (GetLastError() != ERROR_BUFFER_OVERFLOW) goto done;
|
||||
if (!(V_BSTR( domain ) = SysAllocStringLen( NULL, len - 1 ))) goto done;
|
||||
if (!GetComputerNameW( V_BSTR( domain ), &len )) goto done;
|
||||
V_VT( domain ) = VT_BSTR;
|
||||
|
||||
error = 0;
|
||||
|
||||
done:
|
||||
if (error)
|
||||
{
|
||||
VariantClear( user );
|
||||
VariantClear( domain );
|
||||
}
|
||||
set_variant( VT_UI4, error, NULL, retval );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT process_get_owner( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT user, domain, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %p, %p\n", obj, in, out);
|
||||
|
||||
hr = create_signature( class_processW, method_getownerW, PARAM_OUT, &sig );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
if (out)
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
IWbemClassObject_Release( sig );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
VariantInit( &user );
|
||||
VariantInit( &domain );
|
||||
hr = get_owner( &user, &domain, &retval );
|
||||
if (hr != S_OK) goto done;
|
||||
if (out_params)
|
||||
{
|
||||
if (!V_UI4( &retval ))
|
||||
{
|
||||
hr = IWbemClassObject_Put( out_params, param_userW, 0, &user, CIM_STRING );
|
||||
if (hr != S_OK) goto done;
|
||||
hr = IWbemClassObject_Put( out_params, param_domainW, 0, &domain, CIM_STRING );
|
||||
if (hr != S_OK) goto done;
|
||||
}
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
}
|
||||
|
||||
done:
|
||||
VariantClear( &user );
|
||||
VariantClear( &domain );
|
||||
IWbemClassObject_Release( sig );
|
||||
if (hr == S_OK && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
if (out_params) IWbemClassObject_Release( out_params );
|
||||
return hr;
|
||||
}
|
264
reactos/dll/win32/wbemprox/qualifier.c
Normal file
264
reactos/dll/win32/wbemprox/qualifier.c
Normal file
|
@ -0,0 +1,264 @@
|
|||
/*
|
||||
* Copyright 2013 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
struct qualifier_set
|
||||
{
|
||||
IWbemQualifierSet IWbemQualifierSet_iface;
|
||||
LONG refs;
|
||||
WCHAR *class;
|
||||
WCHAR *member;
|
||||
};
|
||||
|
||||
static inline struct qualifier_set *impl_from_IWbemQualifierSet(
|
||||
IWbemQualifierSet *iface )
|
||||
{
|
||||
return CONTAINING_RECORD(iface, struct qualifier_set, IWbemQualifierSet_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI qualifier_set_AddRef(
|
||||
IWbemQualifierSet *iface )
|
||||
{
|
||||
struct qualifier_set *set = impl_from_IWbemQualifierSet( iface );
|
||||
return InterlockedIncrement( &set->refs );
|
||||
}
|
||||
|
||||
static ULONG WINAPI qualifier_set_Release(
|
||||
IWbemQualifierSet *iface )
|
||||
{
|
||||
struct qualifier_set *set = impl_from_IWbemQualifierSet( iface );
|
||||
LONG refs = InterlockedDecrement( &set->refs );
|
||||
if (!refs)
|
||||
{
|
||||
TRACE("destroying %p\n", set);
|
||||
heap_free( set->class );
|
||||
heap_free( set->member );
|
||||
heap_free( set );
|
||||
}
|
||||
return refs;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI qualifier_set_QueryInterface(
|
||||
IWbemQualifierSet *iface,
|
||||
REFIID riid,
|
||||
void **ppvObject )
|
||||
{
|
||||
struct qualifier_set *set = impl_from_IWbemQualifierSet( iface );
|
||||
|
||||
TRACE("%p, %s, %p\n", set, debugstr_guid( riid ), ppvObject );
|
||||
|
||||
if ( IsEqualGUID( riid, &IID_IWbemQualifierSet ) ||
|
||||
IsEqualGUID( riid, &IID_IUnknown ) )
|
||||
{
|
||||
*ppvObject = set;
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("interface %s not implemented\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
IWbemQualifierSet_AddRef( iface );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT create_qualifier_enum( const WCHAR *class, const WCHAR *member, const WCHAR *name,
|
||||
IEnumWbemClassObject **iter )
|
||||
{
|
||||
static const WCHAR fmtW[] =
|
||||
{'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','_','_','Q','U','A','L',
|
||||
'I','F','I','E','R','S',' ','W','H','E','R','E',' ','C','l','a','s','s','=',
|
||||
'\'','%','s','\'',' ','A','N','D',' ','M','e','m','b','e','r','=','\'','%','s','\'',' ',
|
||||
'A','N','D',' ','N','a','m','e','=','\'','%','s','\'',0};
|
||||
static const WCHAR fmt2W[] =
|
||||
{'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','_','_','Q','U','A','L',
|
||||
'I','F','I','E','R','S',' ','W','H','E','R','E',' ','C','l','a','s','s','=',
|
||||
'\'','%','s','\'',' ','A','N','D',' ','M','e','m','b','e','r','=','\'','%','s','\'',0};
|
||||
static const WCHAR noneW[] = {'_','_','N','O','N','E',0};
|
||||
WCHAR *query;
|
||||
HRESULT hr;
|
||||
int len;
|
||||
|
||||
if (!member) member = noneW;
|
||||
len = strlenW( class ) + strlenW( member );
|
||||
if (name) len += strlenW( name ) + SIZEOF(fmtW);
|
||||
else len += SIZEOF(fmt2W);
|
||||
|
||||
if (!(query = heap_alloc( len * sizeof(WCHAR) ))) return E_OUTOFMEMORY;
|
||||
if (name) sprintfW( query, fmtW, class, member, name );
|
||||
else sprintfW( query, fmt2W, class, member );
|
||||
|
||||
hr = exec_query( query, iter );
|
||||
heap_free( query );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT get_qualifier_value( const WCHAR *class, const WCHAR *member, const WCHAR *name,
|
||||
VARIANT *val, LONG *flavor )
|
||||
{
|
||||
static const WCHAR qualifiersW[] = {'_','_','Q','U','A','L','I','F','I','E','R','S',0};
|
||||
static const WCHAR intvalueW[] = {'I','n','t','e','g','e','r','V','a','l','u','e',0};
|
||||
static const WCHAR strvalueW[] = {'S','t','r','i','n','g','V','a','l','u','e',0};
|
||||
static const WCHAR flavorW[] = {'F','l','a','v','o','r',0};
|
||||
static const WCHAR typeW[] = {'T','y','p','e',0};
|
||||
IEnumWbemClassObject *iter;
|
||||
IWbemClassObject *obj;
|
||||
VARIANT var;
|
||||
HRESULT hr;
|
||||
|
||||
hr = create_qualifier_enum( class, member, name, &iter );
|
||||
if (FAILED( hr )) return hr;
|
||||
|
||||
hr = create_class_object( qualifiersW, iter, 0, NULL, &obj );
|
||||
IEnumWbemClassObject_Release( iter );
|
||||
if (FAILED( hr )) return hr;
|
||||
|
||||
if (flavor)
|
||||
{
|
||||
hr = IWbemClassObject_Get( obj, flavorW, 0, &var, NULL, NULL );
|
||||
if (hr != S_OK) goto done;
|
||||
*flavor = V_I4( &var );
|
||||
}
|
||||
hr = IWbemClassObject_Get( obj, typeW, 0, &var, NULL, NULL );
|
||||
if (hr != S_OK) goto done;
|
||||
switch (V_UI4( &var ))
|
||||
{
|
||||
case CIM_STRING:
|
||||
hr = IWbemClassObject_Get( obj, strvalueW, 0, val, NULL, NULL );
|
||||
break;
|
||||
case CIM_SINT32:
|
||||
hr = IWbemClassObject_Get( obj, intvalueW, 0, val, NULL, NULL );
|
||||
break;
|
||||
default:
|
||||
ERR("unhandled type %u\n", V_UI4( &var ));
|
||||
break;
|
||||
}
|
||||
|
||||
done:
|
||||
IWbemClassObject_Release( obj );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI qualifier_set_Get(
|
||||
IWbemQualifierSet *iface,
|
||||
LPCWSTR wszName,
|
||||
LONG lFlags,
|
||||
VARIANT *pVal,
|
||||
LONG *plFlavor )
|
||||
{
|
||||
struct qualifier_set *set = impl_from_IWbemQualifierSet( iface );
|
||||
|
||||
FIXME("%p, %s, %08x, %p, %p\n", iface, debugstr_w(wszName), lFlags, pVal, plFlavor);
|
||||
return get_qualifier_value( set->class, set->member, wszName, pVal, plFlavor );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI qualifier_set_Put(
|
||||
IWbemQualifierSet *iface,
|
||||
LPCWSTR wszName,
|
||||
VARIANT *pVal,
|
||||
LONG lFlavor )
|
||||
{
|
||||
FIXME("%p, %s, %p, %d\n", iface, debugstr_w(wszName), pVal, lFlavor);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI qualifier_set_Delete(
|
||||
IWbemQualifierSet *iface,
|
||||
LPCWSTR wszName )
|
||||
{
|
||||
FIXME("%p, %s\n", iface, debugstr_w(wszName));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI qualifier_set_GetNames(
|
||||
IWbemQualifierSet *iface,
|
||||
LONG lFlags,
|
||||
SAFEARRAY **pNames )
|
||||
{
|
||||
FIXME("%p, %08x, %p\n", iface, lFlags, pNames);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI qualifier_set_BeginEnumeration(
|
||||
IWbemQualifierSet *iface,
|
||||
LONG lFlags )
|
||||
{
|
||||
FIXME("%p, %08x\n", iface, lFlags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI qualifier_set_Next(
|
||||
IWbemQualifierSet *iface,
|
||||
LONG lFlags,
|
||||
BSTR *pstrName,
|
||||
VARIANT *pVal,
|
||||
LONG *plFlavor )
|
||||
{
|
||||
FIXME("%p, %08x, %p, %p, %p\n", iface, lFlags, pstrName, pVal, plFlavor);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI qualifier_set_EndEnumeration(
|
||||
IWbemQualifierSet *iface )
|
||||
{
|
||||
FIXME("%p\n", iface);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IWbemQualifierSetVtbl qualifier_set_vtbl =
|
||||
{
|
||||
qualifier_set_QueryInterface,
|
||||
qualifier_set_AddRef,
|
||||
qualifier_set_Release,
|
||||
qualifier_set_Get,
|
||||
qualifier_set_Put,
|
||||
qualifier_set_Delete,
|
||||
qualifier_set_GetNames,
|
||||
qualifier_set_BeginEnumeration,
|
||||
qualifier_set_Next,
|
||||
qualifier_set_EndEnumeration
|
||||
};
|
||||
|
||||
HRESULT WbemQualifierSet_create( const WCHAR *class, const WCHAR *member, LPVOID *ppObj )
|
||||
{
|
||||
struct qualifier_set *set;
|
||||
|
||||
TRACE("%p\n", ppObj);
|
||||
|
||||
if (!(set = heap_alloc( sizeof(*set) ))) return E_OUTOFMEMORY;
|
||||
|
||||
set->IWbemQualifierSet_iface.lpVtbl = &qualifier_set_vtbl;
|
||||
if (!(set->class = heap_strdupW( class )))
|
||||
{
|
||||
heap_free( set );
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
if (!member) set->member = NULL;
|
||||
else if (!(set->member = heap_strdupW( member )))
|
||||
{
|
||||
heap_free( set->class );
|
||||
heap_free( set );
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
set->refs = 1;
|
||||
|
||||
*ppObj = &set->IWbemQualifierSet_iface;
|
||||
|
||||
TRACE("returning iface %p\n", *ppObj);
|
||||
return S_OK;
|
||||
}
|
1064
reactos/dll/win32/wbemprox/query.c
Normal file
1064
reactos/dll/win32/wbemprox/query.c
Normal file
File diff suppressed because it is too large
Load diff
374
reactos/dll/win32/wbemprox/reg.c
Normal file
374
reactos/dll/win32/wbemprox/reg.c
Normal file
|
@ -0,0 +1,374 @@
|
|||
/*
|
||||
* StdRegProv implementation
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
#include <winreg.h>
|
||||
|
||||
static HRESULT to_bstr_array( BSTR *strings, DWORD count, VARIANT *var )
|
||||
{
|
||||
SAFEARRAY *sa;
|
||||
HRESULT hr;
|
||||
LONG i;
|
||||
|
||||
if (!(sa = SafeArrayCreateVector( VT_BSTR, 0, count ))) return E_OUTOFMEMORY;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if ((hr = SafeArrayPutElement( sa, &i, strings[i] )) != S_OK)
|
||||
{
|
||||
SafeArrayDestroy( sa );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
set_variant( VT_BSTR|VT_ARRAY, 0, sa, var );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static void free_bstr_array( BSTR *strings, DWORD count )
|
||||
{
|
||||
while (count--)
|
||||
SysFreeString( *(strings++) );
|
||||
}
|
||||
|
||||
static HRESULT to_i4_array( DWORD *values, DWORD count, VARIANT *var )
|
||||
{
|
||||
SAFEARRAY *sa;
|
||||
HRESULT hr;
|
||||
LONG i;
|
||||
|
||||
if (!(sa = SafeArrayCreateVector( VT_I4, 0, count ))) return E_OUTOFMEMORY;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
if ((hr = SafeArrayPutElement( sa, &i, &values[i] )) != S_OK)
|
||||
{
|
||||
SafeArrayDestroy( sa );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
set_variant( VT_I4|VT_ARRAY, 0, sa, var );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT enum_key( HKEY root, const WCHAR *subkey, VARIANT *names, VARIANT *retval )
|
||||
{
|
||||
HKEY hkey;
|
||||
HRESULT hr = S_OK;
|
||||
WCHAR buf[256];
|
||||
BSTR *strings, *tmp;
|
||||
DWORD count = 2, len = sizeof(buf)/sizeof(buf[0]);
|
||||
LONG res, i = 0;
|
||||
|
||||
TRACE("%p, %s\n", root, debugstr_w(subkey));
|
||||
|
||||
if (!(strings = heap_alloc( count * sizeof(BSTR) ))) return E_OUTOFMEMORY;
|
||||
if ((res = RegOpenKeyExW( root, subkey, 0, KEY_ENUMERATE_SUB_KEYS, &hkey )))
|
||||
{
|
||||
set_variant( VT_UI4, res, NULL, retval );
|
||||
heap_free( strings );
|
||||
return S_OK;
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
if (i >= count)
|
||||
{
|
||||
count *= 2;
|
||||
if (!(tmp = heap_realloc( strings, count * sizeof(BSTR) )))
|
||||
{
|
||||
RegCloseKey( hkey );
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
strings = tmp;
|
||||
}
|
||||
if ((res = RegEnumKeyW( hkey, i, buf, len )) == ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
if (i) res = ERROR_SUCCESS;
|
||||
break;
|
||||
}
|
||||
if (res) break;
|
||||
if (!(strings[i] = SysAllocString( buf )))
|
||||
{
|
||||
for (i--; i >= 0; i--) SysFreeString( strings[i] );
|
||||
hr = E_OUTOFMEMORY;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (hr == S_OK && !res)
|
||||
{
|
||||
hr = to_bstr_array( strings, i, names );
|
||||
free_bstr_array( strings, i );
|
||||
}
|
||||
set_variant( VT_UI4, res, NULL, retval );
|
||||
RegCloseKey( hkey );
|
||||
heap_free( strings );
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT reg_enum_key( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT defkey, subkey, names, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %p\n", in, out);
|
||||
|
||||
hr = IWbemClassObject_Get( in, param_defkeyW, 0, &defkey, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
hr = IWbemClassObject_Get( in, param_subkeynameW, 0, &subkey, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_signature( class_stdregprovW, method_enumkeyW, PARAM_OUT, &sig );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &subkey );
|
||||
return hr;
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &subkey );
|
||||
IWbemClassObject_Release( sig );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
VariantInit( &names );
|
||||
hr = enum_key( (HKEY)(INT_PTR)V_I4(&defkey), V_BSTR(&subkey), &names, &retval );
|
||||
if (hr != S_OK) goto done;
|
||||
if (out_params)
|
||||
{
|
||||
if (!V_UI4( &retval ))
|
||||
{
|
||||
hr = IWbemClassObject_Put( out_params, param_namesW, 0, &names, CIM_STRING|CIM_FLAG_ARRAY );
|
||||
if (hr != S_OK) goto done;
|
||||
}
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
}
|
||||
|
||||
done:
|
||||
VariantClear( &names );
|
||||
VariantClear( &subkey );
|
||||
IWbemClassObject_Release( sig );
|
||||
if (hr == S_OK && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
if (out_params) IWbemClassObject_Release( out_params );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT enum_values( HKEY root, const WCHAR *subkey, VARIANT *names, VARIANT *types, VARIANT *retval )
|
||||
{
|
||||
HKEY hkey = NULL;
|
||||
HRESULT hr = S_OK;
|
||||
BSTR *value_names = NULL;
|
||||
DWORD count, buflen, len, *value_types = NULL;
|
||||
LONG res, i = 0;
|
||||
WCHAR *buf = NULL;
|
||||
|
||||
TRACE("%p, %s\n", root, debugstr_w(subkey));
|
||||
|
||||
if ((res = RegOpenKeyExW( root, subkey, 0, KEY_QUERY_VALUE, &hkey ))) goto done;
|
||||
if ((res = RegQueryInfoKeyW( hkey, NULL, NULL, NULL, NULL, NULL, NULL, &count, &buflen, NULL, NULL, NULL )))
|
||||
goto done;
|
||||
|
||||
hr = E_OUTOFMEMORY;
|
||||
if (!(buf = heap_alloc( (buflen + 1) * sizeof(WCHAR) ))) goto done;
|
||||
if (!(value_names = heap_alloc( count * sizeof(BSTR) ))) goto done;
|
||||
if (!(value_types = heap_alloc( count * sizeof(DWORD) ))) goto done;
|
||||
|
||||
hr = S_OK;
|
||||
for (;;)
|
||||
{
|
||||
len = buflen + 1;
|
||||
res = RegEnumValueW( hkey, i, buf, &len, NULL, &value_types[i], NULL, NULL );
|
||||
if (res == ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
if (i) res = ERROR_SUCCESS;
|
||||
break;
|
||||
}
|
||||
if (res) break;
|
||||
if (!(value_names[i] = SysAllocString( buf )))
|
||||
{
|
||||
for (i--; i >= 0; i--) SysFreeString( value_names[i] );
|
||||
hr = E_OUTOFMEMORY;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (hr == S_OK && !res)
|
||||
{
|
||||
hr = to_bstr_array( value_names, i, names );
|
||||
free_bstr_array( value_names, i );
|
||||
if (hr == S_OK) hr = to_i4_array( value_types, i, types );
|
||||
}
|
||||
|
||||
done:
|
||||
set_variant( VT_UI4, res, NULL, retval );
|
||||
RegCloseKey( hkey );
|
||||
heap_free( value_names );
|
||||
heap_free( value_types );
|
||||
heap_free( buf );
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT reg_enum_values( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT defkey, subkey, names, types, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %p\n", in, out);
|
||||
|
||||
hr = IWbemClassObject_Get( in, param_defkeyW, 0, &defkey, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
hr = IWbemClassObject_Get( in, param_subkeynameW, 0, &subkey, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_signature( class_stdregprovW, method_enumvaluesW, PARAM_OUT, &sig );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &subkey );
|
||||
return hr;
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &subkey );
|
||||
IWbemClassObject_Release( sig );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
VariantInit( &names );
|
||||
VariantInit( &types );
|
||||
hr = enum_values( (HKEY)(INT_PTR)V_I4(&defkey), V_BSTR(&subkey), &names, &types, &retval );
|
||||
if (hr != S_OK) goto done;
|
||||
if (out_params)
|
||||
{
|
||||
if (!V_UI4( &retval ))
|
||||
{
|
||||
hr = IWbemClassObject_Put( out_params, param_namesW, 0, &names, CIM_STRING|CIM_FLAG_ARRAY );
|
||||
if (hr != S_OK) goto done;
|
||||
hr = IWbemClassObject_Put( out_params, param_typesW, 0, &types, CIM_SINT32|CIM_FLAG_ARRAY );
|
||||
if (hr != S_OK) goto done;
|
||||
}
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
}
|
||||
|
||||
done:
|
||||
VariantClear( &types );
|
||||
VariantClear( &names );
|
||||
VariantClear( &subkey );
|
||||
IWbemClassObject_Release( sig );
|
||||
if (hr == S_OK && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
if (out_params) IWbemClassObject_Release( out_params );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT get_stringvalue( HKEY root, const WCHAR *subkey, const WCHAR *name, VARIANT *value, VARIANT *retval )
|
||||
{
|
||||
HRESULT hr = S_OK;
|
||||
BSTR str = NULL;
|
||||
DWORD size;
|
||||
LONG res;
|
||||
|
||||
TRACE("%p, %s, %s\n", root, debugstr_w(subkey), debugstr_w(name));
|
||||
|
||||
if ((res = RegGetValueW( root, subkey, name, RRF_RT_REG_SZ, NULL, NULL, &size ))) goto done;
|
||||
if (!(str = SysAllocStringLen( NULL, size / sizeof(WCHAR) - 1 )))
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
if (!(res = RegGetValueW( root, subkey, name, RRF_RT_REG_SZ, NULL, str, &size )))
|
||||
set_variant( VT_BSTR, 0, str, value );
|
||||
|
||||
done:
|
||||
set_variant( VT_UI4, res, NULL, retval );
|
||||
if (res) SysFreeString( str );
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT reg_get_stringvalue( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT defkey, subkey, name, value, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %p\n", in, out);
|
||||
|
||||
hr = IWbemClassObject_Get( in, param_defkeyW, 0, &defkey, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
hr = IWbemClassObject_Get( in, param_subkeynameW, 0, &subkey, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
hr = IWbemClassObject_Get( in, param_valuenameW, 0, &name, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_signature( class_stdregprovW, method_getstringvalueW, PARAM_OUT, &sig );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
VariantClear( &subkey );
|
||||
return hr;
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
VariantClear( &subkey );
|
||||
IWbemClassObject_Release( sig );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
VariantInit( &value );
|
||||
hr = get_stringvalue( (HKEY)(INT_PTR)V_I4(&defkey), V_BSTR(&subkey), V_BSTR(&name), &value, &retval );
|
||||
if (hr != S_OK) goto done;
|
||||
if (out_params)
|
||||
{
|
||||
if (!V_UI4( &retval ))
|
||||
{
|
||||
hr = IWbemClassObject_Put( out_params, param_valueW, 0, &value, CIM_STRING );
|
||||
if (hr != S_OK) goto done;
|
||||
}
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
}
|
||||
|
||||
done:
|
||||
VariantClear( &name );
|
||||
VariantClear( &subkey );
|
||||
IWbemClassObject_Release( sig );
|
||||
if (hr == S_OK && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
if (out_params) IWbemClassObject_Release( out_params );
|
||||
return hr;
|
||||
}
|
209
reactos/dll/win32/wbemprox/security.c
Normal file
209
reactos/dll/win32/wbemprox/security.c
Normal file
|
@ -0,0 +1,209 @@
|
|||
/*
|
||||
* __SystemSecurity implementation
|
||||
*
|
||||
* Copyright 2014 Vincent Povirk 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
#include <iads.h>
|
||||
|
||||
static HRESULT to_byte_array( void *data, DWORD size, VARIANT *var )
|
||||
{
|
||||
SAFEARRAY *sa;
|
||||
void *sadata;
|
||||
HRESULT hr;
|
||||
|
||||
if (!(sa = SafeArrayCreateVector( VT_UI1, 0, size ))) return E_OUTOFMEMORY;
|
||||
|
||||
hr = SafeArrayAccessData( sa, &sadata );
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
memcpy( sadata, data, size );
|
||||
|
||||
SafeArrayUnaccessData( sa );
|
||||
}
|
||||
else
|
||||
{
|
||||
SafeArrayDestroy( sa );
|
||||
return hr;
|
||||
}
|
||||
|
||||
set_variant( VT_UI1|VT_ARRAY, 0, sa, var );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT get_sd( SECURITY_DESCRIPTOR **sd, DWORD *size )
|
||||
{
|
||||
BYTE sid_admin_buffer[SECURITY_MAX_SID_SIZE];
|
||||
SID *sid_admin = (SID*)sid_admin_buffer;
|
||||
BYTE sid_network_buffer[SECURITY_MAX_SID_SIZE];
|
||||
SID *sid_network = (SID*)sid_network_buffer;
|
||||
BYTE sid_local_buffer[SECURITY_MAX_SID_SIZE];
|
||||
SID *sid_local = (SID*)sid_local_buffer;
|
||||
BYTE sid_users_buffer[SECURITY_MAX_SID_SIZE];
|
||||
SID *sid_users = (SID*)sid_users_buffer;
|
||||
BYTE acl_buffer[sizeof(ACL) + 4 * (sizeof(ACCESS_ALLOWED_ACE) - sizeof(DWORD) + SECURITY_MAX_SID_SIZE)];
|
||||
ACL *acl = (ACL*)acl_buffer;
|
||||
DWORD sid_size;
|
||||
SECURITY_DESCRIPTOR absolute_sd;
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
sid_size = sizeof(sid_admin_buffer);
|
||||
CreateWellKnownSid( WinBuiltinAdministratorsSid, NULL, sid_admin, &sid_size );
|
||||
|
||||
sid_size = sizeof(sid_network_buffer);
|
||||
CreateWellKnownSid( WinNetworkServiceSid, NULL, sid_network, &sid_size );
|
||||
|
||||
sid_size = sizeof(sid_local_buffer);
|
||||
CreateWellKnownSid( WinLocalServiceSid, NULL, sid_local, &sid_size );
|
||||
|
||||
sid_size = sizeof(sid_users_buffer);
|
||||
CreateWellKnownSid( WinAuthenticatedUserSid, NULL, sid_users, &sid_size );
|
||||
|
||||
InitializeAcl( acl, sizeof(acl_buffer), ACL_REVISION );
|
||||
|
||||
AddAccessAllowedAceEx( acl, ACL_REVISION, CONTAINER_INHERIT_ACE|INHERITED_ACE,
|
||||
ADS_RIGHT_DS_CREATE_CHILD|ADS_RIGHT_DS_DELETE_CHILD|ADS_RIGHT_ACTRL_DS_LIST|ADS_RIGHT_DS_SELF|
|
||||
ADS_RIGHT_DS_READ_PROP|ADS_RIGHT_DS_WRITE_PROP|READ_CONTROL|WRITE_DAC,
|
||||
sid_admin );
|
||||
|
||||
AddAccessAllowedAceEx( acl, ACL_REVISION, CONTAINER_INHERIT_ACE|INHERITED_ACE,
|
||||
ADS_RIGHT_DS_CREATE_CHILD|ADS_RIGHT_DS_DELETE_CHILD|ADS_RIGHT_DS_READ_PROP,
|
||||
sid_network );
|
||||
|
||||
AddAccessAllowedAceEx( acl, ACL_REVISION, CONTAINER_INHERIT_ACE|INHERITED_ACE,
|
||||
ADS_RIGHT_DS_CREATE_CHILD|ADS_RIGHT_DS_DELETE_CHILD|ADS_RIGHT_DS_READ_PROP,
|
||||
sid_local );
|
||||
|
||||
AddAccessAllowedAceEx( acl, ACL_REVISION, CONTAINER_INHERIT_ACE|INHERITED_ACE,
|
||||
ADS_RIGHT_DS_CREATE_CHILD|ADS_RIGHT_DS_DELETE_CHILD|ADS_RIGHT_DS_READ_PROP,
|
||||
sid_users );
|
||||
|
||||
InitializeSecurityDescriptor( &absolute_sd, SECURITY_DESCRIPTOR_REVISION );
|
||||
|
||||
SetSecurityDescriptorOwner( &absolute_sd, sid_admin, TRUE );
|
||||
SetSecurityDescriptorGroup( &absolute_sd, sid_admin, TRUE );
|
||||
SetSecurityDescriptorDacl( &absolute_sd, TRUE, acl, TRUE );
|
||||
|
||||
*size = GetSecurityDescriptorLength( &absolute_sd );
|
||||
|
||||
*sd = HeapAlloc( GetProcessHeap(), 0, *size );
|
||||
if (!*sd)
|
||||
hr = E_OUTOFMEMORY;
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
if (!MakeSelfRelativeSD(&absolute_sd, *sd, size)) {
|
||||
HeapFree( GetProcessHeap(), 0, *sd );
|
||||
*sd = NULL;
|
||||
hr = E_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT security_get_sd( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT var_sd, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr, ret;
|
||||
SECURITY_DESCRIPTOR *sd;
|
||||
DWORD sd_size;
|
||||
|
||||
TRACE("%p, %p\n", in, out);
|
||||
|
||||
hr = create_signature( class_systemsecurityW, method_getsdW, PARAM_OUT, &sig );
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
|
||||
IWbemClassObject_Release( sig );
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
ret = get_sd( &sd, &sd_size );
|
||||
|
||||
if (SUCCEEDED(ret))
|
||||
{
|
||||
VariantInit( &var_sd );
|
||||
|
||||
hr = to_byte_array( sd, sd_size, &var_sd );
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
hr = IWbemClassObject_Put( out_params, param_sdW, 0, &var_sd, CIM_UINT8|CIM_FLAG_ARRAY );
|
||||
|
||||
HeapFree( GetProcessHeap(), 0, sd );
|
||||
VariantClear( &var_sd );
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
set_variant( VT_UI4, ret, NULL, &retval );
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr) && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
|
||||
IWbemClassObject_Release( out_params );
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
||||
HRESULT security_set_sd( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
FIXME("stub\n");
|
||||
|
||||
hr = create_signature( class_systemsecurityW, method_setsdW, PARAM_OUT, &sig );
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
|
||||
IWbemClassObject_Release( sig );
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
set_variant( VT_UI4, S_OK, NULL, &retval );
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
|
||||
if (SUCCEEDED(hr) && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
|
||||
IWbemClassObject_Release( out_params );
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
269
reactos/dll/win32/wbemprox/service.c
Normal file
269
reactos/dll/win32/wbemprox/service.c
Normal file
|
@ -0,0 +1,269 @@
|
|||
/*
|
||||
* Win32_Service methods implementation
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
static UINT map_error( DWORD error )
|
||||
{
|
||||
switch (error)
|
||||
{
|
||||
case ERROR_SUCCESS: return 0;
|
||||
case ERROR_ACCESS_DENIED: return 2;
|
||||
case ERROR_DEPENDENT_SERVICES_RUNNING: return 3;
|
||||
case ERROR_INVALID_SERVICE_CONTROL: return 4;
|
||||
case ERROR_SERVICE_CANNOT_ACCEPT_CTRL: return 5;
|
||||
case ERROR_SERVICE_NOT_ACTIVE: return 6;
|
||||
case ERROR_SERVICE_REQUEST_TIMEOUT: return 7;
|
||||
case ERROR_SERVICE_ALREADY_RUNNING: return 10;
|
||||
default:
|
||||
WARN("unknown error %u\n", error);
|
||||
break;
|
||||
}
|
||||
return 8;
|
||||
}
|
||||
|
||||
static HRESULT control_service( const WCHAR *name, DWORD control, VARIANT *retval )
|
||||
{
|
||||
SC_HANDLE manager, service = NULL;
|
||||
SERVICE_STATUS status;
|
||||
UINT error = 0;
|
||||
|
||||
if (!(manager = OpenSCManagerW( NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE )))
|
||||
{
|
||||
error = map_error( GetLastError() );
|
||||
goto done;
|
||||
}
|
||||
if (!(service = OpenServiceW( manager, name, SERVICE_STOP|SERVICE_START|SERVICE_PAUSE_CONTINUE )))
|
||||
{
|
||||
error = map_error( GetLastError() );
|
||||
goto done;
|
||||
}
|
||||
if (!ControlService( service, control, &status )) error = map_error( GetLastError() );
|
||||
CloseServiceHandle( service );
|
||||
|
||||
done:
|
||||
set_variant( VT_UI4, error, NULL, retval );
|
||||
if (manager) CloseServiceHandle( manager );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT service_pause_service( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT name, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %p, %p\n", obj, in, out);
|
||||
|
||||
hr = IWbemClassObject_Get( obj, prop_nameW, 0, &name, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_signature( class_serviceW, method_pauseserviceW, PARAM_OUT, &sig );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
return hr;
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
IWbemClassObject_Release( sig );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
hr = control_service( V_BSTR(&name), SERVICE_CONTROL_PAUSE, &retval );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
if (out_params)
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
|
||||
done:
|
||||
VariantClear( &name );
|
||||
IWbemClassObject_Release( sig );
|
||||
if (hr == S_OK && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
if (out_params) IWbemClassObject_Release( out_params );
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT service_resume_service( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT name, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %p, %p\n", obj, in, out);
|
||||
|
||||
hr = IWbemClassObject_Get( obj, prop_nameW, 0, &name, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_signature( class_serviceW, method_resumeserviceW, PARAM_OUT, &sig );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
return hr;
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
IWbemClassObject_Release( sig );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
hr = control_service( V_BSTR(&name), SERVICE_CONTROL_CONTINUE, &retval );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
if (out_params)
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
|
||||
done:
|
||||
VariantClear( &name );
|
||||
IWbemClassObject_Release( sig );
|
||||
if (hr == S_OK && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
if (out_params) IWbemClassObject_Release( out_params );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT start_service( const WCHAR *name, VARIANT *retval )
|
||||
{
|
||||
SC_HANDLE manager, service = NULL;
|
||||
UINT error = 0;
|
||||
|
||||
if (!(manager = OpenSCManagerW( NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE )))
|
||||
{
|
||||
error = map_error( GetLastError() );
|
||||
goto done;
|
||||
}
|
||||
if (!(service = OpenServiceW( manager, name, SERVICE_START )))
|
||||
{
|
||||
error = map_error( GetLastError() );
|
||||
goto done;
|
||||
}
|
||||
if (!StartServiceW( service, 0, NULL )) error = map_error( GetLastError() );
|
||||
CloseServiceHandle( service );
|
||||
|
||||
done:
|
||||
set_variant( VT_UI4, error, NULL, retval );
|
||||
if (manager) CloseServiceHandle( manager );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT service_start_service( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT name, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %p, %p\n", obj, in, out);
|
||||
|
||||
hr = IWbemClassObject_Get( obj, prop_nameW, 0, &name, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_signature( class_serviceW, method_startserviceW, PARAM_OUT, &sig );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
return hr;
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
IWbemClassObject_Release( sig );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
hr = start_service( V_BSTR(&name), &retval );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
if (out_params)
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
|
||||
done:
|
||||
VariantClear( &name );
|
||||
IWbemClassObject_Release( sig );
|
||||
if (hr == S_OK && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
if (out_params) IWbemClassObject_Release( out_params );
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT service_stop_service( IWbemClassObject *obj, IWbemClassObject *in, IWbemClassObject **out )
|
||||
{
|
||||
VARIANT name, retval;
|
||||
IWbemClassObject *sig, *out_params = NULL;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %p, %p\n", obj, in, out);
|
||||
|
||||
hr = IWbemClassObject_Get( obj, prop_nameW, 0, &name, NULL, NULL );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_signature( class_serviceW, method_stopserviceW, PARAM_OUT, &sig );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
return hr;
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
hr = IWbemClassObject_SpawnInstance( sig, 0, &out_params );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
VariantClear( &name );
|
||||
IWbemClassObject_Release( sig );
|
||||
return hr;
|
||||
}
|
||||
}
|
||||
hr = control_service( V_BSTR(&name), SERVICE_CONTROL_STOP, &retval );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
if (out_params)
|
||||
hr = IWbemClassObject_Put( out_params, param_returnvalueW, 0, &retval, CIM_UINT32 );
|
||||
|
||||
done:
|
||||
VariantClear( &name );
|
||||
IWbemClassObject_Release( sig );
|
||||
if (hr == S_OK && out)
|
||||
{
|
||||
*out = out_params;
|
||||
IWbemClassObject_AddRef( out_params );
|
||||
}
|
||||
if (out_params) IWbemClassObject_Release( out_params );
|
||||
return hr;
|
||||
}
|
888
reactos/dll/win32/wbemprox/services.c
Normal file
888
reactos/dll/win32/wbemprox/services.c
Normal file
|
@ -0,0 +1,888 @@
|
|||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
struct client_security
|
||||
{
|
||||
IClientSecurity IClientSecurity_iface;
|
||||
};
|
||||
|
||||
static inline struct client_security *impl_from_IClientSecurity( IClientSecurity *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, struct client_security, IClientSecurity_iface );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI client_security_QueryInterface(
|
||||
IClientSecurity *iface,
|
||||
REFIID riid,
|
||||
void **ppvObject )
|
||||
{
|
||||
struct client_security *cs = impl_from_IClientSecurity( iface );
|
||||
|
||||
TRACE("%p %s %p\n", cs, debugstr_guid( riid ), ppvObject );
|
||||
|
||||
if ( IsEqualGUID( riid, &IID_IClientSecurity ) ||
|
||||
IsEqualGUID( riid, &IID_IUnknown ) )
|
||||
{
|
||||
*ppvObject = cs;
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("interface %s not implemented\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
IClientSecurity_AddRef( iface );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static ULONG WINAPI client_security_AddRef(
|
||||
IClientSecurity *iface )
|
||||
{
|
||||
FIXME("%p\n", iface);
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ULONG WINAPI client_security_Release(
|
||||
IClientSecurity *iface )
|
||||
{
|
||||
FIXME("%p\n", iface);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI client_security_QueryBlanket(
|
||||
IClientSecurity *iface,
|
||||
IUnknown *pProxy,
|
||||
DWORD *pAuthnSvc,
|
||||
DWORD *pAuthzSvc,
|
||||
OLECHAR **pServerPrincName,
|
||||
DWORD *pAuthnLevel,
|
||||
DWORD *pImpLevel,
|
||||
void **pAuthInfo,
|
||||
DWORD *pCapabilities )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI client_security_SetBlanket(
|
||||
IClientSecurity *iface,
|
||||
IUnknown *pProxy,
|
||||
DWORD AuthnSvc,
|
||||
DWORD AuthzSvc,
|
||||
OLECHAR *pServerPrincName,
|
||||
DWORD AuthnLevel,
|
||||
DWORD ImpLevel,
|
||||
void *pAuthInfo,
|
||||
DWORD Capabilities )
|
||||
{
|
||||
static const OLECHAR defaultW[] =
|
||||
{'<','C','O','L','E','_','D','E','F','A','U','L','T','_','P','R','I','N','C','I','P','A','L','>',0};
|
||||
const OLECHAR *princname = (pServerPrincName == COLE_DEFAULT_PRINCIPAL) ? defaultW : pServerPrincName;
|
||||
|
||||
FIXME("%p, %p, %u, %u, %s, %u, %u, %p, 0x%08x\n", iface, pProxy, AuthnSvc, AuthzSvc,
|
||||
debugstr_w(princname), AuthnLevel, ImpLevel, pAuthInfo, Capabilities);
|
||||
return WBEM_NO_ERROR;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI client_security_CopyProxy(
|
||||
IClientSecurity *iface,
|
||||
IUnknown *pProxy,
|
||||
IUnknown **ppCopy )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static const IClientSecurityVtbl client_security_vtbl =
|
||||
{
|
||||
client_security_QueryInterface,
|
||||
client_security_AddRef,
|
||||
client_security_Release,
|
||||
client_security_QueryBlanket,
|
||||
client_security_SetBlanket,
|
||||
client_security_CopyProxy
|
||||
};
|
||||
|
||||
IClientSecurity client_security = { &client_security_vtbl };
|
||||
|
||||
struct async_header
|
||||
{
|
||||
IWbemObjectSink *sink;
|
||||
void (*proc)( struct async_header * );
|
||||
HANDLE cancel;
|
||||
HANDLE wait;
|
||||
};
|
||||
|
||||
struct async_query
|
||||
{
|
||||
struct async_header hdr;
|
||||
WCHAR *str;
|
||||
};
|
||||
|
||||
static void free_async( struct async_header *async )
|
||||
{
|
||||
if (async->sink) IWbemObjectSink_Release( async->sink );
|
||||
CloseHandle( async->cancel );
|
||||
CloseHandle( async->wait );
|
||||
heap_free( async );
|
||||
}
|
||||
|
||||
static BOOL init_async( struct async_header *async, IWbemObjectSink *sink,
|
||||
void (*proc)(struct async_header *) )
|
||||
{
|
||||
if (!(async->wait = CreateEventW( NULL, FALSE, FALSE, NULL ))) return FALSE;
|
||||
if (!(async->cancel = CreateEventW( NULL, FALSE, FALSE, NULL )))
|
||||
{
|
||||
CloseHandle( async->wait );
|
||||
return FALSE;
|
||||
}
|
||||
async->proc = proc;
|
||||
async->sink = sink;
|
||||
IWbemObjectSink_AddRef( sink );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static DWORD CALLBACK async_proc( LPVOID param )
|
||||
{
|
||||
struct async_header *async = param;
|
||||
HANDLE wait = async->wait;
|
||||
|
||||
async->proc( async );
|
||||
|
||||
WaitForSingleObject( async->cancel, INFINITE );
|
||||
SetEvent( wait );
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
static HRESULT queue_async( struct async_header *async )
|
||||
{
|
||||
if (QueueUserWorkItem( async_proc, async, WT_EXECUTELONGFUNCTION )) return S_OK;
|
||||
return HRESULT_FROM_WIN32( GetLastError() );
|
||||
}
|
||||
|
||||
struct wbem_services
|
||||
{
|
||||
IWbemServices IWbemServices_iface;
|
||||
LONG refs;
|
||||
CRITICAL_SECTION cs;
|
||||
WCHAR *namespace;
|
||||
struct async_header *async;
|
||||
};
|
||||
|
||||
static inline struct wbem_services *impl_from_IWbemServices( IWbemServices *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, struct wbem_services, IWbemServices_iface );
|
||||
}
|
||||
|
||||
static ULONG WINAPI wbem_services_AddRef(
|
||||
IWbemServices *iface )
|
||||
{
|
||||
struct wbem_services *ws = impl_from_IWbemServices( iface );
|
||||
return InterlockedIncrement( &ws->refs );
|
||||
}
|
||||
|
||||
static ULONG WINAPI wbem_services_Release(
|
||||
IWbemServices *iface )
|
||||
{
|
||||
struct wbem_services *ws = impl_from_IWbemServices( iface );
|
||||
LONG refs = InterlockedDecrement( &ws->refs );
|
||||
if (!refs)
|
||||
{
|
||||
TRACE("destroying %p\n", ws);
|
||||
|
||||
EnterCriticalSection( &ws->cs );
|
||||
if (ws->async) SetEvent( ws->async->cancel );
|
||||
LeaveCriticalSection( &ws->cs );
|
||||
if (ws->async)
|
||||
{
|
||||
WaitForSingleObject( ws->async->wait, INFINITE );
|
||||
free_async( ws->async );
|
||||
}
|
||||
ws->cs.DebugInfo->Spare[0] = 0;
|
||||
DeleteCriticalSection( &ws->cs );
|
||||
heap_free( ws->namespace );
|
||||
heap_free( ws );
|
||||
}
|
||||
return refs;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_QueryInterface(
|
||||
IWbemServices *iface,
|
||||
REFIID riid,
|
||||
void **ppvObject )
|
||||
{
|
||||
struct wbem_services *ws = impl_from_IWbemServices( iface );
|
||||
|
||||
TRACE("%p %s %p\n", ws, debugstr_guid( riid ), ppvObject );
|
||||
|
||||
if ( IsEqualGUID( riid, &IID_IWbemServices ) ||
|
||||
IsEqualGUID( riid, &IID_IUnknown ) )
|
||||
{
|
||||
*ppvObject = ws;
|
||||
}
|
||||
else if ( IsEqualGUID( riid, &IID_IClientSecurity ) )
|
||||
{
|
||||
*ppvObject = &client_security;
|
||||
return S_OK;
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("interface %s not implemented\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
IWbemServices_AddRef( iface );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_OpenNamespace(
|
||||
IWbemServices *iface,
|
||||
const BSTR strNamespace,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemServices **ppWorkingNamespace,
|
||||
IWbemCallResult **ppResult )
|
||||
{
|
||||
static const WCHAR cimv2W[] = {'c','i','m','v','2',0};
|
||||
static const WCHAR defaultW[] = {'d','e','f','a','u','l','t',0};
|
||||
struct wbem_services *ws = impl_from_IWbemServices( iface );
|
||||
|
||||
TRACE("%p, %s, 0x%08x, %p, %p, %p\n", iface, debugstr_w(strNamespace), lFlags,
|
||||
pCtx, ppWorkingNamespace, ppResult);
|
||||
|
||||
if ((strcmpiW( strNamespace, cimv2W ) && strcmpiW( strNamespace, defaultW )) || ws->namespace)
|
||||
return WBEM_E_INVALID_NAMESPACE;
|
||||
|
||||
return WbemServices_create( cimv2W, (void **)ppWorkingNamespace );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_CancelAsyncCall(
|
||||
IWbemServices *iface,
|
||||
IWbemObjectSink *pSink )
|
||||
{
|
||||
struct wbem_services *services = impl_from_IWbemServices( iface );
|
||||
struct async_header *async;
|
||||
|
||||
TRACE("%p, %p\n", iface, pSink);
|
||||
|
||||
if (!pSink) return WBEM_E_INVALID_PARAMETER;
|
||||
|
||||
EnterCriticalSection( &services->cs );
|
||||
|
||||
if (!(async = services->async))
|
||||
{
|
||||
LeaveCriticalSection( &services->cs );
|
||||
return WBEM_E_INVALID_PARAMETER;
|
||||
}
|
||||
services->async = NULL;
|
||||
SetEvent( async->cancel );
|
||||
|
||||
LeaveCriticalSection( &services->cs );
|
||||
|
||||
WaitForSingleObject( async->wait, INFINITE );
|
||||
free_async( async );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_QueryObjectSink(
|
||||
IWbemServices *iface,
|
||||
LONG lFlags,
|
||||
IWbemObjectSink **ppResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
struct path
|
||||
{
|
||||
WCHAR *class;
|
||||
UINT class_len;
|
||||
WCHAR *filter;
|
||||
UINT filter_len;
|
||||
};
|
||||
|
||||
static HRESULT parse_path( const WCHAR *str, struct path **ret )
|
||||
{
|
||||
struct path *path;
|
||||
const WCHAR *p = str, *q;
|
||||
UINT len;
|
||||
|
||||
if (!(path = heap_alloc_zero( sizeof(*path) ))) return E_OUTOFMEMORY;
|
||||
|
||||
while (*p && *p != '.') p++;
|
||||
|
||||
len = p - str;
|
||||
if (!(path->class = heap_alloc( (len + 1) * sizeof(WCHAR) )))
|
||||
{
|
||||
heap_free( path );
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
memcpy( path->class, str, len * sizeof(WCHAR) );
|
||||
path->class[len] = 0;
|
||||
path->class_len = len;
|
||||
|
||||
if (p[0] == '.' && p[1])
|
||||
{
|
||||
q = ++p;
|
||||
while (*q) q++;
|
||||
|
||||
len = q - p;
|
||||
if (!(path->filter = heap_alloc( (len + 1) * sizeof(WCHAR) )))
|
||||
{
|
||||
heap_free( path->class );
|
||||
heap_free( path );
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
memcpy( path->filter, p, len * sizeof(WCHAR) );
|
||||
path->filter[len] = 0;
|
||||
path->filter_len = len;
|
||||
}
|
||||
*ret = path;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static void free_path( struct path *path )
|
||||
{
|
||||
heap_free( path->class );
|
||||
heap_free( path->filter );
|
||||
heap_free( path );
|
||||
}
|
||||
|
||||
static WCHAR *query_from_path( const struct path *path )
|
||||
{
|
||||
static const WCHAR selectW[] =
|
||||
{'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','%','s',' ',
|
||||
'W','H','E','R','E',' ','%','s',0};
|
||||
static const WCHAR select_allW[] =
|
||||
{'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',0};
|
||||
WCHAR *query;
|
||||
UINT len;
|
||||
|
||||
if (path->filter)
|
||||
{
|
||||
len = path->class_len + path->filter_len + SIZEOF(selectW);
|
||||
if (!(query = heap_alloc( len * sizeof(WCHAR) ))) return NULL;
|
||||
sprintfW( query, selectW, path->class, path->filter );
|
||||
}
|
||||
else
|
||||
{
|
||||
len = path->class_len + SIZEOF(select_allW);
|
||||
if (!(query = heap_alloc( len * sizeof(WCHAR) ))) return NULL;
|
||||
strcpyW( query, select_allW );
|
||||
strcatW( query, path->class );
|
||||
}
|
||||
return query;
|
||||
}
|
||||
|
||||
static HRESULT create_instance_enum( const struct path *path, IEnumWbemClassObject **iter )
|
||||
{
|
||||
WCHAR *query;
|
||||
HRESULT hr;
|
||||
|
||||
if (!(query = query_from_path( path ))) return E_OUTOFMEMORY;
|
||||
hr = exec_query( query, iter );
|
||||
heap_free( query );
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT get_object( const WCHAR *object_path, IWbemClassObject **obj )
|
||||
{
|
||||
IEnumWbemClassObject *iter;
|
||||
struct path *path;
|
||||
HRESULT hr;
|
||||
|
||||
hr = parse_path( object_path, &path );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_instance_enum( path, &iter );
|
||||
if (hr != S_OK)
|
||||
{
|
||||
free_path( path );
|
||||
return hr;
|
||||
}
|
||||
hr = create_class_object( path->class, iter, 0, NULL, obj );
|
||||
IEnumWbemClassObject_Release( iter );
|
||||
free_path( path );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_GetObject(
|
||||
IWbemServices *iface,
|
||||
const BSTR strObjectPath,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemClassObject **ppObject,
|
||||
IWbemCallResult **ppCallResult )
|
||||
{
|
||||
TRACE("%p, %s, 0x%08x, %p, %p, %p\n", iface, debugstr_w(strObjectPath), lFlags,
|
||||
pCtx, ppObject, ppCallResult);
|
||||
|
||||
if (lFlags) FIXME("unsupported flags 0x%08x\n", lFlags);
|
||||
|
||||
if (!strObjectPath || !strObjectPath[0])
|
||||
return create_class_object( NULL, NULL, 0, NULL, ppObject );
|
||||
|
||||
return get_object( strObjectPath, ppObject );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_GetObjectAsync(
|
||||
IWbemServices *iface,
|
||||
const BSTR strObjectPath,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_PutClass(
|
||||
IWbemServices *iface,
|
||||
IWbemClassObject *pObject,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemCallResult **ppCallResult )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_PutClassAsync(
|
||||
IWbemServices *iface,
|
||||
IWbemClassObject *pObject,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_DeleteClass(
|
||||
IWbemServices *iface,
|
||||
const BSTR strClass,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemCallResult **ppCallResult )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_DeleteClassAsync(
|
||||
IWbemServices *iface,
|
||||
const BSTR strClass,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_CreateClassEnum(
|
||||
IWbemServices *iface,
|
||||
const BSTR strSuperclass,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IEnumWbemClassObject **ppEnum )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_CreateClassEnumAsync(
|
||||
IWbemServices *iface,
|
||||
const BSTR strSuperclass,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_PutInstance(
|
||||
IWbemServices *iface,
|
||||
IWbemClassObject *pInst,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemCallResult **ppCallResult )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_PutInstanceAsync(
|
||||
IWbemServices *iface,
|
||||
IWbemClassObject *pInst,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_DeleteInstance(
|
||||
IWbemServices *iface,
|
||||
const BSTR strObjectPath,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemCallResult **ppCallResult )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_DeleteInstanceAsync(
|
||||
IWbemServices *iface,
|
||||
const BSTR strObjectPath,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_CreateInstanceEnum(
|
||||
IWbemServices *iface,
|
||||
const BSTR strClass,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IEnumWbemClassObject **ppEnum )
|
||||
{
|
||||
struct path *path;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %s, 0%08x, %p, %p\n", iface, debugstr_w(strClass), lFlags, pCtx, ppEnum);
|
||||
|
||||
if (lFlags) FIXME("unsupported flags 0x%08x\n", lFlags);
|
||||
|
||||
hr = parse_path( strClass, &path );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
hr = create_instance_enum( path, ppEnum );
|
||||
free_path( path );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_CreateInstanceEnumAsync(
|
||||
IWbemServices *iface,
|
||||
const BSTR strFilter,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_ExecQuery(
|
||||
IWbemServices *iface,
|
||||
const BSTR strQueryLanguage,
|
||||
const BSTR strQuery,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IEnumWbemClassObject **ppEnum )
|
||||
{
|
||||
static const WCHAR wqlW[] = {'W','Q','L',0};
|
||||
|
||||
TRACE("%p, %s, %s, 0x%08x, %p, %p\n", iface, debugstr_w(strQueryLanguage),
|
||||
debugstr_w(strQuery), lFlags, pCtx, ppEnum);
|
||||
|
||||
if (!strQueryLanguage || !strQuery || !strQuery[0]) return WBEM_E_INVALID_PARAMETER;
|
||||
if (strcmpiW( strQueryLanguage, wqlW )) return WBEM_E_INVALID_QUERY_TYPE;
|
||||
return exec_query( strQuery, ppEnum );
|
||||
}
|
||||
|
||||
static void async_exec_query( struct async_header *hdr )
|
||||
{
|
||||
struct async_query *query = (struct async_query *)hdr;
|
||||
IEnumWbemClassObject *result;
|
||||
IWbemClassObject *obj;
|
||||
ULONG count;
|
||||
HRESULT hr;
|
||||
|
||||
hr = exec_query( query->str, &result );
|
||||
if (hr == S_OK)
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
IEnumWbemClassObject_Next( result, WBEM_INFINITE, 1, &obj, &count );
|
||||
if (!count) break;
|
||||
IWbemObjectSink_Indicate( query->hdr.sink, 1, &obj );
|
||||
IWbemClassObject_Release( obj );
|
||||
}
|
||||
IEnumWbemClassObject_Release( result );
|
||||
}
|
||||
IWbemObjectSink_SetStatus( query->hdr.sink, WBEM_STATUS_COMPLETE, hr, NULL, NULL );
|
||||
heap_free( query->str );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_ExecQueryAsync(
|
||||
IWbemServices *iface,
|
||||
const BSTR strQueryLanguage,
|
||||
const BSTR strQuery,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
struct wbem_services *services = impl_from_IWbemServices( iface );
|
||||
IWbemObjectSink *sink;
|
||||
HRESULT hr = E_OUTOFMEMORY;
|
||||
struct async_header *async;
|
||||
struct async_query *query;
|
||||
|
||||
TRACE("%p, %s, %s, 0x%08x, %p, %p\n", iface, debugstr_w(strQueryLanguage), debugstr_w(strQuery),
|
||||
lFlags, pCtx, pResponseHandler);
|
||||
|
||||
if (!pResponseHandler) return WBEM_E_INVALID_PARAMETER;
|
||||
|
||||
hr = IWbemObjectSink_QueryInterface( pResponseHandler, &IID_IWbemObjectSink, (void **)&sink );
|
||||
if (FAILED(hr)) return hr;
|
||||
|
||||
EnterCriticalSection( &services->cs );
|
||||
|
||||
if (services->async)
|
||||
{
|
||||
FIXME("handle more than one pending async\n");
|
||||
hr = WBEM_E_FAILED;
|
||||
goto done;
|
||||
}
|
||||
if (!(query = heap_alloc_zero( sizeof(*query) ))) goto done;
|
||||
async = (struct async_header *)query;
|
||||
|
||||
if (!(init_async( async, sink, async_exec_query )))
|
||||
{
|
||||
free_async( async );
|
||||
goto done;
|
||||
}
|
||||
if (!(query->str = heap_strdupW( strQuery )))
|
||||
{
|
||||
free_async( async );
|
||||
goto done;
|
||||
}
|
||||
hr = queue_async( async );
|
||||
if (hr == S_OK) services->async = async;
|
||||
else
|
||||
{
|
||||
heap_free( query->str );
|
||||
free_async( async );
|
||||
}
|
||||
|
||||
done:
|
||||
LeaveCriticalSection( &services->cs );
|
||||
IWbemObjectSink_Release( sink );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_ExecNotificationQuery(
|
||||
IWbemServices *iface,
|
||||
const BSTR strQueryLanguage,
|
||||
const BSTR strQuery,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IEnumWbemClassObject **ppEnum )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_ExecNotificationQueryAsync(
|
||||
IWbemServices *iface,
|
||||
const BSTR strQueryLanguage,
|
||||
const BSTR strQuery,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
struct wbem_services *services = impl_from_IWbemServices( iface );
|
||||
IWbemObjectSink *sink;
|
||||
HRESULT hr = E_OUTOFMEMORY;
|
||||
struct async_header *async;
|
||||
struct async_query *query;
|
||||
|
||||
TRACE("%p, %s, %s, 0x%08x, %p, %p\n", iface, debugstr_w(strQueryLanguage), debugstr_w(strQuery),
|
||||
lFlags, pCtx, pResponseHandler);
|
||||
|
||||
if (!pResponseHandler) return WBEM_E_INVALID_PARAMETER;
|
||||
|
||||
hr = IWbemObjectSink_QueryInterface( pResponseHandler, &IID_IWbemObjectSink, (void **)&sink );
|
||||
if (FAILED(hr)) return hr;
|
||||
|
||||
EnterCriticalSection( &services->cs );
|
||||
|
||||
if (services->async)
|
||||
{
|
||||
FIXME("handle more than one pending async\n");
|
||||
hr = WBEM_E_FAILED;
|
||||
goto done;
|
||||
}
|
||||
if (!(query = heap_alloc_zero( sizeof(*query) ))) goto done;
|
||||
async = (struct async_header *)query;
|
||||
|
||||
if (!(init_async( async, sink, async_exec_query )))
|
||||
{
|
||||
free_async( async );
|
||||
goto done;
|
||||
}
|
||||
if (!(query->str = heap_strdupW( strQuery )))
|
||||
{
|
||||
free_async( async );
|
||||
goto done;
|
||||
}
|
||||
hr = queue_async( async );
|
||||
if (hr == S_OK) services->async = async;
|
||||
else
|
||||
{
|
||||
heap_free( query->str );
|
||||
free_async( async );
|
||||
}
|
||||
|
||||
done:
|
||||
LeaveCriticalSection( &services->cs );
|
||||
IWbemObjectSink_Release( sink );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_ExecMethod(
|
||||
IWbemServices *iface,
|
||||
const BSTR strObjectPath,
|
||||
const BSTR strMethodName,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemClassObject *pInParams,
|
||||
IWbemClassObject **ppOutParams,
|
||||
IWbemCallResult **ppCallResult )
|
||||
{
|
||||
IEnumWbemClassObject *result = NULL;
|
||||
IWbemClassObject *obj = NULL;
|
||||
struct query *query = NULL;
|
||||
struct path *path;
|
||||
WCHAR *str;
|
||||
class_method *func;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("%p, %s, %s, %08x, %p, %p, %p, %p\n", iface, debugstr_w(strObjectPath),
|
||||
debugstr_w(strMethodName), lFlags, pCtx, pInParams, ppOutParams, ppCallResult);
|
||||
|
||||
if (lFlags) FIXME("flags %08x not supported\n", lFlags);
|
||||
|
||||
if ((hr = parse_path( strObjectPath, &path )) != S_OK) return hr;
|
||||
if (!(str = query_from_path( path )))
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
if (!(query = create_query()))
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
hr = parse_query( str, &query->view, &query->mem );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
hr = execute_view( query->view );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
hr = EnumWbemClassObject_create( query, (void **)&result );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
hr = create_class_object( query->view->table->name, result, 0, NULL, &obj );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
hr = get_method( query->view->table, strMethodName, &func );
|
||||
if (hr != S_OK) goto done;
|
||||
|
||||
hr = func( obj, pInParams, ppOutParams );
|
||||
|
||||
done:
|
||||
if (result) IEnumWbemClassObject_Release( result );
|
||||
if (obj) IWbemClassObject_Release( obj );
|
||||
free_query( query );
|
||||
free_path( path );
|
||||
heap_free( str );
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_services_ExecMethodAsync(
|
||||
IWbemServices *iface,
|
||||
const BSTR strObjectPath,
|
||||
const BSTR strMethodName,
|
||||
LONG lFlags,
|
||||
IWbemContext *pCtx,
|
||||
IWbemClassObject *pInParams,
|
||||
IWbemObjectSink *pResponseHandler )
|
||||
{
|
||||
FIXME("\n");
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static const IWbemServicesVtbl wbem_services_vtbl =
|
||||
{
|
||||
wbem_services_QueryInterface,
|
||||
wbem_services_AddRef,
|
||||
wbem_services_Release,
|
||||
wbem_services_OpenNamespace,
|
||||
wbem_services_CancelAsyncCall,
|
||||
wbem_services_QueryObjectSink,
|
||||
wbem_services_GetObject,
|
||||
wbem_services_GetObjectAsync,
|
||||
wbem_services_PutClass,
|
||||
wbem_services_PutClassAsync,
|
||||
wbem_services_DeleteClass,
|
||||
wbem_services_DeleteClassAsync,
|
||||
wbem_services_CreateClassEnum,
|
||||
wbem_services_CreateClassEnumAsync,
|
||||
wbem_services_PutInstance,
|
||||
wbem_services_PutInstanceAsync,
|
||||
wbem_services_DeleteInstance,
|
||||
wbem_services_DeleteInstanceAsync,
|
||||
wbem_services_CreateInstanceEnum,
|
||||
wbem_services_CreateInstanceEnumAsync,
|
||||
wbem_services_ExecQuery,
|
||||
wbem_services_ExecQueryAsync,
|
||||
wbem_services_ExecNotificationQuery,
|
||||
wbem_services_ExecNotificationQueryAsync,
|
||||
wbem_services_ExecMethod,
|
||||
wbem_services_ExecMethodAsync
|
||||
};
|
||||
|
||||
HRESULT WbemServices_create( const WCHAR *namespace, LPVOID *ppObj )
|
||||
{
|
||||
struct wbem_services *ws;
|
||||
|
||||
TRACE("(%p)\n", ppObj);
|
||||
|
||||
ws = heap_alloc( sizeof(*ws) );
|
||||
if (!ws) return E_OUTOFMEMORY;
|
||||
|
||||
ws->IWbemServices_iface.lpVtbl = &wbem_services_vtbl;
|
||||
ws->refs = 1;
|
||||
ws->namespace = heap_strdupW( namespace );
|
||||
ws->async = NULL;
|
||||
InitializeCriticalSection( &ws->cs );
|
||||
ws->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": wbemprox_services.cs");
|
||||
|
||||
*ppObj = &ws->IWbemServices_iface;
|
||||
|
||||
TRACE("returning iface %p\n", *ppObj);
|
||||
return S_OK;
|
||||
}
|
418
reactos/dll/win32/wbemprox/table.c
Normal file
418
reactos/dll/win32/wbemprox/table.c
Normal file
|
@ -0,0 +1,418 @@
|
|||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
#include <winuser.h>
|
||||
|
||||
HRESULT get_column_index( const struct table *table, const WCHAR *name, UINT *column )
|
||||
{
|
||||
UINT i;
|
||||
for (i = 0; i < table->num_cols; i++)
|
||||
{
|
||||
if (!strcmpiW( table->columns[i].name, name ))
|
||||
{
|
||||
*column = i;
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
return WBEM_E_INVALID_QUERY;
|
||||
}
|
||||
|
||||
UINT get_type_size( CIMTYPE type )
|
||||
{
|
||||
if (type & CIM_FLAG_ARRAY) return sizeof(void *);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case CIM_BOOLEAN:
|
||||
return sizeof(int);
|
||||
case CIM_SINT8:
|
||||
case CIM_UINT8:
|
||||
return sizeof(INT8);
|
||||
case CIM_SINT16:
|
||||
case CIM_UINT16:
|
||||
return sizeof(INT16);
|
||||
case CIM_SINT32:
|
||||
case CIM_UINT32:
|
||||
return sizeof(INT32);
|
||||
case CIM_SINT64:
|
||||
case CIM_UINT64:
|
||||
return sizeof(INT64);
|
||||
case CIM_DATETIME:
|
||||
case CIM_STRING:
|
||||
return sizeof(WCHAR *);
|
||||
default:
|
||||
ERR("unhandled type %u\n", type);
|
||||
break;
|
||||
}
|
||||
return sizeof(LONGLONG);
|
||||
}
|
||||
|
||||
static UINT get_column_size( const struct table *table, UINT column )
|
||||
{
|
||||
return get_type_size( table->columns[column].type & COL_TYPE_MASK );
|
||||
}
|
||||
|
||||
static UINT get_column_offset( const struct table *table, UINT column )
|
||||
{
|
||||
UINT i, offset = 0;
|
||||
for (i = 0; i < column; i++) offset += get_column_size( table, i );
|
||||
return offset;
|
||||
}
|
||||
|
||||
static UINT get_row_size( const struct table *table )
|
||||
{
|
||||
return get_column_offset( table, table->num_cols - 1 ) + get_column_size( table, table->num_cols - 1 );
|
||||
}
|
||||
|
||||
HRESULT get_value( const struct table *table, UINT row, UINT column, LONGLONG *val )
|
||||
{
|
||||
UINT col_offset, row_size;
|
||||
const BYTE *ptr;
|
||||
|
||||
col_offset = get_column_offset( table, column );
|
||||
row_size = get_row_size( table );
|
||||
ptr = table->data + row * row_size + col_offset;
|
||||
|
||||
if (table->columns[column].type & CIM_FLAG_ARRAY)
|
||||
{
|
||||
*val = (INT_PTR)*(const void **)ptr;
|
||||
return S_OK;
|
||||
}
|
||||
switch (table->columns[column].type & COL_TYPE_MASK)
|
||||
{
|
||||
case CIM_BOOLEAN:
|
||||
*val = *(const int *)ptr;
|
||||
break;
|
||||
case CIM_DATETIME:
|
||||
case CIM_STRING:
|
||||
*val = (INT_PTR)*(const WCHAR **)ptr;
|
||||
break;
|
||||
case CIM_SINT8:
|
||||
*val = *(const INT8 *)ptr;
|
||||
break;
|
||||
case CIM_UINT8:
|
||||
*val = *(const UINT8 *)ptr;
|
||||
break;
|
||||
case CIM_SINT16:
|
||||
*val = *(const INT16 *)ptr;
|
||||
break;
|
||||
case CIM_UINT16:
|
||||
*val = *(const UINT16 *)ptr;
|
||||
break;
|
||||
case CIM_SINT32:
|
||||
*val = *(const INT32 *)ptr;
|
||||
break;
|
||||
case CIM_UINT32:
|
||||
*val = *(const UINT32 *)ptr;
|
||||
break;
|
||||
case CIM_SINT64:
|
||||
*val = *(const INT64 *)ptr;
|
||||
break;
|
||||
case CIM_UINT64:
|
||||
*val = *(const UINT64 *)ptr;
|
||||
break;
|
||||
default:
|
||||
ERR("invalid column type %u\n", table->columns[column].type & COL_TYPE_MASK);
|
||||
*val = 0;
|
||||
break;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
BSTR get_value_bstr( const struct table *table, UINT row, UINT column )
|
||||
{
|
||||
static const WCHAR fmt_signedW[] = {'%','d',0};
|
||||
static const WCHAR fmt_unsignedW[] = {'%','u',0};
|
||||
static const WCHAR fmt_signed64W[] = {'%','I','6','4','d',0};
|
||||
static const WCHAR fmt_unsigned64W[] = {'%','I','6','4','u',0};
|
||||
static const WCHAR fmt_strW[] = {'\"','%','s','\"',0};
|
||||
static const WCHAR trueW[] = {'T','R','U','E',0};
|
||||
static const WCHAR falseW[] = {'F','A','L','S','E',0};
|
||||
LONGLONG val;
|
||||
BSTR ret;
|
||||
WCHAR number[22];
|
||||
UINT len;
|
||||
|
||||
if (table->columns[column].type & CIM_FLAG_ARRAY)
|
||||
{
|
||||
FIXME("array to string conversion not handled\n");
|
||||
return NULL;
|
||||
}
|
||||
if (get_value( table, row, column, &val ) != S_OK) return NULL;
|
||||
|
||||
switch (table->columns[column].type & COL_TYPE_MASK)
|
||||
{
|
||||
case CIM_BOOLEAN:
|
||||
if (val) return SysAllocString( trueW );
|
||||
else return SysAllocString( falseW );
|
||||
|
||||
case CIM_DATETIME:
|
||||
case CIM_STRING:
|
||||
if (!val) return NULL;
|
||||
len = strlenW( (const WCHAR *)(INT_PTR)val ) + 2;
|
||||
if (!(ret = SysAllocStringLen( NULL, len ))) return NULL;
|
||||
sprintfW( ret, fmt_strW, (const WCHAR *)(INT_PTR)val );
|
||||
return ret;
|
||||
|
||||
case CIM_SINT16:
|
||||
case CIM_SINT32:
|
||||
sprintfW( number, fmt_signedW, val );
|
||||
return SysAllocString( number );
|
||||
|
||||
case CIM_UINT16:
|
||||
case CIM_UINT32:
|
||||
sprintfW( number, fmt_unsignedW, val );
|
||||
return SysAllocString( number );
|
||||
|
||||
case CIM_SINT64:
|
||||
wsprintfW( number, fmt_signed64W, val );
|
||||
return SysAllocString( number );
|
||||
|
||||
case CIM_UINT64:
|
||||
wsprintfW( number, fmt_unsigned64W, val );
|
||||
return SysAllocString( number );
|
||||
|
||||
default:
|
||||
FIXME("unhandled column type %u\n", table->columns[column].type & COL_TYPE_MASK);
|
||||
break;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
HRESULT set_value( const struct table *table, UINT row, UINT column, LONGLONG val,
|
||||
CIMTYPE type )
|
||||
{
|
||||
UINT col_offset, row_size;
|
||||
BYTE *ptr;
|
||||
|
||||
if ((table->columns[column].type & COL_TYPE_MASK) != type) return WBEM_E_TYPE_MISMATCH;
|
||||
|
||||
col_offset = get_column_offset( table, column );
|
||||
row_size = get_row_size( table );
|
||||
ptr = table->data + row * row_size + col_offset;
|
||||
|
||||
switch (table->columns[column].type & COL_TYPE_MASK)
|
||||
{
|
||||
case CIM_DATETIME:
|
||||
case CIM_STRING:
|
||||
*(WCHAR **)ptr = (WCHAR *)(INT_PTR)val;
|
||||
break;
|
||||
case CIM_SINT8:
|
||||
*(INT8 *)ptr = val;
|
||||
break;
|
||||
case CIM_UINT8:
|
||||
*(UINT8 *)ptr = val;
|
||||
break;
|
||||
case CIM_SINT16:
|
||||
*(INT16 *)ptr = val;
|
||||
break;
|
||||
case CIM_UINT16:
|
||||
*(UINT16 *)ptr = val;
|
||||
break;
|
||||
case CIM_SINT32:
|
||||
*(INT32 *)ptr = val;
|
||||
break;
|
||||
case CIM_UINT32:
|
||||
*(UINT32 *)ptr = val;
|
||||
break;
|
||||
case CIM_SINT64:
|
||||
*(INT64 *)ptr = val;
|
||||
break;
|
||||
case CIM_UINT64:
|
||||
*(UINT64 *)ptr = val;
|
||||
break;
|
||||
default:
|
||||
FIXME("unhandled column type %u\n", type);
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT get_method( const struct table *table, const WCHAR *name, class_method **func )
|
||||
{
|
||||
UINT i, j;
|
||||
|
||||
for (i = 0; i < table->num_rows; i++)
|
||||
{
|
||||
for (j = 0; j < table->num_cols; j++)
|
||||
{
|
||||
if (table->columns[j].type & COL_FLAG_METHOD && !strcmpW( table->columns[j].name, name ))
|
||||
{
|
||||
HRESULT hr;
|
||||
LONGLONG val;
|
||||
|
||||
if ((hr = get_value( table, i, j, &val )) != S_OK) return hr;
|
||||
*func = (class_method *)(INT_PTR)val;
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
return WBEM_E_INVALID_METHOD;
|
||||
|
||||
}
|
||||
|
||||
void free_row_values( const struct table *table, UINT row )
|
||||
{
|
||||
UINT i, type;
|
||||
LONGLONG val;
|
||||
|
||||
for (i = 0; i < table->num_cols; i++)
|
||||
{
|
||||
if (!(table->columns[i].type & COL_FLAG_DYNAMIC)) continue;
|
||||
|
||||
type = table->columns[i].type & COL_TYPE_MASK;
|
||||
if (type == CIM_STRING || type == CIM_DATETIME)
|
||||
{
|
||||
if (get_value( table, row, i, &val ) == S_OK) heap_free( (void *)(INT_PTR)val );
|
||||
}
|
||||
else if (type & CIM_FLAG_ARRAY)
|
||||
{
|
||||
if (get_value( table, row, i, &val ) == S_OK)
|
||||
destroy_array( (void *)(INT_PTR)val, type & CIM_TYPE_MASK );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clear_table( struct table *table )
|
||||
{
|
||||
UINT i;
|
||||
|
||||
if (!table->data) return;
|
||||
|
||||
for (i = 0; i < table->num_rows; i++) free_row_values( table, i );
|
||||
if (table->fill)
|
||||
{
|
||||
table->num_rows = 0;
|
||||
table->num_rows_allocated = 0;
|
||||
heap_free( table->data );
|
||||
table->data = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void free_columns( struct column *columns, UINT num_cols )
|
||||
{
|
||||
UINT i;
|
||||
|
||||
for (i = 0; i < num_cols; i++) { heap_free( (WCHAR *)columns[i].name ); }
|
||||
heap_free( columns );
|
||||
}
|
||||
|
||||
void free_table( struct table *table )
|
||||
{
|
||||
if (!table) return;
|
||||
|
||||
clear_table( table );
|
||||
if (table->flags & TABLE_FLAG_DYNAMIC)
|
||||
{
|
||||
TRACE("destroying %p\n", table);
|
||||
heap_free( (WCHAR *)table->name );
|
||||
free_columns( (struct column *)table->columns, table->num_cols );
|
||||
list_remove( &table->entry );
|
||||
heap_free( table );
|
||||
}
|
||||
}
|
||||
|
||||
void release_table( struct table *table )
|
||||
{
|
||||
if (!InterlockedDecrement( &table->refs )) free_table( table );
|
||||
}
|
||||
|
||||
struct table *addref_table( struct table *table )
|
||||
{
|
||||
InterlockedIncrement( &table->refs );
|
||||
return table;
|
||||
}
|
||||
|
||||
struct table *grab_table( const WCHAR *name )
|
||||
{
|
||||
struct table *table;
|
||||
|
||||
LIST_FOR_EACH_ENTRY( table, table_list, struct table, entry )
|
||||
{
|
||||
if (!strcmpiW( table->name, name ))
|
||||
{
|
||||
TRACE("returning %p\n", table);
|
||||
return addref_table( table );
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct table *create_table( const WCHAR *name, UINT num_cols, const struct column *columns,
|
||||
UINT num_rows, UINT num_allocated, BYTE *data,
|
||||
enum fill_status (*fill)(struct table *, const struct expr *cond) )
|
||||
{
|
||||
struct table *table;
|
||||
|
||||
if (!(table = heap_alloc( sizeof(*table) ))) return NULL;
|
||||
table->name = heap_strdupW( name );
|
||||
table->num_cols = num_cols;
|
||||
table->columns = columns;
|
||||
table->num_rows = num_rows;
|
||||
table->num_rows_allocated = num_allocated;
|
||||
table->data = data;
|
||||
table->fill = fill;
|
||||
table->flags = TABLE_FLAG_DYNAMIC;
|
||||
table->refs = 0;
|
||||
list_init( &table->entry );
|
||||
return table;
|
||||
}
|
||||
|
||||
BOOL add_table( struct table *table )
|
||||
{
|
||||
struct table *iter;
|
||||
|
||||
LIST_FOR_EACH_ENTRY( iter, table_list, struct table, entry )
|
||||
{
|
||||
if (!strcmpiW( iter->name, table->name ))
|
||||
{
|
||||
TRACE("table %s already exists\n", debugstr_w(table->name));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
list_add_tail( table_list, &table->entry );
|
||||
TRACE("added %p\n", table);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BSTR get_method_name( const WCHAR *class, UINT index )
|
||||
{
|
||||
struct table *table;
|
||||
UINT i, count = 0;
|
||||
BSTR ret;
|
||||
|
||||
if (!(table = grab_table( class ))) return NULL;
|
||||
|
||||
for (i = 0; i < table->num_cols; i++)
|
||||
{
|
||||
if (table->columns[i].type & COL_FLAG_METHOD)
|
||||
{
|
||||
if (index == count)
|
||||
{
|
||||
ret = SysAllocString( table->columns[i].name );
|
||||
release_table( table );
|
||||
return ret;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
}
|
||||
release_table( table );
|
||||
return NULL;
|
||||
}
|
217
reactos/dll/win32/wbemprox/wbemlocator.c
Normal file
217
reactos/dll/win32/wbemprox/wbemlocator.c
Normal file
|
@ -0,0 +1,217 @@
|
|||
/*
|
||||
* Copyright 2009 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
|
||||
*/
|
||||
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IWbemLocator IWbemLocator_iface;
|
||||
LONG refs;
|
||||
} wbem_locator;
|
||||
|
||||
static inline wbem_locator *impl_from_IWbemLocator( IWbemLocator *iface )
|
||||
{
|
||||
return CONTAINING_RECORD(iface, wbem_locator, IWbemLocator_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI wbem_locator_AddRef(
|
||||
IWbemLocator *iface )
|
||||
{
|
||||
wbem_locator *wl = impl_from_IWbemLocator( iface );
|
||||
return InterlockedIncrement( &wl->refs );
|
||||
}
|
||||
|
||||
static ULONG WINAPI wbem_locator_Release(
|
||||
IWbemLocator *iface )
|
||||
{
|
||||
wbem_locator *wl = impl_from_IWbemLocator( iface );
|
||||
LONG refs = InterlockedDecrement( &wl->refs );
|
||||
if (!refs)
|
||||
{
|
||||
TRACE("destroying %p\n", wl);
|
||||
heap_free( wl );
|
||||
}
|
||||
return refs;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_locator_QueryInterface(
|
||||
IWbemLocator *iface,
|
||||
REFIID riid,
|
||||
void **ppvObject )
|
||||
{
|
||||
wbem_locator *This = impl_from_IWbemLocator( iface );
|
||||
|
||||
TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
|
||||
|
||||
if ( IsEqualGUID( riid, &IID_IWbemLocator ) ||
|
||||
IsEqualGUID( riid, &IID_IUnknown ) )
|
||||
{
|
||||
*ppvObject = iface;
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("interface %s not implemented\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
IWbemLocator_AddRef( iface );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static BOOL is_local_machine( const WCHAR *server )
|
||||
{
|
||||
static const WCHAR dotW[] = {'.',0};
|
||||
static const WCHAR localhostW[] = {'l','o','c','a','l','h','o','s','t',0};
|
||||
WCHAR buffer[MAX_COMPUTERNAME_LENGTH + 1];
|
||||
DWORD len = sizeof(buffer) / sizeof(buffer[0]);
|
||||
|
||||
if (!server || !strcmpW( server, dotW ) || !strcmpiW( server, localhostW )) return TRUE;
|
||||
if (GetComputerNameW( buffer, &len ) && !strcmpiW( server, buffer )) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static HRESULT parse_resource( const WCHAR *resource, WCHAR **server, WCHAR **namespace )
|
||||
{
|
||||
static const WCHAR rootW[] = {'R','O','O','T'};
|
||||
static const WCHAR cimv2W[] = {'C','I','M','V','2'};
|
||||
static const WCHAR defaultW[] = {'D','E','F','A','U','L','T'};
|
||||
HRESULT hr = WBEM_E_INVALID_NAMESPACE;
|
||||
const WCHAR *p, *q;
|
||||
unsigned int len;
|
||||
|
||||
*server = NULL;
|
||||
*namespace = NULL;
|
||||
p = q = resource;
|
||||
if (*p == '\\' || *p == '/')
|
||||
{
|
||||
p++;
|
||||
if (*p == '\\' || *p == '/') p++;
|
||||
if (!*p) return WBEM_E_INVALID_NAMESPACE;
|
||||
if (*p == '\\' || *p == '/') return WBEM_E_INVALID_PARAMETER;
|
||||
q = p + 1;
|
||||
while (*q && *q != '\\' && *q != '/') q++;
|
||||
if (!*q) return WBEM_E_INVALID_NAMESPACE;
|
||||
len = q - p;
|
||||
if (!(*server = heap_alloc( (len + 1) * sizeof(WCHAR) )))
|
||||
{
|
||||
hr = E_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
memcpy( *server, p, len * sizeof(WCHAR) );
|
||||
(*server)[len] = 0;
|
||||
q++;
|
||||
}
|
||||
if (!*q) goto done;
|
||||
p = q;
|
||||
while (*q && *q != '\\' && *q != '/') q++;
|
||||
len = q - p;
|
||||
if (len >= sizeof(rootW) / sizeof(rootW[0]) && memicmpW( rootW, p, len )) goto done;
|
||||
if (!*q)
|
||||
{
|
||||
hr = S_OK;
|
||||
goto done;
|
||||
}
|
||||
q++;
|
||||
len = strlenW( q );
|
||||
if ((len != sizeof(cimv2W) / sizeof(cimv2W[0]) || memicmpW( q, cimv2W, len )) &&
|
||||
(len != sizeof(defaultW) / sizeof(defaultW[0]) || memicmpW( q, defaultW, len )))
|
||||
goto done;
|
||||
if (!(*namespace = heap_alloc( (len + 1) * sizeof(WCHAR) ))) hr = E_OUTOFMEMORY;
|
||||
else
|
||||
{
|
||||
memcpy( *namespace, p, len * sizeof(WCHAR) );
|
||||
(*namespace)[len] = 0;
|
||||
hr = S_OK;
|
||||
}
|
||||
|
||||
done:
|
||||
if (hr != S_OK)
|
||||
{
|
||||
heap_free( *server );
|
||||
heap_free( *namespace );
|
||||
}
|
||||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wbem_locator_ConnectServer(
|
||||
IWbemLocator *iface,
|
||||
const BSTR NetworkResource,
|
||||
const BSTR User,
|
||||
const BSTR Password,
|
||||
const BSTR Locale,
|
||||
LONG SecurityFlags,
|
||||
const BSTR Authority,
|
||||
IWbemContext *pCtx,
|
||||
IWbemServices **ppNamespace)
|
||||
{
|
||||
HRESULT hr;
|
||||
WCHAR *server, *namespace;
|
||||
|
||||
TRACE("%p, %s, %s, %s, %s, 0x%08x, %s, %p, %p)\n", iface, debugstr_w(NetworkResource), debugstr_w(User),
|
||||
debugstr_w(Password), debugstr_w(Locale), SecurityFlags, debugstr_w(Authority), pCtx, ppNamespace);
|
||||
|
||||
hr = parse_resource( NetworkResource, &server, &namespace );
|
||||
if (hr != S_OK) return hr;
|
||||
|
||||
if (!is_local_machine( server ))
|
||||
{
|
||||
FIXME("remote computer not supported\n");
|
||||
heap_free( server );
|
||||
heap_free( namespace );
|
||||
return WBEM_E_TRANSPORT_FAILURE;
|
||||
}
|
||||
if (User || Password || Authority)
|
||||
FIXME("authentication not supported\n");
|
||||
if (Locale)
|
||||
FIXME("specific locale not supported\n");
|
||||
if (SecurityFlags)
|
||||
FIXME("unsupported flags\n");
|
||||
|
||||
hr = WbemServices_create( namespace, (void **)ppNamespace );
|
||||
heap_free( namespace );
|
||||
heap_free( server );
|
||||
if (SUCCEEDED( hr ))
|
||||
return WBEM_NO_ERROR;
|
||||
|
||||
return WBEM_E_FAILED;
|
||||
}
|
||||
|
||||
static const IWbemLocatorVtbl wbem_locator_vtbl =
|
||||
{
|
||||
wbem_locator_QueryInterface,
|
||||
wbem_locator_AddRef,
|
||||
wbem_locator_Release,
|
||||
wbem_locator_ConnectServer
|
||||
};
|
||||
|
||||
HRESULT WbemLocator_create( LPVOID *ppObj )
|
||||
{
|
||||
wbem_locator *wl;
|
||||
|
||||
TRACE("(%p)\n", ppObj);
|
||||
|
||||
wl = heap_alloc( sizeof(*wl) );
|
||||
if (!wl) return E_OUTOFMEMORY;
|
||||
|
||||
wl->IWbemLocator_iface.lpVtbl = &wbem_locator_vtbl;
|
||||
wl->refs = 1;
|
||||
|
||||
*ppObj = &wl->IWbemLocator_iface;
|
||||
|
||||
TRACE("returning iface %p\n", *ppObj);
|
||||
return S_OK;
|
||||
}
|
35
reactos/dll/win32/wbemprox/wbemprox.idl
Normal file
35
reactos/dll/win32/wbemprox/wbemprox.idl
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* COM Classes for wbemprox
|
||||
*
|
||||
* Copyright 2010 Alexandre Julliard
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#pragma makedep register
|
||||
|
||||
[
|
||||
helpstring("WBEM Locator"),
|
||||
threading(both),
|
||||
uuid(4590f811-1d3a-11d0-891f-00aa004b2e24)
|
||||
]
|
||||
coclass WbemLocator { interface IWbemLocator; }
|
||||
|
||||
[
|
||||
helpstring("WBEM Administrative Locator"),
|
||||
threading(both),
|
||||
uuid(cb8555cc-9128-11d1-ad9b-00c04fd8fdff)
|
||||
]
|
||||
coclass WbemAdministrativeLocator { interface IWbemLocator; }
|
1
reactos/dll/win32/wbemprox/wbemprox.rc
Normal file
1
reactos/dll/win32/wbemprox/wbemprox.rc
Normal file
|
@ -0,0 +1 @@
|
|||
1 WINE_REGISTRY "wbemprox.rgs"
|
17
reactos/dll/win32/wbemprox/wbemprox.rgs
Normal file
17
reactos/dll/win32/wbemprox/wbemprox.rgs
Normal file
|
@ -0,0 +1,17 @@
|
|||
HKCR
|
||||
{
|
||||
NoRemove Interface
|
||||
{
|
||||
}
|
||||
NoRemove CLSID
|
||||
{
|
||||
'{4590F811-1D3A-11D0-891F-00AA004B2E24}' = s 'WBEM Locator'
|
||||
{
|
||||
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
|
||||
}
|
||||
'{CB8555CC-9128-11D1-AD9B-00C04FD8FDFF}' = s 'WBEM Administrative Locator'
|
||||
{
|
||||
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
|
||||
}
|
||||
}
|
||||
}
|
4
reactos/dll/win32/wbemprox/wbemprox.spec
Normal file
4
reactos/dll/win32/wbemprox/wbemprox.spec
Normal file
|
@ -0,0 +1,4 @@
|
|||
@ stdcall -private DllCanUnloadNow()
|
||||
@ stdcall -private DllGetClassObject(ptr ptr ptr)
|
||||
@ stdcall -private DllRegisterServer()
|
||||
@ stdcall -private DllUnregisterServer()
|
315
reactos/dll/win32/wbemprox/wbemprox_private.h
Normal file
315
reactos/dll/win32/wbemprox/wbemprox_private.h
Normal file
|
@ -0,0 +1,315 @@
|
|||
/*
|
||||
* Copyright 2009 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
|
||||
*/
|
||||
|
||||
#ifndef _WBEMPROX_PRIVATE_H_
|
||||
#define _WBEMPROX_PRIVATE_H_
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#define _INC_WINDOWS
|
||||
#define COM_NO_WINDOWS_H
|
||||
|
||||
#define COBJMACROS
|
||||
#define NONAMELESSUNION
|
||||
#define NONAMELESSSTRUCT
|
||||
|
||||
#include <ntstatus.h>
|
||||
#define WIN32_NO_STATUS
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winsvc.h>
|
||||
#include <objbase.h>
|
||||
#include <oleauto.h>
|
||||
#include <wbemcli.h>
|
||||
|
||||
#include <wine/debug.h>
|
||||
#include <wine/list.h>
|
||||
#include <wine/unicode.h>
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
|
||||
|
||||
IClientSecurity client_security DECLSPEC_HIDDEN;
|
||||
struct list *table_list DECLSPEC_HIDDEN;
|
||||
|
||||
#define SIZEOF(array) (sizeof(array)/sizeof((array)[0]))
|
||||
|
||||
enum param_direction
|
||||
{
|
||||
PARAM_OUT = -1,
|
||||
PARAM_INOUT = 0,
|
||||
PARAM_IN = 1
|
||||
};
|
||||
|
||||
#define CIM_TYPE_MASK 0x00000fff
|
||||
|
||||
#define COL_TYPE_MASK 0x0000ffff
|
||||
#define COL_FLAG_DYNAMIC 0x00010000
|
||||
#define COL_FLAG_KEY 0x00020000
|
||||
#define COL_FLAG_METHOD 0x00040000
|
||||
|
||||
typedef HRESULT (class_method)(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **);
|
||||
|
||||
enum operator
|
||||
{
|
||||
OP_EQ = 1,
|
||||
OP_AND = 2,
|
||||
OP_OR = 3,
|
||||
OP_GT = 4,
|
||||
OP_LT = 5,
|
||||
OP_LE = 6,
|
||||
OP_GE = 7,
|
||||
OP_NE = 8,
|
||||
OP_ISNULL = 9,
|
||||
OP_NOTNULL = 10,
|
||||
OP_LIKE = 11,
|
||||
OP_NOT = 12
|
||||
};
|
||||
|
||||
struct expr;
|
||||
struct complex_expr
|
||||
{
|
||||
enum operator op;
|
||||
struct expr *left;
|
||||
struct expr *right;
|
||||
};
|
||||
|
||||
enum expr_type
|
||||
{
|
||||
EXPR_COMPLEX = 1,
|
||||
EXPR_UNARY = 2,
|
||||
EXPR_PROPVAL = 3,
|
||||
EXPR_SVAL = 4,
|
||||
EXPR_IVAL = 5,
|
||||
EXPR_BVAL = 6
|
||||
};
|
||||
|
||||
struct expr
|
||||
{
|
||||
enum expr_type type;
|
||||
union
|
||||
{
|
||||
struct complex_expr expr;
|
||||
const struct property *propval;
|
||||
const WCHAR *sval;
|
||||
int ival;
|
||||
} u;
|
||||
};
|
||||
|
||||
struct column
|
||||
{
|
||||
const WCHAR *name;
|
||||
UINT type;
|
||||
VARTYPE vartype; /* 0 for default mapping */
|
||||
};
|
||||
|
||||
enum fill_status
|
||||
{
|
||||
FILL_STATUS_FAILED = -1,
|
||||
FILL_STATUS_UNFILTERED,
|
||||
FILL_STATUS_FILTERED
|
||||
};
|
||||
|
||||
#define TABLE_FLAG_DYNAMIC 0x00000001
|
||||
|
||||
struct table
|
||||
{
|
||||
const WCHAR *name;
|
||||
UINT num_cols;
|
||||
const struct column *columns;
|
||||
UINT num_rows;
|
||||
UINT num_rows_allocated;
|
||||
BYTE *data;
|
||||
enum fill_status (*fill)(struct table *, const struct expr *cond);
|
||||
UINT flags;
|
||||
struct list entry;
|
||||
LONG refs;
|
||||
};
|
||||
|
||||
struct property
|
||||
{
|
||||
const WCHAR *name;
|
||||
const WCHAR *class;
|
||||
const struct property *next;
|
||||
};
|
||||
|
||||
struct array
|
||||
{
|
||||
UINT count;
|
||||
void *ptr;
|
||||
};
|
||||
|
||||
struct field
|
||||
{
|
||||
UINT type;
|
||||
VARTYPE vartype; /* 0 for default mapping */
|
||||
union
|
||||
{
|
||||
LONGLONG ival;
|
||||
WCHAR *sval;
|
||||
struct array *aval;
|
||||
} u;
|
||||
};
|
||||
|
||||
struct record
|
||||
{
|
||||
UINT count;
|
||||
struct field *fields;
|
||||
struct table *table;
|
||||
};
|
||||
|
||||
struct view
|
||||
{
|
||||
const struct property *proplist;
|
||||
struct table *table;
|
||||
const struct expr *cond;
|
||||
UINT *result;
|
||||
UINT count;
|
||||
};
|
||||
|
||||
struct query
|
||||
{
|
||||
LONG refs;
|
||||
struct view *view;
|
||||
struct list mem;
|
||||
};
|
||||
|
||||
struct query *create_query(void) DECLSPEC_HIDDEN;
|
||||
void free_query( struct query * ) DECLSPEC_HIDDEN;
|
||||
struct query *addref_query( struct query * ) DECLSPEC_HIDDEN;
|
||||
void release_query( struct query *query ) DECLSPEC_HIDDEN;
|
||||
HRESULT exec_query( const WCHAR *, IEnumWbemClassObject ** ) DECLSPEC_HIDDEN;
|
||||
HRESULT parse_query( const WCHAR *, struct view **, struct list * ) DECLSPEC_HIDDEN;
|
||||
HRESULT create_view( const struct property *, const WCHAR *, const struct expr *,
|
||||
struct view ** ) DECLSPEC_HIDDEN;
|
||||
void destroy_view( struct view * ) DECLSPEC_HIDDEN;
|
||||
HRESULT execute_view( struct view * ) DECLSPEC_HIDDEN;
|
||||
void init_table_list( void ) DECLSPEC_HIDDEN;
|
||||
struct table *grab_table( const WCHAR * ) DECLSPEC_HIDDEN;
|
||||
struct table *addref_table( struct table * ) DECLSPEC_HIDDEN;
|
||||
void release_table( struct table * ) DECLSPEC_HIDDEN;
|
||||
struct table *create_table( const WCHAR *, UINT, const struct column *, UINT, UINT, BYTE *,
|
||||
enum fill_status (*)(struct table *, const struct expr *) ) DECLSPEC_HIDDEN;
|
||||
BOOL add_table( struct table * ) DECLSPEC_HIDDEN;
|
||||
void free_columns( struct column *, UINT ) DECLSPEC_HIDDEN;
|
||||
void free_row_values( const struct table *, UINT ) DECLSPEC_HIDDEN;
|
||||
void clear_table( struct table * ) DECLSPEC_HIDDEN;
|
||||
void free_table( struct table * ) DECLSPEC_HIDDEN;
|
||||
UINT get_type_size( CIMTYPE ) DECLSPEC_HIDDEN;
|
||||
HRESULT eval_cond( const struct table *, UINT, const struct expr *, LONGLONG *, UINT * ) DECLSPEC_HIDDEN;
|
||||
HRESULT get_column_index( const struct table *, const WCHAR *, UINT * ) DECLSPEC_HIDDEN;
|
||||
HRESULT get_value( const struct table *, UINT, UINT, LONGLONG * ) DECLSPEC_HIDDEN;
|
||||
BSTR get_value_bstr( const struct table *, UINT, UINT ) DECLSPEC_HIDDEN;
|
||||
HRESULT set_value( const struct table *, UINT, UINT, LONGLONG, CIMTYPE ) DECLSPEC_HIDDEN;
|
||||
BOOL is_method( const struct table *, UINT ) DECLSPEC_HIDDEN;
|
||||
HRESULT get_method( const struct table *, const WCHAR *, class_method ** ) DECLSPEC_HIDDEN;
|
||||
HRESULT get_propval( const struct view *, UINT, const WCHAR *, VARIANT *,
|
||||
CIMTYPE *, LONG * ) DECLSPEC_HIDDEN;
|
||||
HRESULT put_propval( const struct view *, UINT, const WCHAR *, VARIANT *, CIMTYPE ) DECLSPEC_HIDDEN;
|
||||
HRESULT to_longlong( VARIANT *, LONGLONG *, CIMTYPE * ) DECLSPEC_HIDDEN;
|
||||
SAFEARRAY *to_safearray( const struct array *, CIMTYPE ) DECLSPEC_HIDDEN;
|
||||
VARTYPE to_vartype( CIMTYPE ) DECLSPEC_HIDDEN;
|
||||
void destroy_array( struct array *, CIMTYPE ) DECLSPEC_HIDDEN;
|
||||
BOOL is_selected_prop( const struct view *, const WCHAR * ) DECLSPEC_HIDDEN;
|
||||
HRESULT get_properties( const struct view *, LONG, SAFEARRAY ** ) DECLSPEC_HIDDEN;
|
||||
HRESULT get_object( const WCHAR *, IWbemClassObject ** ) DECLSPEC_HIDDEN;
|
||||
BSTR get_method_name( const WCHAR *, UINT ) DECLSPEC_HIDDEN;
|
||||
void set_variant( VARTYPE, LONGLONG, void *, VARIANT * ) DECLSPEC_HIDDEN;
|
||||
HRESULT create_signature( const WCHAR *, const WCHAR *, enum param_direction,
|
||||
IWbemClassObject ** ) DECLSPEC_HIDDEN;
|
||||
|
||||
HRESULT WbemLocator_create(LPVOID *) DECLSPEC_HIDDEN;
|
||||
HRESULT WbemServices_create(const WCHAR *, LPVOID *) DECLSPEC_HIDDEN;
|
||||
HRESULT create_class_object(const WCHAR *, IEnumWbemClassObject *, UINT,
|
||||
struct record *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT EnumWbemClassObject_create(struct query *, LPVOID *) DECLSPEC_HIDDEN;
|
||||
HRESULT WbemQualifierSet_create(const WCHAR *, const WCHAR *, LPVOID *) DECLSPEC_HIDDEN;
|
||||
|
||||
HRESULT process_get_owner(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT reg_enum_key(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT reg_enum_values(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT reg_get_stringvalue(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT service_pause_service(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT service_resume_service(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT service_start_service(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT service_stop_service(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT security_get_sd(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
HRESULT security_set_sd(IWbemClassObject *, IWbemClassObject *, IWbemClassObject **) DECLSPEC_HIDDEN;
|
||||
|
||||
static void *heap_alloc( size_t len ) __WINE_ALLOC_SIZE(1);
|
||||
static inline void *heap_alloc( size_t len )
|
||||
{
|
||||
return HeapAlloc( GetProcessHeap(), 0, len );
|
||||
}
|
||||
|
||||
static void *heap_realloc( void *mem, size_t len ) __WINE_ALLOC_SIZE(2);
|
||||
static inline void *heap_realloc( void *mem, size_t len )
|
||||
{
|
||||
return HeapReAlloc( GetProcessHeap(), 0, mem, len );
|
||||
}
|
||||
|
||||
static void *heap_alloc_zero( size_t len ) __WINE_ALLOC_SIZE(1);
|
||||
static inline void *heap_alloc_zero( size_t len )
|
||||
{
|
||||
return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len );
|
||||
}
|
||||
|
||||
static inline BOOL heap_free( void *mem )
|
||||
{
|
||||
return HeapFree( GetProcessHeap(), 0, mem );
|
||||
}
|
||||
|
||||
static inline WCHAR *heap_strdupW( const WCHAR *src )
|
||||
{
|
||||
WCHAR *dst;
|
||||
if (!src) return NULL;
|
||||
if ((dst = heap_alloc( (strlenW( src ) + 1) * sizeof(WCHAR) ))) strcpyW( dst, src );
|
||||
return dst;
|
||||
}
|
||||
|
||||
static const WCHAR class_processW[] = {'W','i','n','3','2','_','P','r','o','c','e','s','s',0};
|
||||
static const WCHAR class_serviceW[] = {'W','i','n','3','2','_','S','e','r','v','i','c','e',0};
|
||||
static const WCHAR class_stdregprovW[] = {'S','t','d','R','e','g','P','r','o','v',0};
|
||||
static const WCHAR class_systemsecurityW[] = {'_','_','S','y','s','t','e','m','S','e','c','u','r','i','t','y',0};
|
||||
|
||||
static const WCHAR prop_nameW[] = {'N','a','m','e',0};
|
||||
|
||||
static const WCHAR method_enumkeyW[] = {'E','n','u','m','K','e','y',0};
|
||||
static const WCHAR method_enumvaluesW[] = {'E','n','u','m','V','a','l','u','e','s',0};
|
||||
static const WCHAR method_getownerW[] = {'G','e','t','O','w','n','e','r',0};
|
||||
static const WCHAR method_getsdW[] = {'G','e','t','S','D',0};
|
||||
static const WCHAR method_getstringvalueW[] = {'G','e','t','S','t','r','i','n','g','V','a','l','u','e',0};
|
||||
static const WCHAR method_pauseserviceW[] = {'P','a','u','s','e','S','e','r','v','i','c','e',0};
|
||||
static const WCHAR method_resumeserviceW[] = {'R','e','s','u','m','e','S','e','r','v','i','c','e',0};
|
||||
static const WCHAR method_setsdW[] = {'S','e','t','S','D',0};
|
||||
static const WCHAR method_startserviceW[] = {'S','t','a','r','t','S','e','r','v','i','c','e',0};
|
||||
static const WCHAR method_stopserviceW[] = {'S','t','o','p','S','e','r','v','i','c','e',0};
|
||||
|
||||
static const WCHAR param_defkeyW[] = {'h','D','e','f','K','e','y',0};
|
||||
static const WCHAR param_domainW[] = {'D','o','m','a','i','n',0};
|
||||
static const WCHAR param_namesW[] = {'s','N','a','m','e','s',0};
|
||||
static const WCHAR param_returnvalueW[] = {'R','e','t','u','r','n','V','a','l','u','e',0};
|
||||
static const WCHAR param_sdW[] = {'S','D',0};
|
||||
static const WCHAR param_subkeynameW[] = {'s','S','u','b','K','e','y','N','a','m','e',0};
|
||||
static const WCHAR param_typesW[] = {'T','y','p','e','s',0};
|
||||
static const WCHAR param_userW[] = {'U','s','e','r',0};
|
||||
static const WCHAR param_valueW[] = {'s','V','a','l','u','e',0};
|
||||
static const WCHAR param_valuenameW[] = {'s','V','a','l','u','e','N','a','m','e',0};
|
||||
|
||||
#endif /* _WBEMPROX_PRIVATE_H_ */
|
2275
reactos/dll/win32/wbemprox/wql.tab.c
Normal file
2275
reactos/dll/win32/wbemprox/wql.tab.c
Normal file
File diff suppressed because it is too large
Load diff
701
reactos/dll/win32/wbemprox/wql.y
Normal file
701
reactos/dll/win32/wbemprox/wql.y
Normal file
|
@ -0,0 +1,701 @@
|
|||
%{
|
||||
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "wbemcli.h"
|
||||
#include "wbemprox_private.h"
|
||||
|
||||
#include "wine/list.h"
|
||||
#include "wine/debug.h"
|
||||
#include "wine/unicode.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wbemprox);
|
||||
|
||||
struct parser
|
||||
{
|
||||
const WCHAR *cmd;
|
||||
UINT idx;
|
||||
UINT len;
|
||||
HRESULT error;
|
||||
struct view **view;
|
||||
struct list *mem;
|
||||
};
|
||||
|
||||
struct string
|
||||
{
|
||||
const WCHAR *data;
|
||||
int len;
|
||||
};
|
||||
|
||||
static void *alloc_mem( struct parser *parser, UINT size )
|
||||
{
|
||||
struct list *mem = heap_alloc( sizeof(struct list) + size );
|
||||
list_add_tail( parser->mem, mem );
|
||||
return &mem[1];
|
||||
}
|
||||
|
||||
static struct property *alloc_property( struct parser *parser, const WCHAR *class, const WCHAR *name )
|
||||
{
|
||||
struct property *prop = alloc_mem( parser, sizeof(*prop) );
|
||||
if (prop)
|
||||
{
|
||||
prop->name = name;
|
||||
prop->class = class;
|
||||
prop->next = NULL;
|
||||
}
|
||||
return prop;
|
||||
}
|
||||
|
||||
static WCHAR *get_string( struct parser *parser, const struct string *str )
|
||||
{
|
||||
const WCHAR *p = str->data;
|
||||
int len = str->len;
|
||||
WCHAR *ret;
|
||||
|
||||
if ((p[0] == '\"' && p[len - 1] != '\"') ||
|
||||
(p[0] == '\'' && p[len - 1] != '\'')) return NULL;
|
||||
if ((p[0] == '\"' && p[len - 1] == '\"') ||
|
||||
(p[0] == '\'' && p[len - 1] == '\''))
|
||||
{
|
||||
p++;
|
||||
len -= 2;
|
||||
}
|
||||
if (!(ret = alloc_mem( parser, (len + 1) * sizeof(WCHAR) ))) return NULL;
|
||||
memcpy( ret, p, len * sizeof(WCHAR) );
|
||||
ret[len] = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int get_int( struct parser *parser )
|
||||
{
|
||||
const WCHAR *p = &parser->cmd[parser->idx];
|
||||
int i, ret = 0;
|
||||
|
||||
for (i = 0; i < parser->len; i++)
|
||||
{
|
||||
if (p[i] < '0' || p[i] > '9')
|
||||
{
|
||||
ERR("should only be numbers here!\n");
|
||||
break;
|
||||
}
|
||||
ret = (p[i] - '0') + ret * 10;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct expr *expr_complex( struct parser *parser, struct expr *l, UINT op, struct expr *r )
|
||||
{
|
||||
struct expr *e = alloc_mem( parser, sizeof(*e) );
|
||||
if (e)
|
||||
{
|
||||
e->type = EXPR_COMPLEX;
|
||||
e->u.expr.left = l;
|
||||
e->u.expr.op = op;
|
||||
e->u.expr.right = r;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
static struct expr *expr_unary( struct parser *parser, struct expr *l, UINT op )
|
||||
{
|
||||
struct expr *e = alloc_mem( parser, sizeof(*e) );
|
||||
if (e)
|
||||
{
|
||||
e->type = EXPR_UNARY;
|
||||
e->u.expr.left = l;
|
||||
e->u.expr.op = op;
|
||||
e->u.expr.right = NULL;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
static struct expr *expr_ival( struct parser *parser, int val )
|
||||
{
|
||||
struct expr *e = alloc_mem( parser, sizeof *e );
|
||||
if (e)
|
||||
{
|
||||
e->type = EXPR_IVAL;
|
||||
e->u.ival = val;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
static struct expr *expr_sval( struct parser *parser, const struct string *str )
|
||||
{
|
||||
struct expr *e = alloc_mem( parser, sizeof *e );
|
||||
if (e)
|
||||
{
|
||||
e->type = EXPR_SVAL;
|
||||
e->u.sval = get_string( parser, str );
|
||||
if (!e->u.sval)
|
||||
return NULL; /* e will be freed by query destructor */
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
static struct expr *expr_bval( struct parser *parser, int val )
|
||||
{
|
||||
struct expr *e = alloc_mem( parser, sizeof *e );
|
||||
if (e)
|
||||
{
|
||||
e->type = EXPR_BVAL;
|
||||
e->u.ival = val;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
static struct expr *expr_propval( struct parser *parser, const struct property *prop )
|
||||
{
|
||||
struct expr *e = alloc_mem( parser, sizeof *e );
|
||||
if (e)
|
||||
{
|
||||
e->type = EXPR_PROPVAL;
|
||||
e->u.propval = prop;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
static int wql_error( struct parser *parser, const char *str );
|
||||
static int wql_lex( void *val, struct parser *parser );
|
||||
|
||||
#define PARSER_BUBBLE_UP_VIEW( parser, result, current_view ) \
|
||||
*parser->view = current_view; \
|
||||
result = current_view
|
||||
|
||||
%}
|
||||
|
||||
%lex-param { struct parser *ctx }
|
||||
%parse-param { struct parser *ctx }
|
||||
%error-verbose
|
||||
%pure-parser
|
||||
|
||||
%union
|
||||
{
|
||||
struct string str;
|
||||
WCHAR *string;
|
||||
struct property *proplist;
|
||||
struct view *view;
|
||||
struct expr *expr;
|
||||
int integer;
|
||||
}
|
||||
|
||||
%token TK_SELECT TK_FROM TK_STAR TK_COMMA TK_DOT TK_IS TK_LP TK_RP TK_NULL TK_FALSE TK_TRUE
|
||||
%token TK_INTEGER TK_WHERE TK_SPACE TK_MINUS TK_ILLEGAL TK_BY
|
||||
%token <str> TK_STRING TK_ID
|
||||
|
||||
%type <string> id
|
||||
%type <proplist> prop proplist
|
||||
%type <view> select
|
||||
%type <expr> expr prop_val const_val string_val
|
||||
%type <integer> number
|
||||
|
||||
%left TK_OR
|
||||
%left TK_AND
|
||||
%left TK_NOT
|
||||
%left TK_EQ TK_NE TK_LT TK_GT TK_LE TK_GE TK_LIKE
|
||||
|
||||
%%
|
||||
|
||||
select:
|
||||
TK_SELECT TK_FROM id
|
||||
{
|
||||
HRESULT hr;
|
||||
struct parser *parser = ctx;
|
||||
struct view *view;
|
||||
|
||||
hr = create_view( NULL, $3, NULL, &view );
|
||||
if (hr != S_OK)
|
||||
YYABORT;
|
||||
|
||||
PARSER_BUBBLE_UP_VIEW( parser, $$, view );
|
||||
}
|
||||
| TK_SELECT proplist TK_FROM id
|
||||
{
|
||||
HRESULT hr;
|
||||
struct parser *parser = ctx;
|
||||
struct view *view;
|
||||
|
||||
hr = create_view( $2, $4, NULL, &view );
|
||||
if (hr != S_OK)
|
||||
YYABORT;
|
||||
|
||||
PARSER_BUBBLE_UP_VIEW( parser, $$, view );
|
||||
}
|
||||
| TK_SELECT proplist TK_FROM id TK_WHERE expr
|
||||
{
|
||||
HRESULT hr;
|
||||
struct parser *parser = ctx;
|
||||
struct view *view;
|
||||
|
||||
hr = create_view( $2, $4, $6, &view );
|
||||
if (hr != S_OK)
|
||||
YYABORT;
|
||||
|
||||
PARSER_BUBBLE_UP_VIEW( parser, $$, view );
|
||||
}
|
||||
;
|
||||
|
||||
proplist:
|
||||
prop
|
||||
| prop TK_COMMA proplist
|
||||
{
|
||||
$1->next = $3;
|
||||
}
|
||||
| TK_STAR
|
||||
{
|
||||
$$ = NULL;
|
||||
}
|
||||
;
|
||||
|
||||
prop:
|
||||
id TK_DOT id
|
||||
{
|
||||
$$ = alloc_property( ctx, $1, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| id
|
||||
{
|
||||
$$ = alloc_property( ctx, NULL, $1 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
;
|
||||
|
||||
id:
|
||||
TK_ID
|
||||
{
|
||||
$$ = get_string( ctx, &$1 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
;
|
||||
|
||||
number:
|
||||
TK_INTEGER
|
||||
{
|
||||
$$ = get_int( ctx );
|
||||
}
|
||||
;
|
||||
|
||||
expr:
|
||||
TK_LP expr TK_RP
|
||||
{
|
||||
$$ = $2;
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| expr TK_AND expr
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_AND, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| expr TK_OR expr
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_OR, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| TK_NOT expr
|
||||
{
|
||||
$$ = expr_unary( ctx, $2, OP_NOT );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_EQ const_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_EQ, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_GT const_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_GT, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_LT const_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_LT, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_LE const_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_LE, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_GE const_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_GE, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_NE const_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_NE, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| const_val TK_EQ prop_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_EQ, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| const_val TK_GT prop_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_GT, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| const_val TK_LT prop_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_LT, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| const_val TK_LE prop_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_LE, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| const_val TK_GE prop_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_GE, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| const_val TK_NE prop_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_NE, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_LIKE string_val
|
||||
{
|
||||
$$ = expr_complex( ctx, $1, OP_LIKE, $3 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_IS TK_NULL
|
||||
{
|
||||
$$ = expr_unary( ctx, $1, OP_ISNULL );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| prop_val TK_IS TK_NOT TK_NULL
|
||||
{
|
||||
$$ = expr_unary( ctx, $1, OP_NOTNULL );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
;
|
||||
|
||||
string_val:
|
||||
TK_STRING
|
||||
{
|
||||
$$ = expr_sval( ctx, &$1 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
;
|
||||
|
||||
prop_val:
|
||||
prop
|
||||
{
|
||||
$$ = expr_propval( ctx, $1 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
;
|
||||
|
||||
const_val:
|
||||
number
|
||||
{
|
||||
$$ = expr_ival( ctx, $1 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| TK_STRING
|
||||
{
|
||||
$$ = expr_sval( ctx, &$1 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| TK_TRUE
|
||||
{
|
||||
$$ = expr_bval( ctx, -1 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
| TK_FALSE
|
||||
{
|
||||
$$ = expr_bval( ctx, 0 );
|
||||
if (!$$)
|
||||
YYABORT;
|
||||
}
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
HRESULT parse_query( const WCHAR *str, struct view **view, struct list *mem )
|
||||
{
|
||||
struct parser parser;
|
||||
int ret;
|
||||
|
||||
*view = NULL;
|
||||
|
||||
parser.cmd = str;
|
||||
parser.idx = 0;
|
||||
parser.len = 0;
|
||||
parser.error = WBEM_E_INVALID_QUERY;
|
||||
parser.view = view;
|
||||
parser.mem = mem;
|
||||
|
||||
ret = wql_parse( &parser );
|
||||
TRACE("wql_parse returned %d\n", ret);
|
||||
if (ret)
|
||||
{
|
||||
if (*parser.view)
|
||||
{
|
||||
destroy_view( *parser.view );
|
||||
*parser.view = NULL;
|
||||
}
|
||||
return parser.error;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static const char id_char[] =
|
||||
{
|
||||
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
|
||||
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
|
||||
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
};
|
||||
|
||||
struct keyword
|
||||
{
|
||||
const WCHAR *name;
|
||||
unsigned int len;
|
||||
int type;
|
||||
};
|
||||
|
||||
#define MAX_TOKEN_LEN 6
|
||||
|
||||
static const WCHAR andW[] = {'A','N','D'};
|
||||
static const WCHAR byW[] = {'B','Y'};
|
||||
static const WCHAR falseW[] = {'F','A','L','S','E'};
|
||||
static const WCHAR fromW[] = {'F','R','O','M'};
|
||||
static const WCHAR isW[] = {'I','S'};
|
||||
static const WCHAR likeW[] = {'L','I','K','E'};
|
||||
static const WCHAR notW[] = {'N','O','T'};
|
||||
static const WCHAR nullW[] = {'N','U','L','L'};
|
||||
static const WCHAR orW[] = {'O','R'};
|
||||
static const WCHAR selectW[] = {'S','E','L','E','C','T'};
|
||||
static const WCHAR trueW[] = {'T','R','U','E'};
|
||||
static const WCHAR whereW[] = {'W','H','E','R','E'};
|
||||
|
||||
static const struct keyword keyword_table[] =
|
||||
{
|
||||
{ andW, SIZEOF(andW), TK_AND },
|
||||
{ byW, SIZEOF(byW), TK_BY },
|
||||
{ falseW, SIZEOF(falseW), TK_FALSE },
|
||||
{ fromW, SIZEOF(fromW), TK_FROM },
|
||||
{ isW, SIZEOF(isW), TK_IS },
|
||||
{ likeW, SIZEOF(likeW), TK_LIKE },
|
||||
{ notW, SIZEOF(notW), TK_NOT },
|
||||
{ nullW, SIZEOF(nullW), TK_NULL },
|
||||
{ orW, SIZEOF(orW), TK_OR },
|
||||
{ selectW, SIZEOF(selectW), TK_SELECT },
|
||||
{ trueW, SIZEOF(trueW), TK_TRUE },
|
||||
{ whereW, SIZEOF(whereW), TK_WHERE }
|
||||
};
|
||||
|
||||
static int cmp_keyword( const void *arg1, const void *arg2 )
|
||||
{
|
||||
const struct keyword *key1 = arg1, *key2 = arg2;
|
||||
int len = min( key1->len, key2->len );
|
||||
int ret;
|
||||
|
||||
if ((ret = memicmpW( key1->name, key2->name, len ))) return ret;
|
||||
if (key1->len < key2->len) return -1;
|
||||
else if (key1->len > key2->len) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int keyword_type( const WCHAR *str, unsigned int len )
|
||||
{
|
||||
struct keyword key, *ret;
|
||||
|
||||
if (len > MAX_TOKEN_LEN) return TK_ID;
|
||||
|
||||
key.name = str;
|
||||
key.len = len;
|
||||
key.type = 0;
|
||||
ret = bsearch( &key, keyword_table, SIZEOF(keyword_table), sizeof(struct keyword), cmp_keyword );
|
||||
if (ret) return ret->type;
|
||||
return TK_ID;
|
||||
}
|
||||
|
||||
static int get_token( const WCHAR *s, int *token )
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (*s)
|
||||
{
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\r':
|
||||
case '\n':
|
||||
for (i = 1; isspaceW( s[i] ); i++) {}
|
||||
*token = TK_SPACE;
|
||||
return i;
|
||||
case '-':
|
||||
if (!s[1]) return -1;
|
||||
*token = TK_MINUS;
|
||||
return 1;
|
||||
case '(':
|
||||
*token = TK_LP;
|
||||
return 1;
|
||||
case ')':
|
||||
*token = TK_RP;
|
||||
return 1;
|
||||
case '*':
|
||||
*token = TK_STAR;
|
||||
return 1;
|
||||
case '=':
|
||||
*token = TK_EQ;
|
||||
return 1;
|
||||
case '<':
|
||||
if (s[1] == '=' )
|
||||
{
|
||||
*token = TK_LE;
|
||||
return 2;
|
||||
}
|
||||
else if (s[1] == '>')
|
||||
{
|
||||
*token = TK_NE;
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
*token = TK_LT;
|
||||
return 1;
|
||||
}
|
||||
case '>':
|
||||
if (s[1] == '=')
|
||||
{
|
||||
*token = TK_GE;
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
*token = TK_GT;
|
||||
return 1;
|
||||
}
|
||||
case '!':
|
||||
if (s[1] != '=')
|
||||
{
|
||||
*token = TK_ILLEGAL;
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
*token = TK_NE;
|
||||
return 2;
|
||||
}
|
||||
case ',':
|
||||
*token = TK_COMMA;
|
||||
return 1;
|
||||
case '\"':
|
||||
case '\'':
|
||||
for (i = 1; s[i]; i++)
|
||||
{
|
||||
if (s[i] == s[0]) break;
|
||||
}
|
||||
if (s[i]) i++;
|
||||
*token = TK_STRING;
|
||||
return i;
|
||||
case '.':
|
||||
if (!isdigitW( s[1] ))
|
||||
{
|
||||
*token = TK_DOT;
|
||||
return 1;
|
||||
}
|
||||
/* fall through */
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
*token = TK_INTEGER;
|
||||
for (i = 1; isdigitW( s[i] ); i++) {}
|
||||
return i;
|
||||
default:
|
||||
if (!id_char[*s]) break;
|
||||
|
||||
for (i = 1; id_char[s[i]]; i++) {}
|
||||
*token = keyword_type( s, i );
|
||||
return i;
|
||||
}
|
||||
*token = TK_ILLEGAL;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int wql_lex( void *p, struct parser *parser )
|
||||
{
|
||||
struct string *str = p;
|
||||
int token = -1;
|
||||
do
|
||||
{
|
||||
parser->idx += parser->len;
|
||||
if (!parser->cmd[parser->idx]) return 0;
|
||||
parser->len = get_token( &parser->cmd[parser->idx], &token );
|
||||
if (!parser->len) break;
|
||||
|
||||
str->data = &parser->cmd[parser->idx];
|
||||
str->len = parser->len;
|
||||
} while (token == TK_SPACE);
|
||||
return token;
|
||||
}
|
||||
|
||||
static int wql_error( struct parser *parser, const char *str )
|
||||
{
|
||||
ERR("%s\n", str);
|
||||
return 0;
|
||||
}
|
12
reactos/dll/win32/wmi/CMakeLists.txt
Normal file
12
reactos/dll/win32/wmi/CMakeLists.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
|
||||
spec2def(wmi.dll wmi.spec)
|
||||
|
||||
list(APPEND SOURCE
|
||||
wmi.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/wmi.def)
|
||||
|
||||
add_library(wmi SHARED ${SOURCE})
|
||||
set_module_type(wmi win32dll ENTRYPOINT 0 )
|
||||
add_importlibs(wmi advapi32)
|
||||
add_dependencies(wmi psdk)
|
||||
add_cd_file(TARGET wmi DESTINATION reactos/system32 FOR all)
|
5
reactos/dll/win32/wmi/wmi.rc
Normal file
5
reactos/dll/win32/wmi/wmi.rc
Normal file
|
@ -0,0 +1,5 @@
|
|||
#define REACTOS_VERSION_DLL
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "WMI DC and DP functionality"
|
||||
#define REACTOS_STR_INTERNAL_NAME "wmi"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "wmi.dll"
|
||||
#include <reactos/version.rc>
|
45
reactos/dll/win32/wmi/wmi.spec
Normal file
45
reactos/dll/win32/wmi/wmi.spec
Normal file
|
@ -0,0 +1,45 @@
|
|||
@ stdcall CloseTrace(int64) advapi32.CloseTrace
|
||||
@ stdcall ControlTraceA(int64 str ptr long) advapi32.ControlTraceA
|
||||
@ stdcall ControlTraceW(int64 wstr ptr long) advapi32.ControlTraceW
|
||||
@ stdcall CreateTraceInstanceId(long ptr) advapi32.CreateTraceInstanceId
|
||||
@ stdcall EnableTrace(long long long ptr int64) advapi32.EnableTrace
|
||||
@ stdcall GetTraceEnableFlags(int64) advapi32.GetTraceEnableFlags
|
||||
@ stdcall GetTraceEnableLevel(int64) advapi32.GetTraceEnableLevel
|
||||
@ stdcall -ret64 GetTraceLoggerHandle(ptr) advapi32.GetTraceLoggerHandle
|
||||
@ stdcall -ret64 OpenTraceA(ptr) advapi32.OpenTraceA
|
||||
@ stdcall -ret64 OpenTraceW(ptr) advapi32.OpenTraceW
|
||||
@ stdcall ProcessTrace(ptr long ptr ptr) advapi32.ProcessTrace
|
||||
@ stdcall QueryAllTracesA(ptr long ptr) advapi32.QueryAllTracesA
|
||||
@ stdcall QueryAllTracesW(ptr long ptr) advapi32.QueryAllTracesW
|
||||
@ stdcall RegisterTraceGuidsA(ptr ptr ptr long ptr str str ptr) advapi32.RegisterTraceGuidsA
|
||||
@ stdcall RegisterTraceGuidsW(ptr ptr ptr long ptr wstr wstr ptr) advapi32.RegisterTraceGuidsW
|
||||
@ stdcall RemoveTraceCallback(ptr) advapi32.RemoveTraceCallback
|
||||
@ stdcall SetTraceCallback(ptr ptr) advapi32.SetTraceCallback
|
||||
@ stdcall StartTraceA(ptr str ptr) advapi32.StartTraceA
|
||||
@ stdcall StartTraceW(ptr wstr ptr) advapi32.StartTraceW
|
||||
@ stdcall TraceEvent(int64 ptr) advapi32.TraceEvent
|
||||
@ stdcall TraceEventInstance(int64 ptr ptr ptr) advapi32.TraceEventInstance
|
||||
@ stdcall UnregisterTraceGuids(int64) advapi32.UnregisterTraceGuids
|
||||
@ stdcall WmiCloseBlock() advapi32.WmiCloseBlock
|
||||
@ stdcall WmiDevInstToInstanceNameA() advapi32.WmiDevInstToInstanceNameA
|
||||
@ stdcall WmiDevInstToInstanceNameW() advapi32.WmiDevInstToInstanceNameW
|
||||
@ stdcall WmiEnumerateGuids() advapi32.WmiEnumerateGuids
|
||||
@ stdcall WmiExecuteMethodA() advapi32.WmiExecuteMethodA
|
||||
@ stdcall WmiExecuteMethodW() advapi32.WmiExecuteMethodW
|
||||
@ stdcall WmiFileHandleToInstanceNameA() advapi32.WmiFileHandleToInstanceNameA
|
||||
@ stdcall WmiFileHandleToInstanceNameW() advapi32.WmiFileHandleToInstanceNameW
|
||||
@ stdcall WmiFreeBuffer() advapi32.WmiFreeBuffer
|
||||
@ stdcall WmiMofEnumerateResourcesA() advapi32.WmiMofEnumerateResourcesA
|
||||
@ stdcall WmiMofEnumerateResourcesW() advapi32.WmiMofEnumerateResourcesW
|
||||
@ stdcall WmiNotificationRegistrationA() advapi32.WmiNotificationRegistrationA
|
||||
@ stdcall WmiNotificationRegistrationW() advapi32.WmiNotificationRegistrationW
|
||||
@ stdcall WmiOpenBlock() advapi32.WmiOpenBlock
|
||||
@ stdcall WmiQueryAllDataA() advapi32.WmiQueryAllDataA
|
||||
@ stdcall WmiQueryAllDataW() advapi32.WmiQueryAllDataW
|
||||
@ stdcall WmiQueryGuidInformation() advapi32.WmiQueryGuidInformation
|
||||
@ stdcall WmiQuerySingleInstanceA() advapi32.WmiQuerySingleInstanceA
|
||||
@ stdcall WmiQuerySingleInstanceW() advapi32.WmiQuerySingleInstanceW
|
||||
@ stdcall WmiSetSingleInstanceA() advapi32.WmiSetSingleInstanceA
|
||||
@ stdcall WmiSetSingleInstanceW() advapi32.WmiSetSingleInstanceW
|
||||
@ stdcall WmiSetSingleItemA() advapi32.WmiSetSingleItemA
|
||||
@ stdcall WmiSetSingleItemW() advapi32.WmiSetSingleItemW
|
17
reactos/dll/win32/wmiutils/CMakeLists.txt
Normal file
17
reactos/dll/win32/wmiutils/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
add_definitions(-D__WINESRC__)
|
||||
|
||||
include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine)
|
||||
spec2def(wmiutils.dll wmiutils.spec)
|
||||
|
||||
list(APPEND SOURCE
|
||||
main.c
|
||||
path.c
|
||||
statuscode.c
|
||||
${CMAKE_CURRENT_BINARY_DIR}/wmiutils.def)
|
||||
|
||||
add_library(wmiutils SHARED ${SOURCE} wmiutils.rc)
|
||||
set_module_type(wmiutils win32dll)
|
||||
target_link_libraries(wmiutils wine)
|
||||
add_importlibs(wmiutils oleaut32 msvcrt kernel32 ntdll)
|
||||
add_cd_file(TARGET wmiutils DESTINATION reactos/system32/wbem FOR all)
|
171
reactos/dll/win32/wmiutils/main.c
Normal file
171
reactos/dll/win32/wmiutils/main.c
Normal file
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
* Copyright 2009 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
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "initguid.h"
|
||||
#include "objbase.h"
|
||||
#include "wbemcli.h"
|
||||
#include "wmiutils.h"
|
||||
#include "rpcproxy.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
#include "wmiutils_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wmiutils);
|
||||
|
||||
static HINSTANCE instance;
|
||||
|
||||
typedef HRESULT (*fnCreateInstance)( LPVOID *ppObj );
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IClassFactory IClassFactory_iface;
|
||||
fnCreateInstance pfnCreateInstance;
|
||||
} wmiutils_cf;
|
||||
|
||||
static inline wmiutils_cf *impl_from_IClassFactory( IClassFactory *iface )
|
||||
{
|
||||
return CONTAINING_RECORD(iface, wmiutils_cf, IClassFactory_iface);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wmiutils_cf_QueryInterface( IClassFactory *iface, REFIID riid, LPVOID *ppobj )
|
||||
{
|
||||
if (IsEqualGUID(riid, &IID_IUnknown) ||
|
||||
IsEqualGUID(riid, &IID_IClassFactory))
|
||||
{
|
||||
IClassFactory_AddRef( iface );
|
||||
*ppobj = iface;
|
||||
return S_OK;
|
||||
}
|
||||
FIXME("interface %s not implemented\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI wmiutils_cf_AddRef( IClassFactory *iface )
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
static ULONG WINAPI wmiutils_cf_Release( IClassFactory *iface )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wmiutils_cf_CreateInstance( IClassFactory *iface, LPUNKNOWN pOuter,
|
||||
REFIID riid, LPVOID *ppobj )
|
||||
{
|
||||
wmiutils_cf *This = impl_from_IClassFactory( iface );
|
||||
HRESULT r;
|
||||
IUnknown *punk;
|
||||
|
||||
TRACE("%p %s %p\n", pOuter, debugstr_guid(riid), ppobj);
|
||||
|
||||
*ppobj = NULL;
|
||||
|
||||
if (pOuter)
|
||||
return CLASS_E_NOAGGREGATION;
|
||||
|
||||
r = This->pfnCreateInstance( (LPVOID *)&punk );
|
||||
if (FAILED(r))
|
||||
return r;
|
||||
|
||||
r = IUnknown_QueryInterface( punk, riid, ppobj );
|
||||
IUnknown_Release( punk );
|
||||
return r;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI wmiutils_cf_LockServer( IClassFactory *iface, BOOL dolock )
|
||||
{
|
||||
FIXME("(%p)->(%d)\n", iface, dolock);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static const struct IClassFactoryVtbl wmiutils_cf_vtbl =
|
||||
{
|
||||
wmiutils_cf_QueryInterface,
|
||||
wmiutils_cf_AddRef,
|
||||
wmiutils_cf_Release,
|
||||
wmiutils_cf_CreateInstance,
|
||||
wmiutils_cf_LockServer
|
||||
};
|
||||
|
||||
static wmiutils_cf status_code_cf = { { &wmiutils_cf_vtbl }, WbemStatusCodeText_create };
|
||||
static wmiutils_cf path_cf = { { &wmiutils_cf_vtbl }, WbemPath_create };
|
||||
|
||||
BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID lpv )
|
||||
{
|
||||
switch(reason)
|
||||
{
|
||||
case DLL_WINE_PREATTACH:
|
||||
return FALSE; /* prefer native version */
|
||||
case DLL_PROCESS_ATTACH:
|
||||
instance = hinst;
|
||||
DisableThreadLibraryCalls( hinst );
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID iid, LPVOID *ppv )
|
||||
{
|
||||
IClassFactory *cf = NULL;
|
||||
|
||||
TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
|
||||
|
||||
if (IsEqualGUID( rclsid, &CLSID_WbemStatusCode ))
|
||||
{
|
||||
cf = &status_code_cf.IClassFactory_iface;
|
||||
}
|
||||
else if (IsEqualGUID( rclsid, &CLSID_WbemDefPath ))
|
||||
{
|
||||
cf = &path_cf.IClassFactory_iface;
|
||||
}
|
||||
if (!cf) return CLASS_E_CLASSNOTAVAILABLE;
|
||||
return IClassFactory_QueryInterface( cf, iid, ppv );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllCanUnloadNow (WMIUTILS.@)
|
||||
*/
|
||||
HRESULT WINAPI DllCanUnloadNow( void )
|
||||
{
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllRegisterServer (WMIUTILS.@)
|
||||
*/
|
||||
HRESULT WINAPI DllRegisterServer(void)
|
||||
{
|
||||
return __wine_register_resources( instance );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* DllUnregisterServer (WMIUTILS.@)
|
||||
*/
|
||||
HRESULT WINAPI DllUnregisterServer(void)
|
||||
{
|
||||
return __wine_unregister_resources( instance );
|
||||
}
|
1294
reactos/dll/win32/wmiutils/path.c
Normal file
1294
reactos/dll/win32/wmiutils/path.c
Normal file
File diff suppressed because it is too large
Load diff
150
reactos/dll/win32/wmiutils/statuscode.c
Normal file
150
reactos/dll/win32/wmiutils/statuscode.c
Normal file
|
@ -0,0 +1,150 @@
|
|||
/*
|
||||
* Copyright 2009 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 <stdio.h>
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "ole2.h"
|
||||
#include "wbemcli.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
#include "wine/unicode.h"
|
||||
#include "wmiutils_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wmiutils);
|
||||
|
||||
typedef struct status_code
|
||||
{
|
||||
IWbemStatusCodeText IWbemStatusCodeText_iface;
|
||||
LONG refs;
|
||||
} status_code;
|
||||
|
||||
static inline status_code *impl_from_IWbemStatusCodeText( IWbemStatusCodeText *iface )
|
||||
{
|
||||
return CONTAINING_RECORD(iface, status_code, IWbemStatusCodeText_iface);
|
||||
}
|
||||
|
||||
static ULONG WINAPI status_code_AddRef(
|
||||
IWbemStatusCodeText *iface )
|
||||
{
|
||||
status_code *status_code = impl_from_IWbemStatusCodeText( iface );
|
||||
return InterlockedIncrement( &status_code->refs );
|
||||
}
|
||||
|
||||
static ULONG WINAPI status_code_Release(
|
||||
IWbemStatusCodeText *iface )
|
||||
{
|
||||
status_code *status_code = impl_from_IWbemStatusCodeText( iface );
|
||||
LONG refs = InterlockedDecrement( &status_code->refs );
|
||||
if (!refs)
|
||||
{
|
||||
TRACE("destroying %p\n", status_code);
|
||||
heap_free( status_code );
|
||||
}
|
||||
return refs;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI status_code_QueryInterface(
|
||||
IWbemStatusCodeText *iface,
|
||||
REFIID riid,
|
||||
void **ppvObject )
|
||||
{
|
||||
status_code *This = impl_from_IWbemStatusCodeText( iface );
|
||||
|
||||
TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject );
|
||||
|
||||
if ( IsEqualGUID( riid, &IID_IWbemStatusCodeText ) ||
|
||||
IsEqualGUID( riid, &IID_IUnknown ) )
|
||||
{
|
||||
*ppvObject = iface;
|
||||
}
|
||||
else
|
||||
{
|
||||
FIXME("interface %s not implemented\n", debugstr_guid(riid));
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
IWbemStatusCodeText_AddRef( iface );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI status_code_GetErrorCodeText(
|
||||
IWbemStatusCodeText *iface,
|
||||
HRESULT res,
|
||||
LCID lcid,
|
||||
LONG flags,
|
||||
BSTR *text )
|
||||
{
|
||||
static const WCHAR fmt[] =
|
||||
{'E','r','r','o','r',' ','c','o','d','e',':',' ','0','x','%','0','8','x',0};
|
||||
WCHAR msg[32];
|
||||
|
||||
FIXME("%p, 0x%08x, 0x%04x, 0x%08x, %p\n", iface, res, lcid, flags, text);
|
||||
|
||||
sprintfW(msg, fmt, res);
|
||||
*text = SysAllocString(msg);
|
||||
return WBEM_S_NO_ERROR;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI status_code_GetFacilityCodeText(
|
||||
IWbemStatusCodeText *iface,
|
||||
HRESULT res,
|
||||
LCID lcid,
|
||||
LONG flags,
|
||||
BSTR *text )
|
||||
{
|
||||
static const WCHAR fmt[] =
|
||||
{'F','a','c','i','l','i','t','y',' ','c','o','d','e',':',' ','0','x','%','0','8','x',0};
|
||||
WCHAR msg[32];
|
||||
|
||||
FIXME("%p, 0x%08x, 0x%04x, 0x%08x, %p\n", iface, res, lcid, flags, text);
|
||||
|
||||
sprintfW(msg, fmt, res);
|
||||
*text = SysAllocString(msg);
|
||||
return WBEM_S_NO_ERROR;
|
||||
}
|
||||
|
||||
static const struct IWbemStatusCodeTextVtbl status_code_vtbl =
|
||||
{
|
||||
status_code_QueryInterface,
|
||||
status_code_AddRef,
|
||||
status_code_Release,
|
||||
status_code_GetErrorCodeText,
|
||||
status_code_GetFacilityCodeText
|
||||
};
|
||||
|
||||
HRESULT WbemStatusCodeText_create( LPVOID *ppObj )
|
||||
{
|
||||
status_code *sc;
|
||||
|
||||
TRACE("(%p)\n", ppObj);
|
||||
|
||||
if (!(sc = heap_alloc( sizeof(*sc) ))) return E_OUTOFMEMORY;
|
||||
|
||||
sc->IWbemStatusCodeText_iface.lpVtbl = &status_code_vtbl;
|
||||
sc->refs = 1;
|
||||
|
||||
*ppObj = &sc->IWbemStatusCodeText_iface;
|
||||
|
||||
TRACE("returning iface %p\n", *ppObj);
|
||||
return S_OK;
|
||||
}
|
2
reactos/dll/win32/wmiutils/wmiutils.rc
Normal file
2
reactos/dll/win32/wmiutils/wmiutils.rc
Normal file
|
@ -0,0 +1,2 @@
|
|||
/* @makedep: wmiutils_classes.rgs */
|
||||
1 WINE_REGISTRY wmiutils_classes.rgs
|
4
reactos/dll/win32/wmiutils/wmiutils.spec
Normal file
4
reactos/dll/win32/wmiutils/wmiutils.spec
Normal file
|
@ -0,0 +1,4 @@
|
|||
@ stdcall -private DllCanUnloadNow()
|
||||
@ stdcall -private DllGetClassObject(ptr ptr ptr)
|
||||
@ stdcall -private DllRegisterServer()
|
||||
@ stdcall -private DllUnregisterServer()
|
33
reactos/dll/win32/wmiutils/wmiutils_classes.idl
Normal file
33
reactos/dll/win32/wmiutils/wmiutils_classes.idl
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* COM Classes for wmiutils
|
||||
*
|
||||
* Copyright 2010 Alexandre Julliard
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#pragma makedep register
|
||||
|
||||
[
|
||||
threading(both),
|
||||
uuid(cf4cc405-e2c5-4ddd-b3ce-5e7582d8c9fa)
|
||||
]
|
||||
coclass WbemDefPath { interface IWbemPath; }
|
||||
|
||||
[
|
||||
threading(both),
|
||||
uuid(eb87e1bd-3233-11d2-aec9-00c04fb68820)
|
||||
]
|
||||
coclass WbemStatusCode { interface IWbemStatusCodeText; }
|
17
reactos/dll/win32/wmiutils/wmiutils_classes.rgs
Normal file
17
reactos/dll/win32/wmiutils/wmiutils_classes.rgs
Normal file
|
@ -0,0 +1,17 @@
|
|||
HKCR
|
||||
{
|
||||
NoRemove Interface
|
||||
{
|
||||
}
|
||||
NoRemove CLSID
|
||||
{
|
||||
'{CF4CC405-E2C5-4DDD-B3CE-5E7582D8C9FA}' = s 'WbemDefPath'
|
||||
{
|
||||
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
|
||||
}
|
||||
'{EB87E1BD-3233-11D2-AEC9-00C04FB68820}' = s 'WbemStatusCode'
|
||||
{
|
||||
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
|
||||
}
|
||||
}
|
||||
}
|
53
reactos/dll/win32/wmiutils/wmiutils_private.h
Normal file
53
reactos/dll/win32/wmiutils/wmiutils_private.h
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright 2009 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
|
||||
*/
|
||||
|
||||
#include "wine/unicode.h"
|
||||
|
||||
HRESULT WbemPath_create(LPVOID *) DECLSPEC_HIDDEN;
|
||||
HRESULT WbemStatusCodeText_create(LPVOID *) DECLSPEC_HIDDEN;
|
||||
|
||||
static void *heap_alloc( size_t len ) __WINE_ALLOC_SIZE(1);
|
||||
static inline void *heap_alloc( size_t len )
|
||||
{
|
||||
return HeapAlloc( GetProcessHeap(), 0, len );
|
||||
}
|
||||
|
||||
static void *heap_alloc_zero( size_t len ) __WINE_ALLOC_SIZE(1);
|
||||
static inline void *heap_alloc_zero( size_t len )
|
||||
{
|
||||
return HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len );
|
||||
}
|
||||
|
||||
static void *heap_realloc( void *mem, size_t len ) __WINE_ALLOC_SIZE(2);
|
||||
static inline void *heap_realloc( void *mem, size_t len )
|
||||
{
|
||||
return HeapReAlloc( GetProcessHeap(), 0, mem, len );
|
||||
}
|
||||
|
||||
static inline BOOL heap_free( void *mem )
|
||||
{
|
||||
return HeapFree( GetProcessHeap(), 0, mem );
|
||||
}
|
||||
|
||||
static inline WCHAR *strdupW( const WCHAR *src )
|
||||
{
|
||||
WCHAR *dst;
|
||||
if (!src) return NULL;
|
||||
if ((dst = heap_alloc( (strlenW( src ) + 1) * sizeof(WCHAR) ))) strcpyW( dst, src );
|
||||
return dst;
|
||||
}
|
|
@ -21,11 +21,6 @@ reactos/sdk/tools/wpp # Synced to WineStaging-1.9.11
|
|||
|
||||
The following libraries are shared with Wine.
|
||||
|
||||
reactos/base/wmi/wbemdisp # Synced to WineStaging-1.9.16
|
||||
reactos/base/wmi/wbemprox # Synced to WineStaging-1.9.23
|
||||
reactos/base/wmi/wmi # Synced to WineStaging-1.9.11
|
||||
reactos/base/wmi/wmiutils # Synced to WineStaging-1.9.11
|
||||
|
||||
reactos/dll/directx/wine/amstream # Synced to WineStaging-1.9.23
|
||||
reactos/dll/directx/wine/d3d8 # Synced to WineStaging-1.9.4
|
||||
reactos/dll/directx/wine/d3d9 # Synced to WineStaging-1.9.4
|
||||
|
@ -199,6 +194,8 @@ reactos/dll/win32/uxtheme # Forked
|
|||
reactos/dll/win32/vbscript # Synced to WineStaging-1.9.23
|
||||
reactos/dll/win32/version # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/vssapi # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/wbemdisp # Synced to WineStaging-1.9.16
|
||||
reactos/dll/win32/wbemprox # Synced to WineStaging-1.9.23
|
||||
reactos/dll/win32/windowscodecs # Synced to WineStaging-1.9.23
|
||||
reactos/dll/win32/windowscodecsext # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/winemp3.acm # Synced to WineStaging-1.9.23
|
||||
|
@ -211,6 +208,8 @@ reactos/dll/win32/winmm/wavemap # Forked at Wine-20050628
|
|||
reactos/dll/win32/winscard # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/wintrust # Synced to WineStaging-1.9.23
|
||||
reactos/dll/win32/wldap32 # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/wmi # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/wmiutils # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/wmvcore # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/wshom.ocx # Synced to WineStaging-1.9.11
|
||||
reactos/dll/win32/wtsapi32 # Synced to WineStaging-1.9.11
|
||||
|
@ -231,6 +230,7 @@ reactos/base/applications/cmdutils/cscript # Synced to WineStaging-1.9.11
|
|||
reactos/base/applications/cmdutils/reg # Synced to WineStaging-1.9.16
|
||||
reactos/base/applications/cmdutils/schtasks # Synced to WineStaging-1.9.14
|
||||
reactos/base/applications/cmdutils/taskkill # Synced to WineStaging-1.9.11
|
||||
reactos/base/applications/cmdutils/wmic # Synced to WineStaging-1.9.11
|
||||
reactos/base/applications/cmdutils/wscript # Synced to WineStaging-1.9.16
|
||||
reactos/base/applications/cmdutils/xcopy # Synced to WineStaging-1.9.11
|
||||
reactos/base/applications/games/winmine # Synced to WineStaging-1.9.16 with our own resources.
|
||||
|
@ -244,10 +244,6 @@ reactos/base/applications/write # Synced to WineStaging-1.9.16
|
|||
reactos/base/services/rpcss # Synced to WineStaging-1.9.16
|
||||
reactos/base/system/expand # Synced to WineStaging-1.9.11
|
||||
reactos/base/system/msiexec # Synced to WineStaging-1.9.11
|
||||
|
||||
reactos/base/wmi/mofcomp # Synced to Wine-2.2
|
||||
reactos/base/wmi/wmic # Synced to WineStaging-1.9.11
|
||||
|
||||
reactos/modules/rosapps/winfile # Autosync
|
||||
|
||||
In addition the following libs, dlls and source files are mostly based on code ported
|
||||
|
|
Loading…
Reference in a new issue