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.
697 lines
14 KiB
697 lines
14 KiB
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corp., 1991 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
NCPAPDLG.CXX: Windows/NT Network Control Panel Applet.
|
|
|
|
This program presents the test dialogs of the stand-alone
|
|
version of the network control panel applet, NCPAPP.EXE.
|
|
|
|
|
|
|
|
FILE HISTORY:
|
|
DavidHov 1/7/92 Created
|
|
|
|
*/
|
|
|
|
#include "pchncpa.hxx" // Precompiled header
|
|
#include "ncpapp.hxx"
|
|
|
|
const int MAXSERVICES = 200 ;
|
|
const int MAXSTRING = 128 ;
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: NCPA_WND::RunDomainManager
|
|
|
|
SYNOPSIS: DEMO/DEBUGGING ONLY! Run the DOMAIN_MANAGER
|
|
to join a domain. The parameters which SETUP
|
|
would normally provide are read in from a disk
|
|
file (see NCPAPP.CXX) and passed in.
|
|
|
|
ENTRY:
|
|
|
|
EXIT:
|
|
|
|
RETURNS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
********************************************************************/
|
|
VOID NCPA_WND :: RunDomainManager ( const TCHAR * pszInstallParms )
|
|
{
|
|
DOMAIN_MANAGER domnMgr ( QueryHwnd(),
|
|
GENERIC_READ | GENERIC_EXECUTE | GENERIC_WRITE,
|
|
NULL,
|
|
NULL,
|
|
TRUE ) ;
|
|
|
|
if ( domnMgr.QueryError() )
|
|
{
|
|
::MsgPopup( this, (MSGID) domnMgr.QueryError() ) ;
|
|
return ;
|
|
}
|
|
|
|
APIERR err = domnMgr.DomainInstall( pszInstallParms ) ;
|
|
|
|
if ( err )
|
|
{
|
|
::MsgPopup( this, (MSGID) err ) ;
|
|
}
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: NCPA_WND::RunNcpa
|
|
|
|
SYNOPSIS: DEMO/DEBUGGING ONLY! Run the NCPA main dialog
|
|
in the given mode
|
|
|
|
ENTRY:
|
|
|
|
EXIT:
|
|
|
|
RETURNS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
********************************************************************/
|
|
VOID NCPA_WND :: RunNcpa ( BOOL fMainInstall, const TCHAR * pszInstallParms )
|
|
{
|
|
NCPA_DIALOG * pdlgNcpa =
|
|
new NCPA_DIALOG( QueryHwnd(), fMainInstall, pszInstallParms ) ;
|
|
|
|
if ( pdlgNcpa == NULL )
|
|
{
|
|
::MsgPopup( this, (MSGID) ERROR_NOT_ENOUGH_MEMORY ) ;
|
|
}
|
|
else
|
|
if ( pdlgNcpa->QueryError() )
|
|
{
|
|
::MsgPopup( this, (MSGID) pdlgNcpa->QueryError() ) ;
|
|
}
|
|
else
|
|
{
|
|
pdlgNcpa->Process();
|
|
}
|
|
|
|
delete pdlgNcpa ;
|
|
}
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: ABOUT_DIALOG
|
|
|
|
SYNOPSIS: Standard "About..." dialog presentation for the
|
|
NCPA stand-alone app.
|
|
|
|
INTERFACE:
|
|
|
|
PARENT: DIALOG_WINDOW
|
|
|
|
USES:
|
|
|
|
CAVEATS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
**************************************************************************/
|
|
class ABOUT_DIALOG : public DIALOG_WINDOW
|
|
{
|
|
protected:
|
|
virtual BOOL OnOK();
|
|
|
|
public:
|
|
ABOUT_DIALOG( HWND );
|
|
};
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: FOUND_DIALOG
|
|
|
|
SYNOPSIS: Generic dialog used to present lists of entries
|
|
found in the WIN32 Configuration Registry.
|
|
|
|
INTERFACE:
|
|
|
|
PARENT: DIALOG_WINDOW
|
|
|
|
USES:
|
|
|
|
CAVEATS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
**************************************************************************/
|
|
class FOUND_DIALOG : public DIALOG_WINDOW
|
|
{
|
|
private:
|
|
SLT _sltTitle ;
|
|
STRING_LISTBOX _slbItems ;
|
|
public:
|
|
FOUND_DIALOG
|
|
( HWND hwndOwner, MSGID midTitle, HUATOM ahuaSvcs[], INT cSvcs ) ;
|
|
~ FOUND_DIALOG () ;
|
|
};
|
|
|
|
/*************************************************************************
|
|
|
|
NAME: FACTS_DIALOG
|
|
|
|
SYNOPSIS: Simple dialog used to present the generated SProlog
|
|
facts.
|
|
|
|
INTERFACE:
|
|
|
|
PARENT: DIALOG_WINDOW
|
|
|
|
USES:
|
|
|
|
CAVEATS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
**************************************************************************/
|
|
class FACTS_DIALOG : public DIALOG_WINDOW
|
|
{
|
|
MLE _mleFacts ;
|
|
|
|
public:
|
|
FACTS_DIALOG ( HWND hwndOwner, const TCHAR * pchFactBuffer ) ;
|
|
~ FACTS_DIALOG () ;
|
|
};
|
|
|
|
|
|
VOID NCPA_WND :: RunAbout ()
|
|
{
|
|
ABOUT_DIALOG about( QueryHwnd() );
|
|
about.Process();
|
|
}
|
|
|
|
ABOUT_DIALOG::ABOUT_DIALOG( HWND hwndParent )
|
|
: DIALOG_WINDOW( DLG_NM_ABOUT, hwndParent )
|
|
{
|
|
}
|
|
|
|
|
|
BOOL ABOUT_DIALOG::OnOK()
|
|
{
|
|
Dismiss( FALSE );
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: NCPA_WND::RunServiceList
|
|
|
|
SYNOPSIS: DEMO/DEBUGGING ONLY! Create a FOUND_DIALOG containing
|
|
a list box with all the services available.
|
|
|
|
ENTRY:
|
|
|
|
EXIT:
|
|
|
|
RETURNS:
|
|
|
|
NOTES: Changed to use new service controller.
|
|
|
|
HISTORY:
|
|
|
|
********************************************************************/
|
|
VOID NCPA_WND :: RunServiceList ()
|
|
{
|
|
HUATOM ahuaSvcs [MAXSERVICES] ;
|
|
FOUND_DIALOG * pdlgFound = NULL ;
|
|
INT cSvcs = 0 ;
|
|
APIERR err = 0 ;
|
|
DWORD dwServiceCount = 0 ;
|
|
ENUM_SERVICE_STATUS * pServices = NULL ;
|
|
BOOL fLocked ;
|
|
DWORD dwAccess = GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE ;
|
|
|
|
SC_MANAGER scManager( NULL, dwAccess );
|
|
|
|
if ( err = scManager.QueryError() )
|
|
{
|
|
TRACEEOL( SZ("NCPA/APP: SvcCtrl construct error: ") << err );
|
|
::MsgPopup( this, IDS_NCPA_SCMGR_CANT_OPEN ) ;
|
|
return ;
|
|
}
|
|
|
|
err = scManager.Lock() ;
|
|
|
|
if ( ! (fLocked = err == 0) )
|
|
{
|
|
TRACEEOL( SZ("NCPA/APP: SvcCtrl lock error: ") << err );
|
|
}
|
|
|
|
err = scManager.EnumServiceStatus( SERVICE_WIN32 | SERVICE_DRIVER,
|
|
SERVICE_ACTIVE | SERVICE_INACTIVE,
|
|
& pServices,
|
|
& dwServiceCount ) ;
|
|
if ( err )
|
|
{
|
|
TRACEEOL( SZ("NCPA/APP: SvcCtrl enumeration error: ") << err );
|
|
::MsgPopup( this, IDS_NCPA_SCMGR_CANT_ENUM ) ;
|
|
return ;
|
|
}
|
|
|
|
TRACEEOL( SZ("NCPA/APP: SvcCtrl enumeration cout: ") << dwServiceCount );
|
|
|
|
for ( ; cSvcs < dwServiceCount ; cSvcs++ )
|
|
{
|
|
ahuaSvcs[cSvcs] = HUATOM( pServices[cSvcs].lpServiceName ) ;
|
|
}
|
|
|
|
pdlgFound = new FOUND_DIALOG( QueryHwnd(), IDS_FOUND_TITLE_SVCS,
|
|
ahuaSvcs, cSvcs ) ;
|
|
|
|
if ( pdlgFound == NULL || pdlgFound->QueryError() )
|
|
{
|
|
err = pdlgFound ? pdlgFound->QueryError()
|
|
: ERROR_NOT_ENOUGH_MEMORY ;
|
|
|
|
TRACEEOL( SZ("NCPA/APP: cant create FOUND_DIALOG: ") << err );
|
|
::MsgPopup( this, err ) ;
|
|
return ;
|
|
}
|
|
pdlgFound->Process() ;
|
|
delete pdlgFound ;
|
|
|
|
if ( fLocked )
|
|
{
|
|
err = scManager.Unlock() ;
|
|
TRACEEOL( SZ("NCPA/APP: SvcCtrl unlock error: ") << err ) ;
|
|
}
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: NCPA_WND::RunAdapterList
|
|
|
|
SYNOPSIS: DEMO/DEBUGGING ONLY! Create a FOUND_DIALOG containing
|
|
a list box with all the adapters available.
|
|
|
|
ENTRY:
|
|
|
|
EXIT:
|
|
|
|
RETURNS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
********************************************************************/
|
|
VOID NCPA_WND :: RunAdapterList ()
|
|
{
|
|
BINDERY regMgr ;
|
|
COMPONENT_DLIST * pdlAdapters = regMgr.ListOfAdapters();
|
|
HUATOM ahuaAdpts [MAXSERVICES] ;
|
|
FOUND_DIALOG * pdlgFound = NULL ;
|
|
MSGID midError = 0 ;
|
|
INT cAdpts = 0 ;
|
|
APIERR err ;
|
|
|
|
do { // pseudo-loop for escaping when precondition fails.
|
|
|
|
// Check that the container was constructed.
|
|
|
|
if ( pdlAdapters == NULL )
|
|
{
|
|
midError = IDS_FOUND_OUT_OF_MEMORY ;
|
|
break ;
|
|
}
|
|
if ( pdlAdapters->QueryError() )
|
|
{
|
|
midError = IDS_FOUND_ENUM_FAILED ;
|
|
break ;
|
|
}
|
|
|
|
if ( cAdpts = pdlAdapters->QueryNumElem() )
|
|
{
|
|
NLS_STR nlsName, nlsDesc ;
|
|
INT cIndex ;
|
|
|
|
for ( cIndex = 0 ; cIndex < cAdpts ; )
|
|
{
|
|
err = pdlAdapters->QueryInfo( cIndex,
|
|
& nlsName,
|
|
& nlsDesc ) ;
|
|
if ( err )
|
|
{
|
|
midError = IDS_FOUND_REG_QUERY_FAIL ;
|
|
break ;
|
|
}
|
|
ahuaAdpts[cIndex++] = HUATOM( nlsDesc ) ;
|
|
}
|
|
}
|
|
|
|
if ( midError )
|
|
break ;
|
|
|
|
pdlgFound = new FOUND_DIALOG( QueryHwnd(), IDS_FOUND_TITLE_ADAP,
|
|
ahuaAdpts, cAdpts ) ;
|
|
|
|
if ( pdlgFound == NULL || pdlgFound->QueryError() )
|
|
{
|
|
midError = (MSGID) ERROR_NOT_ENOUGH_MEMORY ;
|
|
break ;
|
|
}
|
|
}
|
|
while ( FALSE ) ;
|
|
|
|
if ( midError == 0 )
|
|
{
|
|
pdlgFound->Process();
|
|
}
|
|
else
|
|
{
|
|
::MsgPopup( this, midError ) ;
|
|
}
|
|
|
|
delete pdlgFound ;
|
|
delete pdlAdapters ;
|
|
}
|
|
|
|
VOID NCPA_WND :: RunProductList ()
|
|
{
|
|
BINDERY regMgr ;
|
|
COMPONENT_DLIST * pdlProducts = regMgr.ListOfProducts();
|
|
HUATOM ahuaProds [MAXSERVICES] ;
|
|
FOUND_DIALOG * pdlgFound = NULL ;
|
|
MSGID midError = 0 ;
|
|
INT cProds = 0 ;
|
|
APIERR err ;
|
|
|
|
do { // pseudo-loop for escaping when precondition fails.
|
|
|
|
// Check that the container was constructed.
|
|
|
|
if ( pdlProducts == NULL )
|
|
{
|
|
midError = IDS_FOUND_OUT_OF_MEMORY ;
|
|
break ;
|
|
}
|
|
if ( pdlProducts->QueryError() )
|
|
{
|
|
midError = IDS_FOUND_ENUM_FAILED ;
|
|
break ;
|
|
}
|
|
|
|
if ( cProds = pdlProducts->QueryNumElem() )
|
|
{
|
|
NLS_STR nlsName, nlsDesc ;
|
|
INT cIndex ;
|
|
|
|
for ( cIndex = 0 ; cIndex < cProds ; )
|
|
{
|
|
err = pdlProducts->QueryInfo( cIndex,
|
|
& nlsName,
|
|
& nlsDesc ) ;
|
|
if ( err )
|
|
{
|
|
midError = IDS_FOUND_REG_QUERY_FAIL ;
|
|
break ;
|
|
}
|
|
ahuaProds[cIndex++] = HUATOM( nlsDesc ) ;
|
|
}
|
|
}
|
|
|
|
if ( midError )
|
|
break ;
|
|
|
|
pdlgFound = new FOUND_DIALOG( QueryHwnd(), IDS_FOUND_TITLE_PROD,
|
|
ahuaProds, cProds ) ;
|
|
|
|
if ( pdlgFound == NULL || pdlgFound->QueryError() )
|
|
{
|
|
midError = (MSGID) ERROR_NOT_ENOUGH_MEMORY ;
|
|
break ;
|
|
}
|
|
}
|
|
while ( FALSE ) ;
|
|
|
|
if ( midError == 0 )
|
|
{
|
|
pdlgFound->Process();
|
|
}
|
|
else
|
|
{
|
|
::MsgPopup( this, midError ) ;
|
|
}
|
|
|
|
delete pdlgFound ;
|
|
delete pdlProducts ;
|
|
}
|
|
|
|
// Run the fact-generation function and display its results
|
|
// in an MLE on a simple dialog.
|
|
|
|
VOID NCPA_WND :: RunFacts ()
|
|
{
|
|
BINDERY regMgr ;
|
|
NLS_STR nlsFactBuffer ;
|
|
FACTS_DIALOG * pdlgFacts = NULL ;
|
|
BOOL fResult ;
|
|
|
|
{ // headless block for AUTO_CURSOR
|
|
|
|
AUTO_CURSOR cursAuto ;
|
|
|
|
fResult = regMgr.GetAdapterList()
|
|
&& regMgr.GetProductList()
|
|
&& regMgr.ConvertFacts() == 0 ;
|
|
|
|
}
|
|
|
|
if ( fResult )
|
|
{
|
|
pdlgFacts = new FACTS_DIALOG( QueryHwnd(), regMgr.QueryFactBuffer().QueryPch() ) ;
|
|
if ( pdlgFacts == NULL || pdlgFacts->QueryError() )
|
|
{
|
|
::MsgPopup( this, IDS_FACTS_DLG_FAILURE ) ;
|
|
}
|
|
else
|
|
{
|
|
// Run the dialog
|
|
pdlgFacts->Process() ;
|
|
}
|
|
delete pdlgFacts ;
|
|
}
|
|
else
|
|
{
|
|
::MsgPopup( this, (MSGID) IDS_FACTS_ADAPT_FAILURE ) ;
|
|
}
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: FOUND_DIALOG::FOUND_DIALOG
|
|
|
|
SYNOPSIS: constructor of a generic dialog to display the
|
|
results of any enumeration, typically of Registry
|
|
contents.
|
|
|
|
ENTRY: HWND hwndOwner owner window
|
|
MSGID midTitle resource string title index
|
|
HUATOM ahuaSvcs array of HUATOMs to display
|
|
INT cSvcs number of HUATOMs in array
|
|
|
|
EXIT:
|
|
|
|
RETURNS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
********************************************************************/
|
|
FOUND_DIALOG :: FOUND_DIALOG
|
|
( HWND hwndOwner, MSGID midTitle, HUATOM ahuaSvcs[], INT cSvcs )
|
|
: DIALOG_WINDOW( DLG_NM_FOUND, hwndOwner ),
|
|
_sltTitle( this, IDC_FOUND_TITLE ),
|
|
_slbItems( this, IDC_FOUND_LIST )
|
|
{
|
|
NLS_STR nlsTitle ;
|
|
APIERR err ;
|
|
|
|
if ( QueryError() )
|
|
return ;
|
|
|
|
if ( err = nlsTitle.Load( midTitle ) )
|
|
{
|
|
::MsgPopup( QueryRobustHwnd(), (MSGID) ERROR_GEN_FAILURE ) ;
|
|
return ;
|
|
}
|
|
|
|
_sltTitle.SetText( nlsTitle.QueryPch() ) ;
|
|
|
|
for ( INT i = 0 ; i < cSvcs ; i++ )
|
|
{
|
|
_slbItems.AddItem( ahuaSvcs[i].QueryText() ) ;
|
|
}
|
|
}
|
|
|
|
FOUND_DIALOG :: ~ FOUND_DIALOG ()
|
|
{
|
|
}
|
|
|
|
|
|
FACTS_DIALOG :: FACTS_DIALOG
|
|
( HWND hwndOwner, const TCHAR * pchFactBuffer )
|
|
: DIALOG_WINDOW( DLG_NM_FACTS, hwndOwner ),
|
|
_mleFacts( this, IDC_FACTS_EDIT )
|
|
{
|
|
int cbBuffer,
|
|
cNl ;
|
|
const TCHAR * pch ;
|
|
TCHAR * pch2,
|
|
* pchTemp ;
|
|
|
|
// If no buffer, indicate so.
|
|
if ( pchFactBuffer == NULL )
|
|
pchFactBuffer = SZ("<empty>") ;
|
|
|
|
// Compute the size we'll need to put \r\n after each line...
|
|
|
|
cbBuffer = ::strlenf( pchFactBuffer ) ;
|
|
|
|
for ( cNl = 0, pch = pchFactBuffer ; *pch ; pch++ )
|
|
{
|
|
if ( *pch == ')' )
|
|
cNl += 2 ;
|
|
}
|
|
|
|
// Allocate the temporary buffer
|
|
|
|
pchTemp = new TCHAR [cbBuffer + cNl + cNl] ;
|
|
|
|
if ( pchTemp == NULL )
|
|
{
|
|
ReportError( ERROR_NOT_ENOUGH_MEMORY ) ;
|
|
return ;
|
|
}
|
|
|
|
// Insert a newline after each right paren (end of fact)
|
|
|
|
for ( pch2 = pchTemp, pch = pchFactBuffer ; *pch ; )
|
|
{
|
|
*pch2++ = *pch ;
|
|
if ( *pch++ == ')' )
|
|
{
|
|
*pch2++ = '\r' ;
|
|
*pch2++ = '\n' ;
|
|
}
|
|
}
|
|
*pch2 = 0 ;
|
|
|
|
{
|
|
// Write the facts to a file called "REGFACTS.SPR"
|
|
|
|
DISKFILE dfFacts( SZ( "REGFACTS.SPR" ), OF_WRITE ) ;
|
|
|
|
if ( dfFacts.QueryOpen() )
|
|
{
|
|
dfFacts.Write( pchTemp, ::strlenf( pchTemp ) ) ;
|
|
}
|
|
}
|
|
|
|
_mleFacts.SetText( pchTemp ) ;
|
|
|
|
delete pchTemp ;
|
|
}
|
|
|
|
FACTS_DIALOG :: ~ FACTS_DIALOG ()
|
|
{
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: NCPA_WND::RunBindings
|
|
|
|
SYNOPSIS: Perform the bindings algorithm.
|
|
|
|
ENTRY:
|
|
|
|
EXIT:
|
|
|
|
RETURNS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
********************************************************************/
|
|
APIERR NCPA_WND :: RunBindings ()
|
|
{
|
|
BINDERY bindery ;
|
|
APIERR err ;
|
|
|
|
if ( err = bindery.QueryError() )
|
|
return err ;
|
|
|
|
if ( err = bindery.Init() )
|
|
return err ;
|
|
|
|
err = bindery.Bind() ;
|
|
|
|
err = bindery.StoreCompAssoc() ;
|
|
|
|
err = bindery.LoadCompAssoc() ;
|
|
return err ;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: NCPA_WND::RunStopNetwork
|
|
|
|
SYNOPSIS: Stop the network brutally.
|
|
|
|
ENTRY:
|
|
|
|
EXIT:
|
|
|
|
RETURNS:
|
|
|
|
NOTES:
|
|
|
|
HISTORY:
|
|
|
|
********************************************************************/
|
|
VOID NCPA_WND :: RunStopNetwork ()
|
|
{
|
|
BINDERY bindery ;
|
|
APIERR err ;
|
|
|
|
if ( err = bindery.QueryError() )
|
|
{
|
|
TRACEEOL( SZ("NCPAPP/RunStopNetwork: BINDERY ctor failed, err = ")
|
|
<< err ) ;
|
|
}
|
|
|
|
if ( err = bindery.StopNetwork() )
|
|
{
|
|
TRACEEOL( SZ("NCPAPP/RunStopNetwork: BINDERY::StopNetwork() failed, err = ")
|
|
<< err )
|
|
}
|
|
}
|
|
|
|
// End of NCPAPDLG.CXX
|
|
|