Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/devenum/Makefile.in | 1 - dlls/devenum/devenum_main.c | 74 ++++++++++++++++++++++- dlls/devenum/devenum_private.h | 10 --- dlls/devenum/factory.c | 134 ----------------------------------------- 4 files changed, 72 insertions(+), 147 deletions(-) delete mode 100644 dlls/devenum/factory.c
diff --git a/dlls/devenum/Makefile.in b/dlls/devenum/Makefile.in index ae138b6..d1407a9 100644 --- a/dlls/devenum/Makefile.in +++ b/dlls/devenum/Makefile.in @@ -5,7 +5,6 @@ DELAYIMPORTS = msvfw32 C_SRCS = \ createdevenum.c \ devenum_main.c \ - factory.c \ mediacatenum.c \ parsedisplayname.c
diff --git a/dlls/devenum/devenum_main.c b/dlls/devenum/devenum_main.c index cb4b454..7bfc593 100644 --- a/dlls/devenum/devenum_main.c +++ b/dlls/devenum/devenum_main.c @@ -1,5 +1,5 @@ /* - * exported dll functions for devenum.dll + * Device Enumeration * * Copyright (C) 2002 John K. Hohm * Copyright (C) 2002 Robert Shearman @@ -56,6 +56,76 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) return TRUE; }
+static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID iid, void **obj) +{ + TRACE("(%p, %s, %p)\n", iface, debugstr_guid(iid), obj); + + if (IsEqualGUID(iid, &IID_IUnknown) || IsEqualGUID(iid, &IID_IClassFactory)) + { + IClassFactory_AddRef(iface); + *obj = iface; + return S_OK; + } + + *obj = NULL; + WARN("no interface for %s\n", debugstr_guid(iid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface) +{ + DEVENUM_LockModule(); + return 2; +} + +static ULONG WINAPI ClassFactory_Release(IClassFactory *iface) +{ + DEVENUM_UnlockModule(); + return 1; +} + +static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, + IUnknown *outer, REFIID iid, void **obj) +{ + TRACE("(%p, %s, %p)\n", outer, debugstr_guid(iid), obj); + + if (!obj) return E_POINTER; + + if (outer) return CLASS_E_NOAGGREGATION; + + if (IsEqualGUID(&IID_ICreateDevEnum, iid)) + { + *obj = &DEVENUM_CreateDevEnum; + return S_OK; + } + if (IsEqualGUID(&IID_IParseDisplayName, iid)) + { + *obj = &DEVENUM_ParseDisplayName; + return S_OK; + } + + return CLASS_E_CLASSNOTAVAILABLE; +} + +static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL lock) +{ + if (lock) + DEVENUM_LockModule(); + else + DEVENUM_UnlockModule(); + return S_OK; +} + +static const IClassFactoryVtbl ClassFactory_vtbl = { + ClassFactory_QueryInterface, + ClassFactory_AddRef, + ClassFactory_Release, + ClassFactory_CreateInstance, + ClassFactory_LockServer +}; + +static IClassFactory devenum_cf = { &ClassFactory_vtbl }; + /*********************************************************************** * DllGetClassObject (DEVENUM.@) */ @@ -69,7 +139,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv) * Oh well - works just fine as it is */ if (IsEqualGUID(rclsid, &CLSID_SystemDeviceEnum) || IsEqualGUID(rclsid, &CLSID_CDeviceMoniker)) - return IClassFactory_QueryInterface(&DEVENUM_ClassFactory.IClassFactory_iface, iid, ppv); + return IClassFactory_QueryInterface(&devenum_cf, iid, ppv);
FIXME("CLSID: %s, IID: %s\n", debugstr_guid(rclsid), debugstr_guid(iid)); return CLASS_E_CLASSNOTAVAILABLE; diff --git a/dlls/devenum/devenum_private.h b/dlls/devenum/devenum_private.h index df0080d..ea4e017 100644 --- a/dlls/devenum/devenum_private.h +++ b/dlls/devenum/devenum_private.h @@ -51,15 +51,6 @@ extern LONG dll_refs DECLSPEC_HIDDEN; static inline void DEVENUM_LockModule(void) { InterlockedIncrement(&dll_refs); } static inline void DEVENUM_UnlockModule(void) { InterlockedDecrement(&dll_refs); }
- -/********************************************************************** - * ClassFactory declaration for devenum.dll - */ -typedef struct -{ - IClassFactory IClassFactory_iface; -} ClassFactoryImpl; - enum device_type { DEVICE_FILTER, @@ -84,7 +75,6 @@ typedef struct MediaCatMoniker * DEVENUM_IMediaCatMoniker_Construct(void) DECLSPEC_HIDDEN; HRESULT create_EnumMoniker(REFCLSID class, IEnumMoniker **enum_mon) DECLSPEC_HIDDEN;
-extern ClassFactoryImpl DEVENUM_ClassFactory DECLSPEC_HIDDEN; extern ICreateDevEnum DEVENUM_CreateDevEnum DECLSPEC_HIDDEN; extern IParseDisplayName DEVENUM_ParseDisplayName DECLSPEC_HIDDEN;
diff --git a/dlls/devenum/factory.c b/dlls/devenum/factory.c deleted file mode 100644 index c808fa5..0000000 --- a/dlls/devenum/factory.c +++ /dev/null @@ -1,134 +0,0 @@ -/* - * ClassFactory implementation for DEVENUM.dll - * - * Copyright (C) 2002 John K. Hohm - * Copyright (C) 2002 Robert Shearman - * - * 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 "devenum_private.h" - -#include "wine/debug.h" - -WINE_DEFAULT_DEBUG_CHANNEL(devenum); - -/********************************************************************** - * DEVENUM_IClassFactory_QueryInterface (also IUnknown) - */ -static HRESULT WINAPI DEVENUM_IClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, - void **ppvObj) -{ - TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppvObj); - - if (ppvObj == NULL) return E_POINTER; - - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IClassFactory)) - { - *ppvObj = iface; - IClassFactory_AddRef(iface); - return S_OK; - } - else if (IsEqualGUID(riid, &IID_IParseDisplayName)) - { - return IClassFactory_CreateInstance(iface, NULL, riid, ppvObj); - } - - FIXME("- no interface IID: %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -/********************************************************************** - * DEVENUM_IClassFactory_AddRef (also IUnknown) - */ -static ULONG WINAPI DEVENUM_IClassFactory_AddRef(IClassFactory *iface) -{ - TRACE("\n"); - - DEVENUM_LockModule(); - - return 2; /* non-heap based object */ -} - -/********************************************************************** - * DEVENUM_IClassFactory_Release (also IUnknown) - */ -static ULONG WINAPI DEVENUM_IClassFactory_Release(IClassFactory *iface) -{ - TRACE("\n"); - - DEVENUM_UnlockModule(); - - return 1; /* non-heap based object */ -} - -/********************************************************************** - * DEVENUM_IClassFactory_CreateInstance - */ -static HRESULT WINAPI DEVENUM_IClassFactory_CreateInstance(IClassFactory *iface, - IUnknown *pUnkOuter, REFIID riid, void **ppvObj) -{ - TRACE("(%p)->(%p, %s, %p)\n", iface, pUnkOuter, debugstr_guid(riid), ppvObj); - - if (ppvObj == NULL) return E_POINTER; - - /* Don't support aggregation (Windows doesn't) */ - if (pUnkOuter != NULL) return CLASS_E_NOAGGREGATION; - - if (IsEqualGUID(&IID_ICreateDevEnum, riid)) - { - *ppvObj = &DEVENUM_CreateDevEnum; - return S_OK; - } - if (IsEqualGUID(&IID_IParseDisplayName, riid)) - { - *ppvObj = &DEVENUM_ParseDisplayName; - return S_OK; - } - - return CLASS_E_CLASSNOTAVAILABLE; -} - -/********************************************************************** - * DEVENUM_IClassFactory_LockServer - */ -static HRESULT WINAPI DEVENUM_IClassFactory_LockServer(IClassFactory *iface, BOOL fLock) -{ - TRACE("\n"); - - if (fLock) - DEVENUM_LockModule(); - else - DEVENUM_UnlockModule(); - return S_OK; -} - -/********************************************************************** - * IClassFactory_Vtbl - */ -static const IClassFactoryVtbl IClassFactory_Vtbl = -{ - DEVENUM_IClassFactory_QueryInterface, - DEVENUM_IClassFactory_AddRef, - DEVENUM_IClassFactory_Release, - DEVENUM_IClassFactory_CreateInstance, - DEVENUM_IClassFactory_LockServer -}; - -/********************************************************************** - * static ClassFactory instance - */ -ClassFactoryImpl DEVENUM_ClassFactory = { { &IClassFactory_Vtbl } };