windows-nt/Source/XPSP1/NT/shell/ext/url/inetps.cpp

263 lines
5.8 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*
* 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;
}