mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.2 KiB
157 lines
3.2 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name :
|
|
|
|
copyhook.cpp
|
|
|
|
Abstract:
|
|
|
|
Copy hook handlers
|
|
|
|
Author:
|
|
|
|
Ronald Meijer (ronaldm)
|
|
|
|
Project:
|
|
|
|
IIS Shell Extension
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
//
|
|
// Include Files
|
|
//
|
|
#include "stdafx.h"
|
|
#include "shellext.h"
|
|
#include "resource.h"
|
|
#include "inetinfo.h"
|
|
#include "iispage.h"
|
|
|
|
HPROPSHEETPAGE
|
|
AddIISPage(
|
|
IN CIISPage * pPage,
|
|
IN LPFNADDPROPSHEETPAGE lpfnAddPage,
|
|
IN LPARAM lParam
|
|
)
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
//
|
|
// Create a property sheet page object from a dialog box.
|
|
//
|
|
// We go through some magic in order to use an MFC CPropertyPage object.
|
|
//
|
|
HPROPSHEETPAGE hpage = NULL;
|
|
|
|
if (pPage != NULL)
|
|
{
|
|
PROPSHEETPAGE psp;
|
|
|
|
CopyMemory(&psp, &pPage->m_psp, sizeof(PROPSHEETPAGE));
|
|
|
|
const DLGTEMPLATE* pTemplate;
|
|
|
|
if (psp.dwFlags & PSP_DLGINDIRECT)
|
|
{
|
|
pTemplate = psp.pResource;
|
|
}
|
|
else
|
|
{
|
|
HRSRC hResource = ::FindResource(psp.hInstance,
|
|
psp.pszTemplate, RT_DIALOG);
|
|
HGLOBAL hTemplate = LoadResource(psp.hInstance,
|
|
hResource);
|
|
pTemplate = (LPCDLGTEMPLATE)LockResource(hTemplate);
|
|
}
|
|
|
|
ASSERT(pTemplate != NULL);
|
|
psp.pcRefParent = &g_cRefThisDll;
|
|
psp.pResource = pTemplate;
|
|
|
|
CString strTitle;
|
|
strTitle.LoadString(pPage->m_nTitle);
|
|
psp.pszTitle = (LPCTSTR)strTitle;
|
|
|
|
psp.dwFlags |= PSP_DLGINDIRECT | PSP_USETITLE | PSP_USEREFPARENT;
|
|
|
|
hpage = CreatePropertySheetPage(&psp);
|
|
if (hpage)
|
|
{
|
|
if (!lpfnAddPage(hpage, lParam))
|
|
{
|
|
DestroyPropertySheetPage(hpage);
|
|
}
|
|
}
|
|
}
|
|
|
|
return hpage;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CShellExt::AddPages(
|
|
IN LPFNADDPROPSHEETPAGE lpfnAddPage,
|
|
IN LPARAM lParam
|
|
)
|
|
{
|
|
SetAfxState();
|
|
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
HPROPSHEETPAGE hpage;
|
|
|
|
TRACEEOLID("CShellExt::AddPages()");
|
|
|
|
SetAfxState();
|
|
|
|
//
|
|
// Make sure this not a folder like "control panel"
|
|
//
|
|
if ((IsQualifiedDirectory(m_strFileUserClickedOn)
|
|
|| IsUncPath(m_strFileUserClickedOn))
|
|
&& !IsRemoteDrive(m_strFileUserClickedOn))
|
|
{
|
|
int iSvcID = -1;
|
|
if (g_fFTPInstalled)
|
|
{
|
|
iSvcID = SVC_ID_FTP;
|
|
}
|
|
if (g_fWWWInstalled)
|
|
{
|
|
iSvcID = SVC_ID_WWW;
|
|
}
|
|
|
|
if (iSvcID != -1)
|
|
{
|
|
CIISPage * pIISPage = new CIISPage(iSvcID, m_strFileUserClickedOn);
|
|
if (pIISPage != NULL)
|
|
{
|
|
pIISPage->m_psp.dwFlags &= ~(PSP_HASHELP);
|
|
hpage = AddIISPage(pIISPage, lpfnAddPage, lParam);
|
|
}
|
|
else
|
|
{
|
|
::DisplayMessage(ERROR_NOT_ENOUGH_MEMORY);
|
|
}
|
|
}
|
|
}
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CShellExt::ReplacePage(
|
|
IN UINT uPageID,
|
|
IN LPFNADDPROPSHEETPAGE lpfnReplaceWith,
|
|
IN LPARAM lParam
|
|
)
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
TRACEEOLID("CShellExt::ReplacePage()");
|
|
|
|
return E_FAIL;
|
|
}
|