243 lines
7.3 KiB
C++
243 lines
7.3 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1997.
|
||
|
//
|
||
|
// File: I S D N W I Z . C P P
|
||
|
//
|
||
|
// Contents: Wizard pages and helper functions for the ISDN Wizard
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
// Author: jeffspr 15 Jun 1997
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#include "pch.h"
|
||
|
#pragma hdrstop
|
||
|
#include <ncxbase.h>
|
||
|
#include "isdncfg.h"
|
||
|
#include "resource.h"
|
||
|
#include "isdnshts.h"
|
||
|
#include "isdncfg.h"
|
||
|
#include "isdnwiz.h"
|
||
|
#include "ncsetup.h"
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: AddWizardPage
|
||
|
//
|
||
|
// Purpose: Adds a wizard page to the hardware wizard's new device
|
||
|
// wizard structure
|
||
|
//
|
||
|
// Arguments:
|
||
|
// ppsp [in] PropSheetPage structure of page to add
|
||
|
// pndwd [inout] New device wizard structure to add pages to
|
||
|
//
|
||
|
// Returns: None
|
||
|
//
|
||
|
// Author: BillBe 24 Apr 1998
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
void inline
|
||
|
AddWizardPage(PROPSHEETPAGE* ppsp, PSP_NEWDEVICEWIZARD_DATA pndwd)
|
||
|
{
|
||
|
// Don't add pages to the new deice wizard if there is no more room
|
||
|
//
|
||
|
if (pndwd->NumDynamicPages < MAX_INSTALLWIZARD_DYNAPAGES)
|
||
|
{
|
||
|
// Add the handle to the array
|
||
|
pndwd->DynamicPages[pndwd->NumDynamicPages] =
|
||
|
CreatePropertySheetPage(ppsp);
|
||
|
|
||
|
// If we were successful, increment the count of pages
|
||
|
//
|
||
|
if (pndwd->DynamicPages[pndwd->NumDynamicPages])
|
||
|
{
|
||
|
pndwd->NumDynamicPages++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: FillInIsdnWizardPropertyPage
|
||
|
//
|
||
|
// Purpose: Fills in the given PROPSHEETPAGE structure
|
||
|
//
|
||
|
// Arguments:
|
||
|
// psp [] PropSheetPage structure to fill
|
||
|
// iDlgID [] DialogID to use.
|
||
|
// pszTitle [] Title of the prop sheet page
|
||
|
// pfnDlgProc [] Dialog Proc to use.
|
||
|
// pPageData [] Pointer to structure for the individual page proc
|
||
|
//
|
||
|
// Returns: None
|
||
|
//
|
||
|
// Author: jeffspr 15 Jun 1997
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
VOID FillInIsdnWizardPropertyPage( HINSTANCE hInst,
|
||
|
PROPSHEETPAGE * psp,
|
||
|
INT iDlgID,
|
||
|
PCWSTR pszTitle,
|
||
|
DLGPROC pfnDlgProc,
|
||
|
PCWSTR pszHeaderTitle,
|
||
|
PCWSTR pszHeaderSubTitle,
|
||
|
LPVOID pPageData)
|
||
|
{
|
||
|
// Initialize all of the psp parameters, including the ones that
|
||
|
// we're not going to use.
|
||
|
psp->dwSize = sizeof(PROPSHEETPAGE);
|
||
|
psp->dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE |
|
||
|
PSP_USETITLE;
|
||
|
psp->hInstance = hInst;
|
||
|
psp->pszTemplate = MAKEINTRESOURCE(iDlgID);
|
||
|
psp->pszIcon = NULL;
|
||
|
psp->pfnDlgProc = pfnDlgProc;
|
||
|
psp->pszTitle = (PWSTR) pszTitle;
|
||
|
psp->lParam = (LPARAM) pPageData;
|
||
|
psp->pszHeaderTitle = (PWSTR) pszHeaderTitle;
|
||
|
psp->pszHeaderSubTitle = (PWSTR) pszHeaderSubTitle;
|
||
|
|
||
|
// Unused data
|
||
|
//
|
||
|
psp->pfnCallback = NULL;
|
||
|
psp->pcRefParent = NULL;
|
||
|
}
|
||
|
|
||
|
struct WIZ_PAGE_INFO
|
||
|
{
|
||
|
UINT uiResId;
|
||
|
UINT idsPageTitle;
|
||
|
UINT idsPageDesc;
|
||
|
DLGPROC pfnDlgProc;
|
||
|
};
|
||
|
|
||
|
static const WIZ_PAGE_INFO c_aPages[] =
|
||
|
{
|
||
|
{IDW_ISDN_SWITCH_TYPE,
|
||
|
IDS_ISDN_SWITCH_TYPE_TITLE,
|
||
|
IDS_ISDN_SWITCH_TYPE_SUBTITLE,
|
||
|
IsdnSwitchTypeProc},
|
||
|
{IDW_ISDN_SPIDS,
|
||
|
IDS_ISDN_SPIDS_TITLE,
|
||
|
IDS_ISDN_SPIDS_SUBTITLE,
|
||
|
IsdnInfoPageProc},
|
||
|
{IDW_ISDN_JAPAN,
|
||
|
IDS_ISDN_JAPAN_TITLE,
|
||
|
IDS_ISDN_JAPAN_SUBTITLE,
|
||
|
IsdnInfoPageProc},
|
||
|
{IDW_ISDN_EAZ,
|
||
|
IDS_ISDN_EAZ_TITLE,
|
||
|
IDS_ISDN_EAZ_SUBTITLE,
|
||
|
IsdnInfoPageProc},
|
||
|
{IDW_ISDN_MSN,
|
||
|
IDS_ISDN_MSN_TITLE,
|
||
|
IDS_ISDN_MSN_SUBTITLE,
|
||
|
IsdnInfoPageProc},
|
||
|
};
|
||
|
|
||
|
static const INT c_cPages = celems(c_aPages);
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: HrCreateIsdnWizardPages
|
||
|
//
|
||
|
// Purpose: Creates the various pages for the ISDN wizard
|
||
|
//
|
||
|
// Arguments:
|
||
|
// hwndParent [in] Parent window
|
||
|
// pisdnci [in] Configuration information as read from the
|
||
|
// registry
|
||
|
//
|
||
|
// Returns: S_OK if success, Win32 error code otherwise
|
||
|
//
|
||
|
// Author: danielwe 11 Mar 1998
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
HRESULT HrAddIsdnWizardPagesToDevice(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid,
|
||
|
PISDN_CONFIG_INFO pisdnci)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
PROPSHEETPAGE psp = {0};
|
||
|
HINSTANCE hInst = _Module.GetResourceInstance();
|
||
|
INT iPage;
|
||
|
|
||
|
AssertSz(pisdnci, "HrCreateIsdnWizardPages - the CONFIG_INFO struct is"
|
||
|
" NULL");
|
||
|
AssertSz(pisdnci->dwWanEndpoints, "No WanEndpoints? What does this adapter"
|
||
|
" DO, anyway?");
|
||
|
AssertSz(pisdnci->dwNumDChannels, "No D Channels. No Shoes. No Service");
|
||
|
AssertSz(pisdnci->dwSwitchTypes, "Switch types was NULL. We need a list"
|
||
|
", eh?");
|
||
|
|
||
|
|
||
|
SP_NEWDEVICEWIZARD_DATA ndwd;
|
||
|
|
||
|
hr = HrSetupDiGetFixedSizeClassInstallParams(hdi, pdeid,
|
||
|
reinterpret_cast<PSP_CLASSINSTALL_HEADER>(&ndwd), sizeof(ndwd));
|
||
|
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
PWSTR pszTitle = NULL;
|
||
|
PWSTR pszDesc = NULL;
|
||
|
|
||
|
hr = HrSetupDiGetDeviceName(hdi, pdeid, &pszDesc);
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
DwFormatStringWithLocalAlloc(SzLoadIds(IDS_ISDN_WIZARD_TITLE),
|
||
|
&pszTitle, pszDesc);
|
||
|
|
||
|
for (iPage = 0; iPage < c_cPages; iPage++)
|
||
|
{
|
||
|
PAGE_DATA * pPageData;
|
||
|
|
||
|
pPageData = new PAGE_DATA;
|
||
|
|
||
|
if (pPageData == NULL)
|
||
|
{
|
||
|
return(ERROR_NOT_ENOUGH_MEMORY);
|
||
|
}
|
||
|
|
||
|
pPageData->pisdnci = pisdnci;
|
||
|
pPageData->idd = c_aPages[iPage].uiResId;
|
||
|
|
||
|
// Fill in the propsheet page data
|
||
|
//
|
||
|
FillInIsdnWizardPropertyPage(hInst, &psp,
|
||
|
c_aPages[iPage].uiResId,
|
||
|
pszTitle,
|
||
|
c_aPages[iPage].pfnDlgProc,
|
||
|
SzLoadIds(c_aPages[iPage].idsPageTitle),
|
||
|
SzLoadIds(c_aPages[iPage].idsPageDesc),
|
||
|
pPageData);
|
||
|
|
||
|
// The last page gets the job of cleaning up
|
||
|
if ((c_cPages - 1) == iPage)
|
||
|
{
|
||
|
psp.dwFlags |= PSP_USECALLBACK;
|
||
|
psp.pfnCallback = DestroyWizardData;
|
||
|
}
|
||
|
|
||
|
AddWizardPage(&psp, &ndwd);
|
||
|
}
|
||
|
|
||
|
LocalFree(pszTitle);
|
||
|
MemFree(pszDesc);
|
||
|
}
|
||
|
|
||
|
hr = HrSetupDiSetClassInstallParams(hdi, pdeid,
|
||
|
reinterpret_cast<PSP_CLASSINSTALL_HEADER>(&ndwd),
|
||
|
sizeof(ndwd));
|
||
|
}
|
||
|
|
||
|
TraceError("HrAddIsdnWizardPagesToDevice", hr);
|
||
|
return hr;
|
||
|
}
|
||
|
|