windows-nt/Source/XPSP1/NT/printscan/wia/setup/clsinst/finalpg.cpp
2020-09-26 16:20:57 +08:00

182 lines
4.3 KiB
C++

/******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORP., 2000
*
* TITLE: Final.cpp
*
* VERSION: 1.0
*
* AUTHOR: KeisukeT
*
* DATE: 27 Mar, 2000
*
* DESCRIPTION:
* Final page of WIA class installer.
*
*
*******************************************************************************/
//
// Precompiled header
//
#include "precomp.h"
#pragma hdrstop
//
// Include
//
#include "finalpg.h"
//
// Function
//
CInstallPage::CInstallPage(PINSTALLER_CONTEXT pInstallerContext) :
CInstallWizardPage(pInstallerContext, EmeraldCity)
{
//
// Set link to previous/next page. This page should show up.
//
m_uPreviousPage = NameTheDevice;
m_uNextPage = 0;
//
// Initialize member.
//
m_pInstallerContext = pInstallerContext;
} // CInstallPage::CInstallPage()
BOOL
CInstallPage::OnInit()
{
HFONT hFont;
//
// Set font of title.
//
hFont = GetIntroFont(m_hwndWizard);
if( hFont ){
HWND hwndControl = GetDlgItem(m_hwnd, CompleteMessage);
if( hwndControl ){
SetWindowFont(hwndControl, hFont, TRUE);
} // if( hwndControl )
} // if( hFont )
return TRUE;
}
BOOL
CInstallPage::OnNotify(
LPNMHDR lpnmh
)
{
if (lpnmh->code == PSN_WIZFINISH){
BOOL bSucceeded;
if(NULL == m_pCDevice){
goto OnNotify_return;
}
//
// Register the device element.
//
bSucceeded = SetupDiRegisterDeviceInfo(m_pCDevice->m_hDevInfo,
m_pCDevice->m_pspDevInfoData,
0,
NULL,
NULL,
NULL);
if(FALSE == bSucceeded){
DebugTrace(TRACE_ERROR,(("CInstallPage::OnNotify: ERROR!! SetupDiRegisterDeviceInfo() failed. Err=0x%x.\r\n"), GetLastError()));
goto OnNotify_return;
} // if(FALSE == bSucceeded)
//
// Do device installation.
//
{
INSTALLSELECTEDDRIVER pfnInstallSelectedDriver;
HMODULE hNewDevDll;
DWORD dwReboot;
//
// Device/Driver must be selected at this point.
//
//
// Load newdev.dll
//
hNewDevDll = LoadLibrary(NEWDEVDLL);
if(NULL != hNewDevDll){
pfnInstallSelectedDriver = (INSTALLSELECTEDDRIVER)GetProcAddress(hNewDevDll, "InstallSelectedDriver");
if(NULL != pfnInstallSelectedDriver){
//
// Call install function in newdev.dll
//
dwReboot = 0;
bSucceeded = pfnInstallSelectedDriver(NULL, m_pCDevice->m_hDevInfo, NULL, TRUE, NULL);
} else { // if(NULL != pfnInstallSelectedDriver)
DebugTrace(TRACE_ERROR,(("CInstallPage::OnNotify: ERROR!! Unable to get the address of InstallSelectedDriver. Err=0x%x.\r\n"), GetLastError()));
FreeLibrary(hNewDevDll);
goto OnNotify_return;
} // if(NULL == pfnInstallSelectedDriver)
FreeLibrary(hNewDevDll);
} else {
DebugTrace(TRACE_ERROR,(("CInstallPage::OnNotify: ERROR!! Unable to load newdev.dll. Err=0x%x.\r\n"), GetLastError()));
goto OnNotify_return;
} // if(NULL == hNewDevDll)
}
//
// Do post-installation if succeeded, to make sure about the portname and FriendlyName.
//
if(bSucceeded){
m_pCDevice->PostInstall(TRUE);
}
//
// Free device object anyway.
//
delete m_pCDevice;
m_pCDevice = NULL;
m_pInstallerContext->pDevice = NULL;
} // if (lpnmh->code == PSN_WIZFINISH)
if (lpnmh->code == PSN_SETACTIVE){
//
// Get CDevice object from context.
//
m_pCDevice = (CDevice *)m_pInstallerContext->pDevice;
} // if (lpnmh->code == PSN_SETACTIVE)
OnNotify_return:
return FALSE;
}