//---------------------------------------------------------------------------- // // 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 ); }