/* * inetps.cpp - Property sheet implementation for Internet class. */ /* Headers **********/ #include "project.hpp" #pragma hdrstop #include "clsfact.h" #include "inetcpl.h" #include "inetps.hpp" /***************************** Private Functions *****************************/ PRIVATE_CODE HRESULT AddInternetPS(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lparam) { // lparam may be any value. ASSERT(IS_VALID_CODE_PTR(pfnAddPage, LPFNADDPROPSHEETPAGE)); return(AddInternetPropertySheets(pfnAddPage, lparam, NULL, NULL)); } /****************************** Public Functions *****************************/ #ifdef DEBUG PUBLIC_CODE BOOL IsValidPCInternet(PCInternet pcinet) { return(IS_VALID_READ_PTR(pcinet, CInternet) && IS_VALID_STRUCT_PTR((PCRefCount)pcinet, CRefCount) && IS_VALID_INTERFACE_PTR((PCIShellExtInit)pcinet, IShellExtInit) && IS_VALID_INTERFACE_PTR((PCIShellPropSheetExt)pcinet, IShellPropSheetExt)); } #endif /********************************** Methods **********************************/ #pragma warning(disable:4705) /* "statement has no effect" warning - cl bug, see KB Q98989 */ Internet::Internet() { DebugEntry(Internet::Internet); // Don't validate this until after construction. ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); DebugExitVOID(Internet::Internet); return; } #pragma warning(default:4705) /* "statement has no effect" warning - cl bug, see KB Q98989 */ Internet::~Internet(void) { DebugEntry(Internet::~Internet); ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); DebugExitVOID(Internet::~Internet); return; } ULONG STDMETHODCALLTYPE Internet::AddRef(void) { ULONG ulcRef; DebugEntry(Internet::AddRef); ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); ulcRef = RefCount::AddRef(); ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); DebugExitULONG(Internet::AddRef, ulcRef); return(ulcRef); } ULONG STDMETHODCALLTYPE Internet::Release(void) { ULONG ulcRef; DebugEntry(Internet::Release); ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); ulcRef = RefCount::Release(); DebugExitULONG(Internet::Release, ulcRef); return(ulcRef); } HRESULT STDMETHODCALLTYPE Internet::QueryInterface(REFIID riid, PVOID *ppvObject) { HRESULT hr = S_OK; DebugEntry(Internet::QueryInterface); ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); ASSERT(IsValidREFIID(riid)); ASSERT(IS_VALID_WRITE_PTR(ppvObject, PVOID)); if (riid == IID_IShellExtInit) { *ppvObject = (PIShellExtInit)this; TRACE_OUT(("Internet::QueryInterface(): Returning IShellExtInit.")); } else if (riid == IID_IShellPropSheetExt) { *ppvObject = (PIShellPropSheetExt)this; TRACE_OUT(("Internet::QueryInterface(): Returning IShellPropSheetExt.")); } else if (riid == IID_IUnknown) { *ppvObject = (PIUnknown)(PIShellPropSheetExt)this; TRACE_OUT(("Internet::QueryInterface(): Returning IUnknown.")); } else { TRACE_OUT(("Internet::QueryInterface(): Called on unknown interface.")); *ppvObject = NULL; hr = E_NOINTERFACE; } if (hr == S_OK) AddRef(); ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); DebugExitHRESULT(Internet::QueryInterface, hr); return(hr); } #pragma warning(disable:4100) /* "unreferenced formal parameter" warning */ HRESULT STDMETHODCALLTYPE Internet::Initialize(PCITEMIDLIST pcidlFolder, PIDataObject pido, HKEY hkeyProgID) { HRESULT hr; DebugEntry(Internet::Initialize); ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); ASSERT(! pcidlFolder || IS_VALID_STRUCT_PTR(pcidlFolder, CITEMIDLIST)); ASSERT(IS_VALID_INTERFACE_PTR(pido, IDataObject)); ASSERT(IS_VALID_HANDLE(hkeyProgID, KEY)); // An Internet doesn't care where it lives in the name space. hr = S_OK; ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); DebugExitHRESULT(Internet::Initialize, hr); return(hr); } #pragma warning(default:4100) /* "unreferenced formal parameter" warning */ HRESULT STDMETHODCALLTYPE Internet::AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lparam) { HRESULT hr; DebugEntry(Internet::AddPages); // lparam may be any value. ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); ASSERT(IS_VALID_CODE_PTR(pfnAddPage, LPFNADDPROPSHEETPAGE)); hr = AddInternetPS(pfnAddPage, lparam); ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); DebugExitHRESULT(Internet::AddPages, hr); return(hr); } #pragma warning(disable:4100) /* "unreferenced formal parameter" warning */ HRESULT STDMETHODCALLTYPE Internet::ReplacePage( UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplaceWith, LPARAM lparam) { HRESULT hr; DebugEntry(Internet::ReplacePage); // lparam may be any value. // uPageID may be any value. ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); ASSERT(IS_VALID_CODE_PTR(pfnReplaceWith, LPFNADDPROPSHEETPAGE)); // No pages to replace. hr = E_NOTIMPL; ASSERT(IS_VALID_STRUCT_PTR(this, CInternet)); DebugExitHRESULT(Internet::ReplacePage, hr); return(hr); } #pragma warning(default:4100) /* "unreferenced formal parameter" warning */ extern "C" STDAPI CreateInstance_Internet(IUnknown *punkOuter, REFIID riid, void **ppvOut) { HRESULT hres; *ppvOut = NULL; if (punkOuter) return CLASS_E_NOAGGREGATION; Internet *pinet = new(Internet); if (pinet) { hres = pinet->QueryInterface(riid, ppvOut); pinet->Release(); } else hres = E_OUTOFMEMORY; return hres; }