1255 lines
37 KiB
C
1255 lines
37 KiB
C
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
||
|
// All rights reserved.
|
||
|
//
|
||
|
// File Name:
|
||
|
// loadnet.c
|
||
|
//
|
||
|
// Description:
|
||
|
// Reads in the settings for the Clients, Services and Protocols.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#include "pch.h"
|
||
|
|
||
|
//
|
||
|
// String constants
|
||
|
//
|
||
|
|
||
|
static const LPTSTR StrConstYes = _T("Yes");
|
||
|
static const LPTSTR StrConstNo = _T("No");
|
||
|
|
||
|
//
|
||
|
// Local prototypes
|
||
|
//
|
||
|
|
||
|
static VOID SetFlagToInstalled( INT iStringResourceId, HWND hwnd );
|
||
|
|
||
|
static int GetNetworkAdapterCount( IN TCHAR szBuffer[] );
|
||
|
|
||
|
static VOID GetNextAdapterSection( IN OUT TCHAR **pAdapterSections,
|
||
|
OUT TCHAR szNetworkBuffer[] );
|
||
|
|
||
|
static VOID ReadPlugAndPlayIds( IN HWND hwnd );
|
||
|
static VOID ReadClientForMsNetworks( IN HWND hwnd );
|
||
|
static VOID ReadClientServiceForNetware( IN HWND hwnd );
|
||
|
static VOID ReadFileAndPrintSharing( IN HWND hwnd );
|
||
|
static VOID ReadPacketSchedulingDriver( IN HWND hwnd );
|
||
|
static VOID ReadSapAgentSettings( IN HWND hwnd );
|
||
|
static VOID ReadAppleTalkSettings( IN HWND hwnd );
|
||
|
static VOID ReadDlcSettings( IN HWND hwnd );
|
||
|
static VOID ReadTcpipSettings( IN HWND hwnd );
|
||
|
static VOID ReadNetBeuiSettings( IN HWND hwnd );
|
||
|
static VOID ReadNetworkMonitorSettings( IN HWND hwnd );
|
||
|
static VOID ReadIpxSettings( IN HWND hwnd );
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadNetworkSettings
|
||
|
//
|
||
|
// Purpose: Reads in what network settings are set to be installed and reads
|
||
|
// there settings.
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
extern VOID
|
||
|
ReadNetworkSettings( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
GetPrivateProfileString( _T("Networking"),
|
||
|
_T("InstallDefaultComponents"),
|
||
|
StrConstYes,
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
if( lstrcmpi( Buffer, StrConstYes ) == 0 )
|
||
|
{
|
||
|
NetSettings.iNetworkingMethod = TYPICAL_NETWORKING;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
NETWORK_COMPONENT *pNetComponent;
|
||
|
|
||
|
NetSettings.iNetworkingMethod = CUSTOM_NETWORKING;
|
||
|
|
||
|
//
|
||
|
// Uninstall all Client, Service and Protocols before reading
|
||
|
// which ones are to be installed
|
||
|
//
|
||
|
|
||
|
for( pNetComponent = NetSettings.NetComponentsList;
|
||
|
pNetComponent;
|
||
|
pNetComponent = pNetComponent->next )
|
||
|
{
|
||
|
pNetComponent->bInstalled = FALSE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
ReadPlugAndPlayIds( hwnd );
|
||
|
|
||
|
//
|
||
|
// Read the Client settings
|
||
|
//
|
||
|
|
||
|
SettingQueue_MarkVolatile( _T("NetClients"),
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
ReadClientForMsNetworks( hwnd );
|
||
|
|
||
|
ReadClientServiceForNetware( hwnd );
|
||
|
|
||
|
//
|
||
|
// Read the Service settings
|
||
|
//
|
||
|
|
||
|
SettingQueue_MarkVolatile( _T("NetServices"),
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
ReadFileAndPrintSharing( hwnd );
|
||
|
|
||
|
ReadPacketSchedulingDriver( hwnd );
|
||
|
|
||
|
ReadSapAgentSettings( hwnd );
|
||
|
|
||
|
//
|
||
|
// Read the Protocol settings
|
||
|
//
|
||
|
|
||
|
SettingQueue_MarkVolatile( _T("NetProtocols"),
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
ReadAppleTalkSettings( hwnd );
|
||
|
|
||
|
ReadDlcSettings( hwnd );
|
||
|
|
||
|
ReadTcpipSettings( hwnd );
|
||
|
|
||
|
ReadNetBeuiSettings( hwnd );
|
||
|
|
||
|
ReadNetworkMonitorSettings( hwnd );
|
||
|
|
||
|
ReadIpxSettings( hwnd );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadPlugAndPlayIds
|
||
|
//
|
||
|
// Purpose: read input file and fill global structs with the Plug and Play Ids
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadPlugAndPlayIds( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
INT iCount;
|
||
|
INT NewNumberOfNetworkCards;
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN] = _T("");
|
||
|
TCHAR szAdapterSections[MAX_INILINE_LEN] = _T("");
|
||
|
|
||
|
NETWORK_ADAPTER_NODE *pAdapter = NetSettings.NetworkAdapterHead;
|
||
|
HRESULT hrPrintf;
|
||
|
|
||
|
//
|
||
|
// Count how many network cards there are
|
||
|
//
|
||
|
for( iCount = 1;
|
||
|
;
|
||
|
iCount++ )
|
||
|
{
|
||
|
|
||
|
hrPrintf=StringCchPrintf( szAdapterSections,AS(szAdapterSections), _T("Adapter%d"), iCount );
|
||
|
|
||
|
if( GetPrivateProfileString(_T("NetAdapters"),
|
||
|
szAdapterSections,
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) <= 0 )
|
||
|
{
|
||
|
|
||
|
break; // no more adapters
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
SettingQueue_MarkVolatile( _T("NetAdapters"),
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
NewNumberOfNetworkCards = iCount - 1;
|
||
|
|
||
|
AdjustNetworkCardMemory( NewNumberOfNetworkCards,
|
||
|
NetSettings.iNumberOfNetworkCards );
|
||
|
|
||
|
NetSettings.iNumberOfNetworkCards = NewNumberOfNetworkCards;
|
||
|
|
||
|
for( iCount = 1;
|
||
|
iCount <= NewNumberOfNetworkCards;
|
||
|
iCount++, pAdapter = pAdapter->next )
|
||
|
{
|
||
|
|
||
|
hrPrintf=StringCchPrintf( szAdapterSections,AS(szAdapterSections), _T("Adapter%d"), iCount );
|
||
|
|
||
|
GetPrivateProfileString( _T("NetAdapters"),
|
||
|
szAdapterSections,
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
//
|
||
|
// Read in the Plug and Play IDs
|
||
|
//
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("INFID"),
|
||
|
_T(""),
|
||
|
pAdapter->szPlugAndPlayID,
|
||
|
StrBuffSize( pAdapter->szPlugAndPlayID ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadClientForMsNetworks
|
||
|
//
|
||
|
// Purpose: read input file and determine if the Client for Microsoft
|
||
|
// Networks is to be installed and if so, read in its settings
|
||
|
// and populate global structs
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadClientForMsNetworks( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
TCHAR szNameServiceProvider[MAX_INILINE_LEN];
|
||
|
TCHAR szNetworkBuffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if MS Client is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetClients"),
|
||
|
_T("MS_MSClient"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// MS Client is installed so set its installed flag to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_CLIENT_FOR_MS_NETWORKS, hwnd );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
//
|
||
|
// and grab all of its settings from the
|
||
|
// answer file
|
||
|
//
|
||
|
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("NameServiceProtocol"),
|
||
|
_T(""),
|
||
|
szNameServiceProvider,
|
||
|
StrBuffSize( szNameServiceProvider ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
if ( LSTRCMPI(szNameServiceProvider, _T("ncacn_ip_tcp")) == 0 )
|
||
|
{
|
||
|
NetSettings.NameServiceProvider = MS_CLIENT_DCE_CELL_DIR_SERVICE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
NetSettings.NameServiceProvider = MS_CLIENT_WINDOWS_LOCATOR;
|
||
|
}
|
||
|
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("NameServiceNetworkAddress"),
|
||
|
NetSettings.szNetworkAddress,
|
||
|
NetSettings.szNetworkAddress,
|
||
|
StrBuffSize( NetSettings.szNetworkAddress ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadClientServiceForNetware
|
||
|
//
|
||
|
// Purpose: read input file and determine if the Client Service for Netware
|
||
|
// is to be installed
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadClientServiceForNetware( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
TCHAR YesNoBuffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if the NetWare Client is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetClients"),
|
||
|
_T("MS_NWClient"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Netware Client is installed so set its installed flag to true
|
||
|
//
|
||
|
|
||
|
// ISSUE-2002/02/28-stelo - verify this works since Netware client has two
|
||
|
// different names, 1 for client, 1 for server
|
||
|
SetFlagToInstalled( IDS_CLIENT_FOR_NETWARE, hwnd );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
|
||
|
//
|
||
|
// and grab all of its settings from the
|
||
|
// answer file
|
||
|
//
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("PreferredServer"),
|
||
|
NetSettings.szPreferredServer,
|
||
|
NetSettings.szPreferredServer,
|
||
|
StrBuffSize(NetSettings.szPreferredServer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
if( NetSettings.szPreferredServer[0] != _T('\0') )
|
||
|
{
|
||
|
NetSettings.bDefaultTreeContext = FALSE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
NetSettings.bDefaultTreeContext = TRUE;
|
||
|
}
|
||
|
|
||
|
GetPrivateProfileString(Buffer,
|
||
|
_T("DefaultTree"),
|
||
|
NetSettings.szDefaultTree,
|
||
|
NetSettings.szDefaultTree,
|
||
|
StrBuffSize(NetSettings.szDefaultTree),
|
||
|
FixedGlobals.ScriptName);
|
||
|
|
||
|
GetPrivateProfileString(Buffer,
|
||
|
_T("DefaultContext"),
|
||
|
NetSettings.szDefaultContext,
|
||
|
NetSettings.szDefaultContext,
|
||
|
StrBuffSize(NetSettings.szDefaultContext),
|
||
|
FixedGlobals.ScriptName);
|
||
|
|
||
|
GetPrivateProfileString(Buffer,
|
||
|
_T("LogonScript"),
|
||
|
NetSettings.szDefaultContext,
|
||
|
YesNoBuffer,
|
||
|
StrBuffSize(YesNoBuffer),
|
||
|
FixedGlobals.ScriptName);
|
||
|
|
||
|
if ( lstrcmpi(YesNoBuffer, StrConstYes) == 0 )
|
||
|
NetSettings.bNetwareLogonScript = TRUE;
|
||
|
else
|
||
|
NetSettings.bNetwareLogonScript = FALSE;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadFileAndPrintSharing
|
||
|
//
|
||
|
// Purpose: read input file and determine if the File and Print Sharing
|
||
|
// is to be installed
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadFileAndPrintSharing( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if MS Server (File and Print Sharing) is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetServices"),
|
||
|
_T("MS_SERVER"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// MS Server (File and Print Sharing) is installed so set its
|
||
|
// installed flag to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_FILE_AND_PRINT_SHARING, hwnd );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadPacketSchedulingDriver
|
||
|
//
|
||
|
// Purpose: read input file and determine if the Packet Scheduling Driver
|
||
|
// is to be installed
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadPacketSchedulingDriver( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if Packet Scheduling Driver is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetServices"),
|
||
|
_T("MS_PSched"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Packet Scheduling Driver is installed so set its installed flag
|
||
|
// to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_PACKET_SCHEDULING_DRIVER, hwnd );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadSapAgentSettings
|
||
|
//
|
||
|
// Purpose: read input file and determine if the SAP Agent is to be installed
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadSapAgentSettings( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if SAP Agent is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetServices"),
|
||
|
_T("MS_NwSapAgent"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// SAP Agent is installed so set its installed flag to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_SAP_AGENT, hwnd );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadAppleTalkSettings
|
||
|
//
|
||
|
// Purpose: read input file and determine if the AppleTalk protocol is to be
|
||
|
// installed and if so, read in its settings
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadAppleTalkSettings( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if AppleTalk is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetProtocols"),
|
||
|
_T("MS_AppleTalk"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// AppleTalk is installed so set its installed flag to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_APPLETALK_PROTOCOL, hwnd );
|
||
|
|
||
|
//
|
||
|
// and grab all of its settings from the
|
||
|
// answer file
|
||
|
//
|
||
|
|
||
|
// ISSUE-2002/02/28-stelo- fill this in, once we know the
|
||
|
// parameters to read in
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadDlcSettings
|
||
|
//
|
||
|
// Purpose: read input file and determine if the DLC protocol is to be
|
||
|
// installed
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadDlcSettings( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if DLC is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetProtocols"),
|
||
|
_T("MS_DLC"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// DLC is installed so set its installed flag to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_DLC_PROTOCOL, hwnd );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadTcpipSettings
|
||
|
//
|
||
|
// Purpose: read input file and determine if the TCP/IP protocol is to be
|
||
|
// installed and if so, read in its settings
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadTcpipSettings( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
INT NewNumberOfNetworkCards;
|
||
|
|
||
|
NETWORK_ADAPTER_NODE *pAdapter;
|
||
|
TCHAR *pAdapterSections;
|
||
|
TCHAR *pBuffer;
|
||
|
TCHAR *pSubnetBuffer;
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
TCHAR szNetworkBuffer[MAX_INILINE_LEN] = _T("");
|
||
|
TCHAR szSubnetBuffer[MAX_INILINE_LEN] = _T("");
|
||
|
TCHAR szAdapterSections[MAX_INILINE_LEN] = _T("");
|
||
|
TCHAR szIPString[IPSTRINGLENGTH] = _T("");
|
||
|
TCHAR szSubnetString[IPSTRINGLENGTH] = _T("");
|
||
|
|
||
|
//
|
||
|
// See if TCP/IP is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetProtocols"),
|
||
|
_T("MS_TCPIP"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
//
|
||
|
// TCP/IP is installed so set its installed flag to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_TCPIP, hwnd );
|
||
|
|
||
|
//
|
||
|
// and grab all of its settings from the
|
||
|
// answer file
|
||
|
//
|
||
|
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("EnableLMHosts"),
|
||
|
StrConstNo,
|
||
|
szNetworkBuffer,
|
||
|
StrBuffSize( szNetworkBuffer ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
if( lstrcmpi( szNetworkBuffer, StrConstYes ) == 0 )
|
||
|
NetSettings.bEnableLMHosts = TRUE;
|
||
|
else
|
||
|
NetSettings.bEnableLMHosts = FALSE;
|
||
|
|
||
|
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("UseDomainNameDevolution"),
|
||
|
StrConstNo,
|
||
|
szNetworkBuffer,
|
||
|
StrBuffSize( szNetworkBuffer ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
if( lstrcmpi( szNetworkBuffer, StrConstYes ) == 0 )
|
||
|
NetSettings.bIncludeParentDomains = TRUE;
|
||
|
else
|
||
|
NetSettings.bIncludeParentDomains = FALSE;
|
||
|
|
||
|
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("DNS"),
|
||
|
StrConstNo,
|
||
|
szNetworkBuffer,
|
||
|
StrBuffSize( szNetworkBuffer ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
if( lstrcmpi( szNetworkBuffer, StrConstYes ) == 0 )
|
||
|
NetSettings.bObtainDNSServerAutomatically = TRUE;
|
||
|
else
|
||
|
NetSettings.bObtainDNSServerAutomatically = FALSE;
|
||
|
|
||
|
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("AdapterSections"),
|
||
|
_T(""),
|
||
|
szAdapterSections,
|
||
|
StrBuffSize( szAdapterSections ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
NewNumberOfNetworkCards = GetNetworkAdapterCount( szAdapterSections );
|
||
|
|
||
|
// allocate the right amount of space for the netword cards
|
||
|
// that will be read in
|
||
|
AdjustNetworkCardMemory( NewNumberOfNetworkCards,
|
||
|
NetSettings.iNumberOfNetworkCards );
|
||
|
|
||
|
NetSettings.iNumberOfNetworkCards = NewNumberOfNetworkCards;
|
||
|
|
||
|
//
|
||
|
// Load network adapter specific TCP/IP settings
|
||
|
//
|
||
|
|
||
|
pAdapterSections = szAdapterSections;
|
||
|
|
||
|
for( pAdapter = NetSettings.NetworkAdapterHead;
|
||
|
pAdapter;
|
||
|
pAdapter = pAdapter->next )
|
||
|
{
|
||
|
|
||
|
GetNextAdapterSection( &pAdapterSections, szNetworkBuffer );
|
||
|
|
||
|
SettingQueue_MarkVolatile( szNetworkBuffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
//
|
||
|
// Read in the DNS Domain Name
|
||
|
//
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("DNSDomain"),
|
||
|
pAdapter->szDNSDomainName,
|
||
|
pAdapter->szDNSDomainName,
|
||
|
StrBuffSize( pAdapter->szDNSDomainName ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
pAdapter->iNetBiosOption = GetPrivateProfileInt( szNetworkBuffer,
|
||
|
_T("NetBIOSOptions"),
|
||
|
pAdapter->iNetBiosOption,
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
//
|
||
|
// if it is not using server assigned DNS, then read in the
|
||
|
// DNS IPs
|
||
|
//
|
||
|
if( !NetSettings.bObtainDNSServerAutomatically )
|
||
|
{
|
||
|
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("DNSServerSearchOrder"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
pBuffer = Buffer;
|
||
|
|
||
|
//
|
||
|
// Loop grabbing the DNS addresses and inserting them into
|
||
|
// its namelist
|
||
|
//
|
||
|
while( GetCommaDelimitedEntry( szIPString, &pBuffer ) )
|
||
|
{
|
||
|
|
||
|
TcpipAddNameToNameList( &pAdapter->Tcpip_DnsAddresses,
|
||
|
szIPString );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Read from the file if it is using DHCP or not
|
||
|
//
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("DHCP"),
|
||
|
StrConstYes,
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
if ( lstrcmpi( Buffer, StrConstYes ) == 0 )
|
||
|
pAdapter->bObtainIPAddressAutomatically = TRUE;
|
||
|
else
|
||
|
pAdapter->bObtainIPAddressAutomatically = FALSE;
|
||
|
|
||
|
|
||
|
if( !pAdapter->bObtainIPAddressAutomatically )
|
||
|
{
|
||
|
//
|
||
|
// DHCP is set to "No" so:
|
||
|
// Read the IP and Subnet addresses from the file and
|
||
|
// insert them into the proper variables
|
||
|
//
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("IPAddress"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("SubnetMask"),
|
||
|
_T(""),
|
||
|
szSubnetBuffer,
|
||
|
StrBuffSize(szSubnetBuffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
pBuffer = Buffer;
|
||
|
pSubnetBuffer = szSubnetBuffer;
|
||
|
|
||
|
//
|
||
|
// Loop grabbing the IP address and Subnet masks and
|
||
|
// inserting them into their respective namelists
|
||
|
//
|
||
|
while( GetCommaDelimitedEntry( szIPString, &pBuffer ) &&
|
||
|
GetCommaDelimitedEntry( szSubnetString, &pSubnetBuffer ) )
|
||
|
{
|
||
|
|
||
|
TcpipAddNameToNameList( &pAdapter->Tcpip_IpAddresses,
|
||
|
szIPString );
|
||
|
|
||
|
TcpipAddNameToNameList( &pAdapter->Tcpip_SubnetMaskAddresses,
|
||
|
szSubnetString );
|
||
|
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Read the Gateway addresses from the file and insert them
|
||
|
// into the proper variables
|
||
|
//
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("DefaultGateway"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
pBuffer = Buffer;
|
||
|
|
||
|
//
|
||
|
// Loop grabbing the Gateway IPs and inserting them into
|
||
|
// its namelist
|
||
|
//
|
||
|
while( GetCommaDelimitedEntry( szIPString, &pBuffer ) )
|
||
|
{
|
||
|
|
||
|
TcpipAddNameToNameList( &pAdapter->
|
||
|
Tcpip_GatewayAddresses,
|
||
|
szIPString );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// if WINS is set to "Yes", then read in the WINS addresses
|
||
|
//
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("WINS"),
|
||
|
StrConstYes,
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
if( lstrcmpi( Buffer, StrConstYes ) == 0 )
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Read the WINS addresses from the file and insert them
|
||
|
// into the proper variables
|
||
|
//
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("WinsServerList"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
pBuffer = Buffer;
|
||
|
//
|
||
|
// Loop grabbing the IPs and inserting them into
|
||
|
// the NameList
|
||
|
//
|
||
|
while( GetCommaDelimitedEntry( szIPString, &pBuffer ) )
|
||
|
{
|
||
|
|
||
|
AddNameToNameList( &pAdapter->Tcpip_WinsAddresses,
|
||
|
szIPString );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Read in the DNS suffixes, if there are any
|
||
|
//
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("WinsServerList"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
pBuffer = Buffer;
|
||
|
//
|
||
|
// Loop grabbing the IPs and inserting them into the NameList
|
||
|
//
|
||
|
while( GetCommaDelimitedEntry( szIPString, &pBuffer ) )
|
||
|
{
|
||
|
|
||
|
AddNameToNameList( &NetSettings.TCPIP_DNS_Domains,
|
||
|
szIPString );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadNetBeuiSettings
|
||
|
//
|
||
|
// Purpose: read input file and determine if the Net BEUI protocol is to be
|
||
|
// installed
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadNetBeuiSettings( IN HWND hwnd ) {
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if NetBEUI is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetProtocols"),
|
||
|
_T("MS_NetBEUI"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// NetBEUI is installed so set its installed flag to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_NETBEUI_PROTOCOL, hwnd );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadNetworkMonitorSettings
|
||
|
//
|
||
|
// Purpose: read input file and determine if the Network Monitor is to be
|
||
|
// installed
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadNetworkMonitorSettings( IN HWND hwnd ) {
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if Network Monitor Agent is installed
|
||
|
//
|
||
|
if( GetPrivateProfileString(_T("NetProtocols"),
|
||
|
_T("MS_NetMon"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Network Monitor Agent is installed so set its installed flag
|
||
|
// to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_NETWORK_MONITOR_AGENT, hwnd );
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ReadIpxSettings
|
||
|
//
|
||
|
// Purpose: read input file and determine if the IPX protocol is to be
|
||
|
// installed and if so, read in its settings
|
||
|
//
|
||
|
// Arguments: VOID
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ReadIpxSettings( IN HWND hwnd ) {
|
||
|
|
||
|
INT NewNumberOfNetworkCards;
|
||
|
|
||
|
NETWORK_ADAPTER_NODE *pAdapter;
|
||
|
TCHAR *pAdapterSections;
|
||
|
|
||
|
TCHAR Buffer[MAX_INILINE_LEN];
|
||
|
TCHAR szAdapterSections[MAX_INILINE_LEN];
|
||
|
TCHAR szNetworkBuffer[MAX_INILINE_LEN];
|
||
|
|
||
|
//
|
||
|
// See if IPX is installed
|
||
|
//
|
||
|
|
||
|
if( GetPrivateProfileString(_T("NetProtocols"),
|
||
|
_T("MS_NWIPX"),
|
||
|
_T(""),
|
||
|
Buffer,
|
||
|
StrBuffSize(Buffer),
|
||
|
FixedGlobals.ScriptName) > 0)
|
||
|
{
|
||
|
|
||
|
SettingQueue_MarkVolatile( Buffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
|
||
|
//
|
||
|
// IPX is installed so set its installed flag to true
|
||
|
//
|
||
|
SetFlagToInstalled( IDS_IPX_PROTOCOL, hwnd );
|
||
|
|
||
|
//
|
||
|
// and grab all of its settings from the
|
||
|
// answer file
|
||
|
//
|
||
|
GetPrivateProfileString(
|
||
|
Buffer,
|
||
|
_T("VirtualNetworkNumber"),
|
||
|
NetSettings.szInternalNetworkNumber,
|
||
|
NetSettings.szInternalNetworkNumber,
|
||
|
StrBuffSize( NetSettings.szInternalNetworkNumber ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
GetPrivateProfileString( Buffer,
|
||
|
_T("AdapterSections"),
|
||
|
_T(""),
|
||
|
szAdapterSections,
|
||
|
StrBuffSize( szAdapterSections ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
NewNumberOfNetworkCards = GetNetworkAdapterCount( szAdapterSections );
|
||
|
|
||
|
//
|
||
|
// allocate the right amount of space for the netword cards that will
|
||
|
// be read in
|
||
|
//
|
||
|
AdjustNetworkCardMemory( NewNumberOfNetworkCards,
|
||
|
NetSettings.iNumberOfNetworkCards );
|
||
|
|
||
|
NetSettings.iNumberOfNetworkCards = NewNumberOfNetworkCards;
|
||
|
|
||
|
//
|
||
|
// Load network adapter specific IPX settings
|
||
|
//
|
||
|
|
||
|
pAdapterSections = szAdapterSections;
|
||
|
|
||
|
for( pAdapter = NetSettings.NetworkAdapterHead;
|
||
|
pAdapter;
|
||
|
pAdapter = pAdapter->next )
|
||
|
{
|
||
|
|
||
|
GetNextAdapterSection( &pAdapterSections, szNetworkBuffer );
|
||
|
|
||
|
SettingQueue_MarkVolatile( szNetworkBuffer,
|
||
|
SETTING_QUEUE_ORIG_ANSWERS );
|
||
|
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("PktType"),
|
||
|
pAdapter->szFrameType,
|
||
|
pAdapter->szFrameType,
|
||
|
StrBuffSize( pAdapter->szFrameType ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
GetPrivateProfileString( szNetworkBuffer,
|
||
|
_T("NetworkNumber"),
|
||
|
pAdapter->szNetworkNumber,
|
||
|
pAdapter->szNetworkNumber,
|
||
|
StrBuffSize( pAdapter->szNetworkNumber ),
|
||
|
FixedGlobals.ScriptName );
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: SetFlagToInstalled
|
||
|
//
|
||
|
// Purpose: iterate through the Network list until the item whose name matches
|
||
|
// the input parameter is found. Set its flag to installed.
|
||
|
//
|
||
|
// Arguments: IN INT iStringResourceId - the string resource ID
|
||
|
// IN HWND hwnd - handle to the dialog window
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
static VOID
|
||
|
SetFlagToInstalled( IN INT iStringResourceId, IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
INT i;
|
||
|
TCHAR *szComponentName;
|
||
|
NETWORK_COMPONENT *pNetComponent;
|
||
|
|
||
|
szComponentName = MyLoadString( iStringResourceId );
|
||
|
|
||
|
for( pNetComponent = NetSettings.NetComponentsList;
|
||
|
pNetComponent;
|
||
|
pNetComponent = pNetComponent->next )
|
||
|
{
|
||
|
|
||
|
if( lstrcmpi( pNetComponent->StrComponentName,
|
||
|
szComponentName ) == 0 )
|
||
|
{
|
||
|
|
||
|
pNetComponent->bInstalled = TRUE;
|
||
|
|
||
|
free( szComponentName );
|
||
|
|
||
|
return;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
free( szComponentName );
|
||
|
|
||
|
// if the function reaches this point then the string ID passed as input
|
||
|
// did not match any string in NetComponentsList
|
||
|
AssertMsg(FALSE, "String ID not found.");
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: GetNextAdapterSection
|
||
|
//
|
||
|
// Purpose: copies the next section from pAdapterSections into szNetworkBuffer
|
||
|
// each section is separated by commas so that's what it looks for
|
||
|
//
|
||
|
// Arguments: IN OUT TCHAR *pAdapterSections - pointer to the current position
|
||
|
// in the AdapterSections string
|
||
|
// OUT TCHAR szNetworkBuffer[] - the parsed section from the
|
||
|
// AdapterSections string
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
static VOID
|
||
|
GetNextAdapterSection( IN OUT TCHAR **pAdapterSections, OUT TCHAR szNetworkBuffer[] )
|
||
|
{
|
||
|
|
||
|
INT i;
|
||
|
|
||
|
//
|
||
|
// Copy over the string char by char
|
||
|
//
|
||
|
|
||
|
i = 0;
|
||
|
|
||
|
while( **pAdapterSections != _T(',') && **pAdapterSections != _T('\0') )
|
||
|
{
|
||
|
|
||
|
szNetworkBuffer[i] = **pAdapterSections;
|
||
|
(*pAdapterSections)++;
|
||
|
i++;
|
||
|
|
||
|
}
|
||
|
|
||
|
szNetworkBuffer[i] = _T('\0');
|
||
|
|
||
|
//
|
||
|
// Prepare pAdapterSections for the next call to this functions
|
||
|
//
|
||
|
|
||
|
if( **pAdapterSections == _T(',') )
|
||
|
{
|
||
|
|
||
|
(*pAdapterSections)++;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: GetNetworkAdapterCount
|
||
|
//
|
||
|
// Purpose: Counts the number of network cards by counting the number of
|
||
|
// commas in the adapter sections buffer
|
||
|
//
|
||
|
// Arguments: IN TCHAR szBuffer[] - string that lists the sections for each
|
||
|
// network card
|
||
|
//
|
||
|
// Returns: int - number of network adapters there are
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
static int
|
||
|
GetNetworkAdapterCount( IN TCHAR szBuffer[] )
|
||
|
{
|
||
|
|
||
|
INT i;
|
||
|
INT NetworkCardCount = 1;
|
||
|
|
||
|
for( i = 0; szBuffer[i] != _T('\0'); i++ )
|
||
|
{
|
||
|
|
||
|
if( szBuffer[i] == _T(',') )
|
||
|
{
|
||
|
NetworkCardCount++;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return( NetworkCardCount );
|
||
|
|
||
|
}
|
||
|
|