263 lines
5.8 KiB
C++
263 lines
5.8 KiB
C++
|
/*
|
||
|
* 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;
|
||
|
}
|
||
|
|