windows-nt/Source/XPSP1/NT/net/rras/cm/cnetcfg/callout.cpp
2020-09-26 16:20:57 +08:00

100 lines
2.4 KiB
C++

//*********************************************************************
//* Microsoft Windows **
//* Copyright (c) 1994-1998 Microsoft Corporation
//*********************************************************************
//
// CALLOUT.C - Functions to call out to external components to install
// devices
//
// HISTORY:
//
// 11/27/94 jeremys Created.
// 96/03/24 markdu Replaced memset with ZeroMemory for consistency.
//
#include "wizard.h"
// global variables
static const char c_szModemCPL[] = "rundll32.exe Shell32.dll,Control_RunDLL modem.cpl,,add";
/*******************************************************************
NAME: InvokeModemWizard
SYNOPSIS: Starts the modem install wizard
ENTRY: hwndToHide - this window, if non-NULL, will be hidden while
the modem CPL runs
EXIT: ERROR_SUCCESS if successful, or a standard error code
NOTES: launches RUNDLL32 as a process to run the modem wizard.
Blocks on the completion of that process before returning.
hwndToHide is not necessarily the calling window!
For instance, in a property sheet hwndToHide should not be the
dialog (hDlg), but GetParent(hDlg) so that we hide the property
sheet itself instead of just the current page.
********************************************************************/
UINT InvokeModemWizard(HWND hwndToHide)
{
BOOL bSleepNeeded = FALSE;
if (TRUE == IsNT())
{
BOOL bNeedsStart;
//
// Call into icfg32 dll
//
if (NULL != lpIcfgInstallModem)
{
lpIcfgInstallModem(hwndToHide, 0L, &bNeedsStart);
return ERROR_SUCCESS;
}
else
return ERROR_GEN_FAILURE;
}
else
{
PROCESS_INFORMATION pi;
BOOL fRet;
STARTUPINFO sti;
UINT err = ERROR_SUCCESS;
CHAR szWindowTitle[255];
ZeroMemory(&sti,sizeof(STARTUPINFO));
sti.cb = sizeof(STARTUPINFO);
// run the modem wizard
fRet = CreateProcess(NULL, (LPSTR)c_szModemCPL,
NULL, NULL, FALSE, 0, NULL, NULL,
&sti, &pi);
if (fRet)
{
CloseHandle(pi.hThread);
// wait for the modem wizard process to complete
MsgWaitForMultipleObjectsLoop(pi.hProcess);
CloseHandle(pi.hProcess);
}
else
err = GetLastError();
// show the parent window again
if (hwndToHide)
{
ShowWindow(hwndToHide,SW_SHOW);
}
return err;
}
}