00001 #include "precomp.h"
00002
00003 #define NDEBUG
00004 #include <debug.h>
00005
00006 LONG dll_refs = 0;
00007
00008 static HRESULT STDMETHODCALLTYPE
00009 IDeskDisplayAdapter_IShellPropSheetExt_QueryInterface(IShellPropSheetExt *iface,
00010 REFIID iid,
00011 PVOID *pvObject)
00012 {
00013 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
00014 return IDeskDisplayAdapter_QueryInterface(This,
00015 iid,
00016 pvObject);
00017 }
00018
00019 static ULONG STDMETHODCALLTYPE
00020 IDeskDisplayAdapter_IShellPropSheetExt_AddRef(IShellPropSheetExt* iface)
00021 {
00022 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
00023 return IDeskDisplayAdapter_AddRef(This);
00024 }
00025
00026 static ULONG STDMETHODCALLTYPE
00027 IDeskDisplayAdapter_IShellPropSheetExt_Release(IShellPropSheetExt* iface)
00028 {
00029 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
00030 return IDeskDisplayAdapter_Release(This);
00031 }
00032
00033 static HRESULT STDMETHODCALLTYPE
00034 IDeskDisplayAdapter_IShellPropSheetExt_AddPages(IShellPropSheetExt* iface,
00035 LPFNADDPROPSHEETPAGE pfnAddPage,
00036 LPARAM lParam)
00037 {
00038 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
00039 return IDeskDisplayAdapter_AddPages(This,
00040 pfnAddPage,
00041 lParam);
00042 }
00043
00044 static HRESULT STDMETHODCALLTYPE
00045 IDeskDisplayAdapter_IShellPropSheetExt_ReplacePage(IShellPropSheetExt* iface,
00046 EXPPS uPageID,
00047 LPFNADDPROPSHEETPAGE pfnReplacePage,
00048 LPARAM lParam)
00049 {
00050 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
00051 return IDeskDisplayAdapter_ReplacePage(This,
00052 uPageID,
00053 pfnReplacePage,
00054 lParam);
00055 }
00056
00057 static IShellPropSheetExtVtbl efvtIShellPropSheetExt =
00058 {
00059 IDeskDisplayAdapter_IShellPropSheetExt_QueryInterface,
00060 IDeskDisplayAdapter_IShellPropSheetExt_AddRef,
00061 IDeskDisplayAdapter_IShellPropSheetExt_Release,
00062 IDeskDisplayAdapter_IShellPropSheetExt_AddPages,
00063 IDeskDisplayAdapter_IShellPropSheetExt_ReplacePage
00064 };
00065
00066 static HRESULT STDMETHODCALLTYPE
00067 IDeskDisplayAdapter_IShellExtInit_QueryInterface(IShellExtInit *iface,
00068 REFIID iid,
00069 PVOID *pvObject)
00070 {
00071 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellExtInit);
00072 return IDeskDisplayAdapter_QueryInterface(This,
00073 iid,
00074 pvObject);
00075 }
00076
00077 static ULONG STDMETHODCALLTYPE
00078 IDeskDisplayAdapter_IShellExtInit_AddRef(IShellExtInit* iface)
00079 {
00080 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellExtInit);
00081 return IDeskDisplayAdapter_AddRef(This);
00082 }
00083
00084 static ULONG STDMETHODCALLTYPE
00085 IDeskDisplayAdapter_IShellExtInit_Release(IShellExtInit* iface)
00086 {
00087 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellExtInit);
00088 return IDeskDisplayAdapter_Release(This);
00089 }
00090
00091 static HRESULT STDMETHODCALLTYPE
00092 IDeskDisplayAdapter_IShellExtInit_Initialize(IShellExtInit* iface,
00093 LPCITEMIDLIST pidlFolder,
00094 IDataObject *pdtobj,
00095 HKEY hkeyProgID)
00096 {
00097 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellExtInit);
00098 return IDeskDisplayAdapter_Initialize(This,
00099 pidlFolder,
00100 pdtobj,
00101 hkeyProgID);
00102 }
00103
00104 static IShellExtInitVtbl efvtIShellExtInit =
00105 {
00106 IDeskDisplayAdapter_IShellExtInit_QueryInterface,
00107 IDeskDisplayAdapter_IShellExtInit_AddRef,
00108 IDeskDisplayAdapter_IShellExtInit_Release,
00109 IDeskDisplayAdapter_IShellExtInit_Initialize
00110 };
00111
00112 static HRESULT STDMETHODCALLTYPE
00113 IDeskDisplayAdapter_IClassFactory_QueryInterface(IClassFactory *iface,
00114 REFIID iid,
00115 PVOID *pvObject)
00116 {
00117 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IClassFactory);
00118 return IDeskDisplayAdapter_QueryInterface(This,
00119 iid,
00120 pvObject);
00121 }
00122
00123 static ULONG STDMETHODCALLTYPE
00124 IDeskDisplayAdapter_IClassFactory_AddRef(IClassFactory* iface)
00125 {
00126 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IClassFactory);
00127 return IDeskDisplayAdapter_AddRef(This);
00128 }
00129
00130 static ULONG STDMETHODCALLTYPE
00131 IDeskDisplayAdapter_IClassFactory_Release(IClassFactory* iface)
00132 {
00133 PDESKDISPLAYADAPTER This = interface_to_impl(iface, IClassFactory);
00134 return IDeskDisplayAdapter_Release(This);
00135 }
00136
00137 static HRESULT STDMETHODCALLTYPE
00138 IDeskDisplayAdapter_IClassFactory_CreateInstance(IClassFactory *iface,
00139 IUnknown * pUnkOuter,
00140 REFIID riid,
00141 PVOID *ppvObject)
00142 {
00143 if (pUnkOuter != NULL &&
00144 !IsEqualIID(riid,
00145 &IID_IUnknown))
00146 {
00147 return CLASS_E_NOAGGREGATION;
00148 }
00149
00150 return IDeskDisplayAdapter_Constructor(riid,
00151 ppvObject);
00152 }
00153
00154 static HRESULT STDMETHODCALLTYPE
00155 IDeskDisplayAdapter_IClassFactory_LockServer(IClassFactory *iface,
00156 BOOL fLock)
00157 {
00158 if (fLock)
00159 InterlockedIncrement(&dll_refs);
00160 else
00161 InterlockedDecrement(&dll_refs);
00162
00163 return S_OK;
00164 }
00165
00166 static IClassFactoryVtbl efvtIClassFactory =
00167 {
00168 IDeskDisplayAdapter_IClassFactory_QueryInterface,
00169 IDeskDisplayAdapter_IClassFactory_AddRef,
00170 IDeskDisplayAdapter_IClassFactory_Release,
00171 IDeskDisplayAdapter_IClassFactory_CreateInstance,
00172 IDeskDisplayAdapter_IClassFactory_LockServer,
00173 };
00174
00175 VOID
00176 IDeskDisplayAdapter_InitIface(PDESKDISPLAYADAPTER This)
00177 {
00178 This->lpIShellPropSheetExtVtbl = &efvtIShellPropSheetExt;
00179 This->lpIShellExtInitVtbl = &efvtIShellExtInit;
00180 This->lpIClassFactoryVtbl = &efvtIClassFactory;
00181
00182 IDeskDisplayAdapter_AddRef(This);
00183 }
00184
00185 HRESULT WINAPI
00186 DllGetClassObject(REFCLSID rclsid,
00187 REFIID riid,
00188 LPVOID *ppv)
00189 {
00190 if (ppv == NULL)
00191 return E_INVALIDARG;
00192
00193 *ppv = NULL;
00194 if (IsEqualCLSID(rclsid,
00195 &CLSID_IDeskDisplayAdapter))
00196 {
00197 return IDeskDisplayAdapter_Constructor(riid,
00198 ppv);
00199 }
00200
00201 DPRINT1("DllGetClassObject: CLASS_E_CLASSNOTAVAILABLE\n");
00202 return CLASS_E_CLASSNOTAVAILABLE;
00203 }
00204
00205 HRESULT WINAPI
00206 DllCanUnloadNow(VOID)
00207 {
00208 return dll_refs == 0 ? S_OK : S_FALSE;
00209 }