* Addendum to r73870.

svn path=/trunk/; revision=73893
This commit is contained in:
Amine Khaldi 2017-02-23 19:09:35 +00:00
parent 7148ac52fc
commit f981e06368
71 changed files with 0 additions and 18997 deletions

View file

@ -1,11 +0,0 @@
add_subdirectory(framedyn)
add_subdirectory(mofcomp)
add_subdirectory(wbemdisp)
add_subdirectory(wbemprox)
add_subdirectory(wmi)
add_subdirectory(wmic)
add_subdirectory(wmisvc)
add_subdirectory(wmiutils)
add_registry_inf(wbem_reg.inf)

View file

@ -1,24 +0,0 @@
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()

View file

@ -1,98 +0,0 @@
#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

File diff suppressed because it is too large Load diff

View file

@ -1,778 +0,0 @@
# **************** 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()

View file

@ -1,29 +0,0 @@
/*
* 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;
}

View file

@ -1,57 +0,0 @@
/*
* 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;
}

View file

@ -1,6 +0,0 @@
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)

View file

@ -1,29 +0,0 @@
/*
* 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;
}

View file

@ -1,7 +0,0 @@
; WBem
[AddReg]
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"

View file

@ -1,32 +0,0 @@
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)

View file

@ -1,18 +0,0 @@
/* 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 */

File diff suppressed because it is too large Load diff

View file

@ -1,551 +0,0 @@
/*
* 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 );
}

View file

@ -1,3 +0,0 @@
1 WINE_REGISTRY "wbemdisp_classes.rgs"
2 WINE_REGISTRY "wbemdisp_tlb.rgs"
1 TYPELIB "wbemdisp_tlb.tlb"

View file

@ -1,4 +0,0 @@
@ stdcall -private DllCanUnloadNow()
@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()

View file

@ -1,29 +0,0 @@
/*
* 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; }

View file

@ -1,24 +0,0 @@
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'
}
}

View file

@ -1,56 +0,0 @@
/*
* 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_ */

View file

@ -1,23 +0,0 @@
/*
* 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"

View file

@ -1,139 +0,0 @@
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'
}
}

View file

@ -1,37 +0,0 @@
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)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,16 +0,0 @@
/* 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 */

View file

@ -1,155 +0,0 @@
/*
*
* 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 );
}

View file

@ -1,101 +0,0 @@
/*
* 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;
}

View file

@ -1,264 +0,0 @@
/*
* 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;
}

File diff suppressed because it is too large Load diff

View file

@ -1,374 +0,0 @@
/*
* 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;
}

View file

@ -1,209 +0,0 @@
/*
* __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;
}

View file

@ -1,269 +0,0 @@
/*
* 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;
}

View file

@ -1,888 +0,0 @@
/*
* 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;
}

View file

@ -1,418 +0,0 @@
/*
* 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;
}

View file

@ -1,217 +0,0 @@
/*
* 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;
}

View file

@ -1,35 +0,0 @@
/*
* 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; }

View file

@ -1 +0,0 @@
1 WINE_REGISTRY "wbemprox.rgs"

View file

@ -1,17 +0,0 @@
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' }
}
}
}

View file

@ -1,4 +0,0 @@
@ stdcall -private DllCanUnloadNow()
@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()

View file

@ -1,315 +0,0 @@
/*
* 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_ */

File diff suppressed because it is too large Load diff

View file

@ -1,701 +0,0 @@
%{
/*
* 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;
}

View file

@ -1,12 +0,0 @@
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)

View file

@ -1,5 +0,0 @@
#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>

View file

@ -1,45 +0,0 @@
@ 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

View file

@ -1,6 +0,0 @@
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)

View file

@ -1,9 +0,0 @@
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"
}

View file

@ -1,9 +0,0 @@
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"
}

View file

@ -1,11 +0,0 @@
/* 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"
}

View file

@ -1,9 +0,0 @@
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"
}

View file

@ -1,13 +0,0 @@
/* 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"
}

View file

@ -1,11 +0,0 @@
/* 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"
}

View file

@ -1,11 +0,0 @@
/* 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"
}

View file

@ -1,11 +0,0 @@
/* 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"
}

View file

@ -1,313 +0,0 @@
/*
* 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;
}

View file

@ -1,24 +0,0 @@
/*
* 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

View file

@ -1,54 +0,0 @@
/*
* 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

View file

@ -1,11 +0,0 @@
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)
add_registry_inf(wmisvc_reg.inf)

View file

@ -1,157 +0,0 @@
/*
* 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;
}

View file

@ -1,5 +0,0 @@
#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>

View file

@ -1 +0,0 @@
@ stdcall ServiceMain(long ptr)

View file

@ -1,12 +0,0 @@
; WMI Service
[AddReg]
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"

View file

@ -1,17 +0,0 @@
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)

View file

@ -1,171 +0,0 @@
/*
* 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 );
}

File diff suppressed because it is too large Load diff

View file

@ -1,150 +0,0 @@
/*
* 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;
}

View file

@ -1,2 +0,0 @@
/* @makedep: wmiutils_classes.rgs */
1 WINE_REGISTRY wmiutils_classes.rgs

View file

@ -1,4 +0,0 @@
@ stdcall -private DllCanUnloadNow()
@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()

View file

@ -1,33 +0,0 @@
/*
* 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; }

View file

@ -1,17 +0,0 @@
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' }
}
}
}

View file

@ -1,53 +0,0 @@
/*
* 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;
}