//+--------------------------------------------------------------------------- // // 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 #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(&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(&ndwd), sizeof(ndwd)); } TraceError("HrAddIsdnWizardPagesToDevice", hr); return hr; }