1055 lines
30 KiB
C
1055 lines
30 KiB
C
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// File Name:
|
|
// savenet.c
|
|
//
|
|
// Description:
|
|
// Adds the appropriate settings to the output queue for each of the
|
|
// Clients, Services and Protocols installed.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.h"
|
|
#include "allres.h"
|
|
|
|
//
|
|
// String constants
|
|
//
|
|
|
|
static const LPTSTR StrConstYes = _T("Yes");
|
|
static const LPTSTR StrConstNo = _T("No");
|
|
static const LPTSTR StrConstStar = _T("*");
|
|
static const LPTSTR StrComma = _T(",");
|
|
|
|
//
|
|
// local prototypes
|
|
//
|
|
|
|
static VOID WriteOutCustomNetSettings( HWND );
|
|
static VOID WriteOutAppleTalkSettings( VOID );
|
|
static VOID WriteOutDlcProtocolSettings( VOID );
|
|
static VOID WriteOutFileAndPrintSharingSettings( VOID );
|
|
static VOID WriteOutIpxSettings( VOID );
|
|
static VOID WriteOutMSClientSettings( VOID );
|
|
static VOID WriteOutNetBeuiSettings( VOID );
|
|
static VOID WriteOutNetWareSettings( VOID );
|
|
static VOID WriteOutNetworkMonitorSettings( VOID );
|
|
static VOID WriteOutPacketSchedulingDriverSettings( VOID );
|
|
static VOID WriteOutSapAgentSettings( VOID );
|
|
static VOID WriteOutTcpipSettings( IN HWND hwnd );
|
|
static VOID WriteOutAdapterSpecificTcpipSettings( IN HWND hwnd,
|
|
IN TCHAR *szSectionName,
|
|
IN NETWORK_ADAPTER_NODE *pAdapter );
|
|
|
|
extern VOID NamelistToCommaString( IN NAMELIST* pNamelist, OUT TCHAR *szBuffer, IN DWORD cbSize);
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutNetSettings
|
|
//
|
|
// Purpose: Writes out network settings
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
extern VOID
|
|
WriteOutNetSettings( IN HWND hwnd ) {
|
|
|
|
if( NetSettings.iNetworkingMethod == CUSTOM_NETWORKING ) {
|
|
|
|
SettingQueue_AddSetting(_T("Networking"),
|
|
_T("InstallDefaultComponents"),
|
|
StrConstNo,
|
|
SETTING_QUEUE_ANSWERS);
|
|
|
|
WriteOutCustomNetSettings( hwnd );
|
|
|
|
}
|
|
else {
|
|
|
|
SettingQueue_AddSetting(_T("Networking"),
|
|
_T("InstallDefaultComponents"),
|
|
StrConstYes,
|
|
SETTING_QUEUE_ANSWERS);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutCustomNetSettings
|
|
//
|
|
// Purpose: Add to the output queue the settings for each of the Clients,
|
|
// Services and Protocols installed.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutCustomNetSettings( IN HWND hwnd ) {
|
|
|
|
INT iCount;
|
|
|
|
NETWORK_ADAPTER_NODE *pAdapter;
|
|
NETWORK_COMPONENT *pNetComponent;
|
|
|
|
TCHAR szAdapter[MAX_STRING_LEN] = _T("");
|
|
TCHAR szParams[MAX_STRING_LEN] = _T("");
|
|
HRESULT hrPrintf;
|
|
|
|
//
|
|
// Don't write out [NetAdapters] or params section on a sysprep because
|
|
// they aren't supported.
|
|
//
|
|
|
|
if( WizGlobals.iProductInstall != PRODUCT_SYSPREP )
|
|
{
|
|
|
|
for( pAdapter = NetSettings.NetworkAdapterHead, iCount = 1;
|
|
pAdapter;
|
|
pAdapter = pAdapter->next, iCount++ ) {
|
|
|
|
hrPrintf=StringCchPrintf( szAdapter, AS(szAdapter), _T("Adapter%d"), iCount );
|
|
|
|
hrPrintf=StringCchPrintf( szParams, AS(szParams), _T("params.%s"), szAdapter );
|
|
|
|
SettingQueue_AddSetting( _T("NetAdapters"),
|
|
szAdapter,
|
|
szParams,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// If more than 1 network adapter will be installed then we have
|
|
// to specify the Plug and Play IDs
|
|
//
|
|
if( NetSettings.iNumberOfNetworkCards > 1) {
|
|
|
|
SettingQueue_AddSetting( szParams,
|
|
_T("INFID"),
|
|
pAdapter->szPlugAndPlayID,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
szAdapter[0] = _T('\0');
|
|
szParams[0] = _T('\0');
|
|
|
|
}
|
|
|
|
if( NetSettings.iNumberOfNetworkCards == 1 ) {
|
|
|
|
SettingQueue_AddSetting( _T("params.Adapter1"),
|
|
_T("INFID"),
|
|
StrConstStar,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//
|
|
// Iterate over the Net list writing out settings for the
|
|
// installed components
|
|
//
|
|
|
|
for( pNetComponent = NetSettings.NetComponentsList;
|
|
pNetComponent;
|
|
pNetComponent = pNetComponent->next )
|
|
{
|
|
|
|
if( pNetComponent->bInstalled ) {
|
|
|
|
//
|
|
// find the appropriate function to call to write its settings
|
|
//
|
|
|
|
switch( pNetComponent->iPosition ) {
|
|
|
|
case MS_CLIENT_POSITION:
|
|
|
|
WriteOutMSClientSettings();
|
|
|
|
break;
|
|
|
|
case NETWARE_CLIENT_POSITION:
|
|
|
|
if( WizGlobals.iPlatform == PLATFORM_WORKSTATION || WizGlobals.iPlatform == PLATFORM_PERSONAL )
|
|
{
|
|
WriteOutNetWareSettings();
|
|
}
|
|
|
|
break;
|
|
|
|
case GATEWAY_FOR_NETWARE_POSITION:
|
|
|
|
if( WizGlobals.iPlatform == PLATFORM_SERVER || WizGlobals.iPlatform == PLATFORM_ENTERPRISE || WizGlobals.iPlatform == PLATFORM_WEBBLADE)
|
|
{
|
|
WriteOutNetWareSettings();
|
|
}
|
|
|
|
break;
|
|
|
|
case FILE_AND_PRINT_SHARING_POSITION:
|
|
|
|
WriteOutFileAndPrintSharingSettings();
|
|
|
|
break;
|
|
|
|
case PACKET_SCHEDULING_POSITION:
|
|
|
|
WriteOutPacketSchedulingDriverSettings();
|
|
|
|
break;
|
|
|
|
case SAP_AGENT_POSITION:
|
|
|
|
WriteOutSapAgentSettings();
|
|
|
|
break;
|
|
|
|
case APPLETALK_POSITION:
|
|
|
|
WriteOutAppleTalkSettings();
|
|
|
|
break;
|
|
|
|
case DLC_POSITION:
|
|
|
|
WriteOutDlcProtocolSettings();
|
|
|
|
break;
|
|
|
|
case TCPIP_POSITION:
|
|
|
|
WriteOutTcpipSettings( hwnd );
|
|
|
|
break;
|
|
|
|
case NETBEUI_POSITION:
|
|
|
|
WriteOutNetBeuiSettings();
|
|
|
|
break;
|
|
|
|
case NETWORK_MONITOR_AGENT_POSITION:
|
|
|
|
WriteOutNetworkMonitorSettings();
|
|
|
|
break;
|
|
|
|
case IPX_POSITION:
|
|
|
|
WriteOutIpxSettings();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
AssertMsg( FALSE,
|
|
"Bad case in Net Save switch block." );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutMSClientSettings
|
|
//
|
|
// Purpose: Adds the settings for the Client for MS Networks to the
|
|
// output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutMSClientSettings( VOID ) {
|
|
|
|
|
|
LPTSTR lpNameServiceProvider = _T("");
|
|
LPTSTR lpNameServiceNetworkAddress = _T("");
|
|
|
|
SettingQueue_AddSetting( _T("NetClients"),
|
|
_T("MS_MSClient"),
|
|
_T("params.MS_MSClient"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
if( NetSettings.NameServiceProvider == MS_CLIENT_WINDOWS_LOCATOR )
|
|
{
|
|
lpNameServiceProvider = _T("");
|
|
}
|
|
else if( NetSettings.NameServiceProvider == MS_CLIENT_DCE_CELL_DIR_SERVICE )
|
|
{
|
|
lpNameServiceProvider = _T("ncacn_ip_tcp");
|
|
|
|
lpNameServiceNetworkAddress = NetSettings.szNetworkAddress;
|
|
}
|
|
else
|
|
{
|
|
AssertMsg( FALSE,
|
|
"Invalid case for NameServiceProvider" );
|
|
}
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_MSClient"),
|
|
_T("NameServiceProtocol"),
|
|
lpNameServiceProvider,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_MSClient"),
|
|
_T("NameServiceNetworkAddress"),
|
|
lpNameServiceNetworkAddress,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutNetWareSettings
|
|
//
|
|
// Purpose: Adds the settings for Netware to the output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutNetWareSettings( VOID ) {
|
|
|
|
LPTSTR lpPreferredServer = _T("");
|
|
LPTSTR lpDefaultTree = _T("");
|
|
LPTSTR lpDefaultContext = _T("");
|
|
LPTSTR lpLogonScript = _T("");
|
|
|
|
SettingQueue_AddSetting( _T("NetClients"),
|
|
_T("MS_NWClient"),
|
|
_T("params.MS_NWClient"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
if( NetSettings.bDefaultTreeContext ) {
|
|
|
|
lpDefaultTree = NetSettings.szDefaultTree;
|
|
lpDefaultContext = NetSettings.szDefaultContext;
|
|
|
|
}
|
|
else {
|
|
|
|
lpPreferredServer = NetSettings.szPreferredServer;
|
|
|
|
}
|
|
|
|
if( NetSettings.bNetwareLogonScript ) {
|
|
|
|
lpLogonScript = StrConstYes;
|
|
|
|
}
|
|
else {
|
|
|
|
lpLogonScript = StrConstNo;
|
|
|
|
}
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NWClient"),
|
|
_T("PreferredServer"),
|
|
lpPreferredServer,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NWClient"),
|
|
_T("DefaultTree"),
|
|
lpDefaultTree,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NWClient"),
|
|
_T("DefaultContext"),
|
|
lpDefaultContext,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NWClient"),
|
|
_T("LogonScript"),
|
|
lpLogonScript,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutFileAndPrintSharingSettings
|
|
//
|
|
// Purpose: Adds the settings for File and Print Sharing to the output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutFileAndPrintSharingSettings( VOID ) {
|
|
|
|
SettingQueue_AddSetting( _T("NetServices"),
|
|
_T("MS_SERVER"),
|
|
_T("params.MS_SERVER"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_SERVER"),
|
|
_T(""),
|
|
_T(""),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutPacketSchedulingDriverSettings
|
|
//
|
|
// Purpose: Adds the settings for the QoS Packet Scheduler to the
|
|
// output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutPacketSchedulingDriverSettings( VOID ) {
|
|
|
|
SettingQueue_AddSetting( _T("NetServices"),
|
|
_T("MS_PSched"),
|
|
_T("params.MS_PSched"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_PSched"),
|
|
_T(""),
|
|
_T(""),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutSapAgentSettings
|
|
//
|
|
// Purpose: Adds the settings for the SAP Agent to the output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutSapAgentSettings( VOID ) {
|
|
|
|
SettingQueue_AddSetting( _T("NetServices"),
|
|
_T("MS_NwSapAgent"),
|
|
_T("params.MS_NwSapAgent"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NwSapAgent"),
|
|
_T(""),
|
|
_T(""),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutAppleTalkSettings
|
|
//
|
|
// Purpose: Adds the settings for AppleTalk to the output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutAppleTalkSettings( VOID ) {
|
|
|
|
// ISSUE-2002/02/28-stelo- fill in the parameters, once I know what ones to use
|
|
|
|
|
|
SettingQueue_AddSetting( _T("NetProtocols"),
|
|
_T("MS_AppleTalk"),
|
|
_T("params.MS_AppleTalk"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
/*
|
|
SettingQueue_AddSetting( _T("params.MS_AppleTalk"),
|
|
_T("DefaultZone"),
|
|
NetSettings.szDefaultZone,
|
|
SETTING_QUEUE_ANSWERS );
|
|
*/
|
|
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutDlcProtocolSettings
|
|
//
|
|
// Purpose: Adds the settings for the DLC protocol to the output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutDlcProtocolSettings( VOID ) {
|
|
|
|
SettingQueue_AddSetting( _T("NetProtocols"),
|
|
_T("MS_DLC"),
|
|
_T("params.MS_DLC"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_DLC"),
|
|
_T(""),
|
|
_T(""),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutNetBeuiSettings
|
|
//
|
|
// Purpose: Adds the settings for Net BEUI to the output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutNetBeuiSettings( VOID ) {
|
|
|
|
SettingQueue_AddSetting( _T("NetProtocols"),
|
|
_T("MS_NetBEUI"),
|
|
_T("params.MS_NetBEUI"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NetBEUI"),
|
|
_T(""),
|
|
_T(""),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutNetworkMonitorSettings
|
|
//
|
|
// Purpose: Adds the settings for the Network Monitor to the output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutNetworkMonitorSettings( VOID ) {
|
|
|
|
SettingQueue_AddSetting( _T("NetProtocols"),
|
|
_T("MS_NetMon"),
|
|
_T("params.MS_NetMon"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NetMon"),
|
|
_T(""),
|
|
_T(""),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutIpxSettings
|
|
//
|
|
// Purpose: Adds the settings for the IPX protocol to the output queue.
|
|
//
|
|
// Arguments: VOID
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutIpxSettings( VOID ) {
|
|
|
|
INT iCount = 0;
|
|
INT iCharCount = 0;
|
|
|
|
TCHAR szAdapterSectionsBuffer[MAX_INILINE_LEN] = _T("");
|
|
TCHAR szAdapter[MAX_INILINE_LEN] = _T("");
|
|
TCHAR szParams[MAX_INILINE_LEN] = _T("");
|
|
|
|
NETWORK_ADAPTER_NODE *pAdapter;
|
|
HRESULT hrCat;
|
|
HRESULT hrPrintf;
|
|
|
|
SettingQueue_AddSetting( _T("NetProtocols"),
|
|
_T("MS_NWIPX"),
|
|
_T("params.MS_NWIPX"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NWIPX"),
|
|
_T("VirtualNetworkNumber"),
|
|
NetSettings.szInternalNetworkNumber,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// Build up the AdapterSections string by iterating over the list and
|
|
// appending a string for each entry and then write out the IPX settings
|
|
// specific for that adapter
|
|
//
|
|
for( pAdapter = NetSettings.NetworkAdapterHead, iCount = 1;
|
|
pAdapter;
|
|
pAdapter = pAdapter->next, iCount++ ) {
|
|
|
|
hrPrintf=StringCchPrintf( szParams, AS(szParams), _T("params.MS_NWIPX.Adapter%d"), iCount );
|
|
iCharCount= lstrlen(szParams);
|
|
|
|
//
|
|
// Break out of the for loop if there is no more room in the buffer
|
|
// - the +1 is to take into account the space the comma takes up
|
|
//
|
|
if( ( lstrlen( szAdapterSectionsBuffer ) + iCharCount + 1 ) >= MAX_INILINE_LEN ) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
//
|
|
// Don't add the comma before the first item in the list
|
|
//
|
|
if( iCount != 1 ) {
|
|
|
|
hrCat=StringCchCat( szAdapterSectionsBuffer, AS(szAdapterSectionsBuffer), StrComma );
|
|
|
|
}
|
|
|
|
hrCat=StringCchCat( szAdapterSectionsBuffer, AS(szAdapterSectionsBuffer), szParams );
|
|
|
|
hrPrintf=StringCchPrintf( szAdapter, AS(szAdapter), _T("Adapter%d"), iCount );
|
|
|
|
SettingQueue_AddSetting( szParams,
|
|
_T("SpecificTo"),
|
|
szAdapter,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( szParams,
|
|
_T("PktType"),
|
|
pAdapter->szFrameType,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
SettingQueue_AddSetting( szParams,
|
|
_T("NetworkNumber"),
|
|
pAdapter->szNetworkNumber,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_NWIPX"),
|
|
_T("AdapterSections"),
|
|
szAdapterSectionsBuffer,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutTcpipSettings
|
|
//
|
|
// Purpose: Adds the settings for TCPIP to the output queue.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutTcpipSettings( IN HWND hwnd ) {
|
|
|
|
LPTSTR lpDns;
|
|
LPTSTR lpDomainNameDevolution;
|
|
LPTSTR lpLmHosts;
|
|
|
|
INT iCount;
|
|
INT iCharCount;
|
|
|
|
NETWORK_ADAPTER_NODE *pAdapter;
|
|
|
|
TCHAR szBuffer[MAX_INILINE_LEN];
|
|
|
|
TCHAR szAdapterSectionsBuffer[MAX_INILINE_LEN] = _T("");
|
|
TCHAR szAdapter[MAX_INILINE_LEN] = _T("");
|
|
TCHAR szParams[MAX_INILINE_LEN] = _T("");
|
|
HRESULT hrCat;
|
|
HRESULT hrPrintf;
|
|
|
|
SettingQueue_AddSetting( _T("NetProtocols"),
|
|
_T("MS_TCPIP"),
|
|
_T("params.MS_TCPIP"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// Write out if DNS is going to be configured automatically or if not,
|
|
// the actual IP addresses
|
|
//
|
|
if( NetSettings.bObtainDNSServerAutomatically ) {
|
|
|
|
lpDns = StrConstYes;
|
|
|
|
}
|
|
else {
|
|
|
|
lpDns = StrConstNo;
|
|
|
|
}
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_TCPIP"),
|
|
_T("DNS"),
|
|
lpDns,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// Write out the DNS suffix names
|
|
//
|
|
NamelistToCommaString( &NetSettings.TCPIP_DNS_Domains, szBuffer, AS(szBuffer) );
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_TCPIP"),
|
|
_T("DNSSuffixSearchOrder"),
|
|
szBuffer,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// Write out if we are using Domain Name Devolution or not
|
|
// (another name for "Include parent Domains"
|
|
//
|
|
if( NetSettings.bIncludeParentDomains ) {
|
|
|
|
lpDomainNameDevolution = StrConstYes;
|
|
|
|
}
|
|
else {
|
|
|
|
lpDomainNameDevolution = StrConstNo;
|
|
|
|
}
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_TCPIP"),
|
|
_T("UseDomainNameDevolution"),
|
|
lpDomainNameDevolution,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// Write out if LM Hosts is enabled or not
|
|
//
|
|
if( NetSettings.bEnableLMHosts ) {
|
|
|
|
lpLmHosts = StrConstYes;
|
|
|
|
}
|
|
else {
|
|
|
|
lpLmHosts = StrConstNo;
|
|
|
|
}
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_TCPIP"),
|
|
_T("EnableLMHosts"),
|
|
lpLmHosts,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// Setup for and write out the Adapter Specific TCP/IP Settings
|
|
//
|
|
for( pAdapter = NetSettings.NetworkAdapterHead, iCount = 1;
|
|
pAdapter;
|
|
pAdapter = pAdapter->next, iCount++ ) {
|
|
|
|
hrPrintf=StringCchPrintf( szParams, AS(szParams), _T("params.MS_TCPIP.Adapter%d"), iCount );
|
|
iCharCount= lstrlen(szParams);
|
|
|
|
//
|
|
// Break out of the for loop if there is no more room in the buffer
|
|
// - the +1 is to take into account the space the comma takes up
|
|
//
|
|
if( ( lstrlen( szAdapterSectionsBuffer ) + iCharCount + 1 ) >= MAX_INILINE_LEN ) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
//
|
|
// Don't add the comma before the first item in the list
|
|
//
|
|
if( iCount != 1) {
|
|
|
|
hrCat=StringCchCat( szAdapterSectionsBuffer, AS(szAdapterSectionsBuffer), StrComma );
|
|
|
|
}
|
|
|
|
hrCat=StringCchCat( szAdapterSectionsBuffer, AS(szAdapterSectionsBuffer), szParams );
|
|
|
|
hrPrintf=StringCchPrintf( szAdapter, AS(szAdapter), _T("Adapter%d"), iCount );
|
|
|
|
SettingQueue_AddSetting( szParams,
|
|
_T("SpecificTo"),
|
|
szAdapter,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
|
|
WriteOutAdapterSpecificTcpipSettings( hwnd, szParams, pAdapter );
|
|
|
|
|
|
}
|
|
|
|
SettingQueue_AddSetting( _T("params.MS_TCPIP"),
|
|
_T("AdapterSections"),
|
|
szAdapterSectionsBuffer,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: WriteOutAdapterSpecificTcpipSettings
|
|
//
|
|
// Purpose: Writes out settings to the output queue that are specific to a
|
|
// particular network adapter.
|
|
//
|
|
// Arguments: IN HWND hwnd - handle to the dialog window
|
|
// IN TCHAR *szSectionName - section name to write in settings under
|
|
// IN NETWORK_ADAPTER_NODE *pAdapter - the network adapter that has
|
|
// the settings to write out
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
WriteOutAdapterSpecificTcpipSettings( IN HWND hwnd,
|
|
IN TCHAR *szSectionName,
|
|
IN NETWORK_ADAPTER_NODE *pAdapter ) {
|
|
|
|
INT nEntries;
|
|
|
|
LPTSTR lpNetBios = NULL;
|
|
|
|
TCHAR szIpAddresses[MAX_INILINE_LEN];
|
|
TCHAR szSubnetMaskAddresses[MAX_INILINE_LEN];
|
|
TCHAR szGatewayAddresses[MAX_INILINE_LEN];
|
|
TCHAR szDnsAddresses[MAX_INILINE_LEN];
|
|
TCHAR szWinsServerAddresses[MAX_INILINE_LEN];
|
|
|
|
//
|
|
// Write out if we are using DHCP or not
|
|
// If we are not then write the IP, Subnet masks and Gateway
|
|
// IP addresses
|
|
//
|
|
|
|
if( pAdapter->bObtainIPAddressAutomatically ) {
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("DHCP"),
|
|
_T("Yes"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
else {
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("DHCP"),
|
|
_T("No"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// Write out the IP addresses
|
|
//
|
|
NamelistToCommaString( &pAdapter->Tcpip_IpAddresses,
|
|
szIpAddresses,
|
|
AS(szIpAddresses));
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("IPAddress"),
|
|
szIpAddresses,
|
|
SETTING_QUEUE_ANSWERS );
|
|
//
|
|
// Write out the Subnet Masks
|
|
//
|
|
NamelistToCommaString( &pAdapter->Tcpip_SubnetMaskAddresses,
|
|
szSubnetMaskAddresses,
|
|
AS(szSubnetMaskAddresses));
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("SubnetMask"),
|
|
szSubnetMaskAddresses,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
//
|
|
// Write out the gateways
|
|
//
|
|
NamelistToCommaString( &pAdapter->Tcpip_GatewayAddresses,
|
|
szGatewayAddresses,
|
|
AS(szGatewayAddresses));
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("DefaultGateway"),
|
|
szGatewayAddresses,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//
|
|
// Write out the DNS Server addresses
|
|
//
|
|
if( ! NetSettings.bObtainDNSServerAutomatically ) {
|
|
|
|
NamelistToCommaString( &pAdapter->Tcpip_DnsAddresses,
|
|
szDnsAddresses,
|
|
AS(szGatewayAddresses));
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("DNSServerSearchOrder"),
|
|
szDnsAddresses,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//
|
|
// Write out if we are using WINS or not
|
|
//
|
|
|
|
nEntries = GetNameListSize( &pAdapter->Tcpip_WinsAddresses );
|
|
|
|
// ISSUE-2002/02/28-stelo- is this the correct way of detecting if we are using WINS
|
|
// or not, just checking to see if they added anything in the
|
|
// list box?
|
|
|
|
if( nEntries == 0 ) {
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("WINS"),
|
|
_T("No"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
else {
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("WINS"),
|
|
_T("Yes"),
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
NamelistToCommaString( &pAdapter->Tcpip_WinsAddresses,
|
|
szWinsServerAddresses,
|
|
AS(szWinsServerAddresses));
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("WinsServerList"),
|
|
szWinsServerAddresses,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//
|
|
// Write out the NetBIOS option
|
|
//
|
|
switch( pAdapter->iNetBiosOption ) {
|
|
|
|
case 0: lpNetBios = _T("0"); break; // Use value generated by DHCP
|
|
case 1: lpNetBios = _T("1"); break; // Enable NetBIOS over TCP/IP
|
|
case 2: lpNetBios = _T("2"); break; // Disable NetBIOS over TCP/IP
|
|
default: AssertMsg( FALSE,
|
|
"Bad case in Net BIOS switch" );
|
|
|
|
}
|
|
|
|
if ( lpNetBios )
|
|
{
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("NetBIOSOptions"),
|
|
lpNetBios,
|
|
SETTING_QUEUE_ANSWERS );
|
|
}
|
|
|
|
//
|
|
// Write out the DNS Domain name
|
|
//
|
|
|
|
SettingQueue_AddSetting( szSectionName,
|
|
_T("DNSDomain"),
|
|
pAdapter->szDNSDomainName,
|
|
SETTING_QUEUE_ANSWERS );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: NamelistToCommaString
|
|
//
|
|
// Purpose: takes the elements of a Namelist and concatenates them together
|
|
// into a string with each element separated by a comma
|
|
//
|
|
// For instance, the namelist 1->2->3->4 becomes the string 1,2,3,4
|
|
//
|
|
// it does NOT preserve the string inside of szBuffer
|
|
//
|
|
// assumes szBuffer is of size MAX_INILINE_LEN
|
|
//
|
|
// Arguments:
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
NamelistToCommaString( IN NAMELIST* pNamelist, OUT TCHAR *szBuffer, IN DWORD cbSize ) {
|
|
|
|
INT i;
|
|
INT nEntries;
|
|
TCHAR *pString;
|
|
HRESULT hrCat;
|
|
|
|
szBuffer[0] = _T('\0');
|
|
|
|
nEntries = GetNameListSize( pNamelist );
|
|
|
|
for( i = 0; i < nEntries; i++ ) {
|
|
|
|
//
|
|
// Separate entries by a comma (but leave it off the first one)
|
|
//
|
|
if( i != 0 ) {
|
|
|
|
hrCat=StringCchCat( szBuffer, cbSize, StrComma );
|
|
|
|
}
|
|
|
|
//
|
|
// Get the new string
|
|
//
|
|
pString = GetNameListName( pNamelist, i );
|
|
|
|
//
|
|
// Append the IP string to the buffer
|
|
//
|
|
hrCat=StringCchCat( szBuffer, cbSize, pString );
|
|
|
|
}
|
|
|
|
}
|